Petit exercice en VBA (Table Multiplication dynamique)


#21

@Mimimathy,

Franchement je vois pas :tired_face:

J’ai essayé Range("A1:Dl").ClearContents et plein d’autre truc.
Mais ça ne fonctionne pas, ça me fou le boules :rage: il me manque que ça pour rendre une copie propre.

@+


#22

Bonsoir
A votre avis excel reconnais la dernière ligne par le nombre de répétition mentionné.
je pense que ça me dépasse cette astuce
je continue a observer

Merci Mimimathy


#23

Bonsoir à vous,

Dl est le N° de la ligne qui comporte la dernière valeur
je veux effacer de la cellule C5 à la cellule C & Dl

donc, je pourrais mettre
Dl = Range(“C” & Rows.Count).End(xlUp).Row
Range(“C5:C” & Dl ).clearcontents

mais au lieu de 2 lignes, une seule suffit

Là, je peut aller plus loin :grin:


#24

Re,

Après MDO, tu as déjà gagné, car la macro posté plus haut est déjà fonctionnel

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Dl%, Table%, Rep%, i%
  If Not Application.Intersect(Target, Range("B3,E3")) Is Nothing Then
  'Range("C5:C65000").ClearContents
    Table = Cells(3, 2)
    Rep = Cells(3, 5)
    
 '*************************************************
 '*  Dans cette partie, il y a une astuce à faire *
    Dl = Range("C" & Rows.Count).End(xlUp).Row
    Range("C5:C65000").ClearContents
 '*************************************************
    For Rep = 1 To Rep
       Cells(Rep + 4, 3) = Rep & " x " & Table & " = " & Rep * Table
    Next Rep
  End If
End Sub

#25

Re à tous,
Donc je vous post le résultat que j’avais tirer (en fait j’en ai fait 2 versions)

Version avec une boucle FOR /NEXT

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i%, Mult% 'Déclaration de variable
  If Not Application.Intersect(Target, Range("B3,E3")) Is Nothing Then 'Si les cellules B3 ou E3 sont modifiées alors
    'Range("C5").CurrentRegion.Clear 'ou ClearContents - J'efface les données de la colonne de C5 à la fin par la sélection de la plage
    '(A utiliser si les colonnes adjacentes sont vides, sinon cela effacera ces données aussi)
    'ou
    Range("C5:C" & Range("C" & Rows.Count).End(xlUp).Row) = "" 'ou ClearContents - J'efface les données de la colonne de C5 à la dernière cellule remplie
    Mult = Range("B3").Value
      For i = 1 To Range("E3").Value 'Boucle N fois la valeur de E3
        'Cells(i + 4, 3).Value = i & " x " & Mult & " = " & i * Mult 'Formule avec Cells
        'ou
        Range("C" & i + 4).Value = i & " x " & Mult & " = " & i * Mult 'Formule avec Range
      Next i
  End If
End Sub

Version avec une boucle WHILE/WEND

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i%, Mult% 'Déclaration de variable
  If Not Application.Intersect(Target, Range("B3,E3")) Is Nothing Then
    Range("C5:C" & Range("C" & Rows.Count).End(xlUp).Row) = "" 'ou ClearContents - J'efface les données de la colonne de C5 à la dernière cellule remplie
    Mult = Range("B3").Value
    i = 1 'J'initialise un compteur à 1
      While i <= Range("E3") 'Autre type de boucle qui se traduit par (Tant que i est inf ou égal au Nb de répet, je continue avec la formule
        'Cells(i + 4, 3).Value = i & " x " & Mult & " = " & i * Mult 'Formule avec Cells
        'ou
        Range("C" & i + 4).Value = i & " x " & Mult & " = " & i * Mult 'Formule avec Range
        i = i + 1 'Je rajoute 1 au compteur
      Wend
  End If
End Sub


Table de multiplication dynamique.xlsm (16,8 Ko)

Je n’ai pas mis de liste déroulante, car si je veux faire une table de 123en 123 répétions, !!!


#26

Bonsoir @Mimimathy, @sadi58,

Donc j’ai gagné :1st_place_medal: une médaille en chocolat et 20% de ta gratitude, car sans les 80% d’aide de ta part pour cet exercice j’y serais encore :crazy_face:

Cela dit, nous ne pouvons que progresser avec le partage de ton savoir en VBA :clap: merci de le partager pour le plus grand nombre d’entre nous.

Je regarderai de près les 2 façons de faire les boucles.

Belle soirée.


#27

Bonsoir

Et ben Merci a Toi mdo100 et merci a toi Mimimathy je vais voir les deux versions
voila on progresse de plus en plus grâce a des gents brave comme vous.

merci encore pour le partage


#28

Re,```

Explication de cette erreur

Ici, tu fait une boucle FOR/NEXT allant de Dl (dernière ligne) à 1
Alors cela bloque pour deux raisons:
1 - La variable Dl n’est pas encore déclarée, donc “BUG”
2 - Au cas où la variable Dl est déclarée (donc que la ligne soit avant la ligne du FOR, la boucle commence de la fin à 1, or une boucle tourne en augmentant de 1 si il n’y a pas d’autre précision
Pour que la boucle commence de la fin au début, on ajoute STEP -1 qui veut dire en retranchant d’une ligne
soit

Dl = Range("C" & Rows.Count).End(xlUp).Row

For Rep = Dl To 5 Step -1    'de la dernière ligne à la ligne 5 en reculant d'une ligne

       Range("C" & Rep).ClearContents

 Next Dl

C’est le style de boucle qui peut servir à supprimer des lignes vides ou comportant une valeur définie

Un exemple en PJ qui montre que si deux lignes vides se touche, tout n’est pas supprimer en commençant pas le haut
Test.xlsm (17,2 Ko)


#29

Salut @Mimimathy,:wink:

C’est noté:
Merci pour les informations complémentaires concernant les boucles:
For

Next

Et l’utilisation de Step -1 Je comprends mieux pourquoi cela tournait en rond.

Belle journée à toi.


#30

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.