De plus si je veux une table avec des Ré-pets à + de 21, y a pas
Puni des p’tits suisses pendant 2 jours
Aucune formule n’est tolérée et en principe sur 7/8 lignes la macro est construite
sans liste déroulante
Petite aide, déclarer des variables qui seront le multiplicateur et le Nb d’éxécution (répétition)
une fois cela fait une simple boucle, sans oublier de supprimer les anciennes données
Salut MDO
C’est un bon début, avec une petite erreur dans la variable Dl.
tu as mis un $ (qui remplace “As String” pour chaine de caractère, or Dl représentera la Dernière ligne je suppose, vu que tu l’a déclaré
Ensuite, pour les 2 autres variables déclarées, il te faut maintenant les initialiser avec les données des cellules respectives, soit Range(“B3”) ou cells(3,2) et Range(“E3”) ou cells(3,5)
Ceci étant fait, dans une boucle For … Next pour boucler sur le nombre de répétition, on introduit la formule pour effectuer le résultat dans la colonne C à partir de C5 jusqu’à C et Nb Rep
Re,
cette ligne Dl = Range("C" & Rows.Count).End(xlUp).Row
te renseigne sur le N° de la dernière ligne de la colonne C qui n’est pas vide et pourra d’aider à effacer les lignes allant de la ligne 5 à la dernière
Pour avancer plus vite, tu n’est pas obliger de mettre directement Private Sub Worksheet_Change(ByVal Target As Range) tu le met en commentaire avec un apostrophe au début et tu met Sub Test() par exemple.
Cela permet en cliquant sur la petite flèche verte dans le ruban de lancer la macro
ou
en étant sur une ligne de la macro, tu cliques sur la touche F8, cela te fait avancer le code en pas à pas
En plus, pour surveiller les résultats, tu sélectionne par exemple: Dl et clic droit --> Ajouter un espion et valider par OK
tu auras un menu sur le bas qui te donnera le résultat en temps réel dés que tu auras passé par F8 dessus
ou
autre solution
mettre après Dl par exemple, la ligne
Msgbox Dl
La macro s’arrêtera et te donnera le résultat de la Dl
Pour info, une manière de vérifier si l’écriture est correcte, et de taper tout en minuscule, les fonctions se mettront en bleu et les variables prendrons les majuscule attribuées comme déclarées après passage à la ligne
Private Sub Worksheet_Change(ByVal Target As Range)
'Pour mémoire ==> Dl = dernière ligne; Table = B3; Rep = E3
Dim Dl%, Table%, Rep%
If Not Application.Intersect(Target, Range("B3")) Is Nothing Then
Table = Cells(3, 2)
Rep = Cells(3, 5)
Dl = Range("C" & Rows.Count).End(xlUp).Row
' Cells(5, 3) = 1 & " x " & Table & " = " & 1 * Table
' Cells(6, 3) = 2 & " x " & Table & " = " & 2 * Table
' Cells(7, 3) = 3 & " x " & Table & " = " & 3 * Table
' ici on place une boucle **FOR Rep = 1 to Rep** pour que la multiplication commence à 1 jusqu'à valeur de REP
For Rep = to 'à déclarer
'dans cette cellule de réception **Cells(Rep, 3)** la formule ira se copier en C1 or je la désire en C5, donc j'ajoute 4 à Rep, soit Cells(Rep+4, 3)
Cells(Rep, 3) = Rep & " x " & Table & " = " & Rep * Table
Next Rep
' ici on place **Next Rep** pour que la boucle fasse le tour de 1 à Rep
End If
End Sub
Regarde, ça commence a bien fonctionner, même si je n’ais pas su encore comment me servir de Dl pour effacer jusqu’à la dernière ligne.
Private Sub Worksheet_Change(ByVal Target As Range)
'Pour mémoire ==> Dl = dernière ligne; Table = B3; Rep = E3
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)
Dl = Range("C" & Rows.Count).End(xlUp).Row
' ici on place une boucle **FOR Rep = 1 to Rep** pour que la multiplication commence ? 1 jusqu'? valeur de REP
For Rep = 1 To Rep 'à déclarer
Cells(Rep + 4, 3) = Rep & " x " & Table & " = " & Rep * Table
'dans cette cellule de réception **Cells(Rep, 3)** la formule ira se copier en C1 or je la désire en C5, donc j'ajoute 4 à Rep, soit Cells(Rep+4, 3)
Next Rep
' ici on place **Next Rep** pour que la boucle fasse le tour de 1 ? Rep
End If
End Sub
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
Si tu as compris le système de la boucle for Rep = 1 to Rep
qui veut dire en partant de 1 pour boucler à Rep (qui vaut le Nb de répétition)
j’ai demandé que le résultat soit à partir de C5 soit la ligne 5
au départ Rep vaut 1, je rajoute 4, cela vaut 5 (ligne 5)
la boucle suivante Rep vaut 2 , je rajoute 4, cela vaut 6 (ligne 6)
etc, jusqu’à Rep = Rep dans la boucle + 4
Pas de soucis,
J’avais donné un “coup de pouce” voyant que personne ne répondait aux appels pour montrer un peu le début de la macro
Car il ne faut pas avoir honte de montrer ses débuts, le but est de vous remettre dans le droit chemin et que la ou les erreurs vous soient bénéfiques pour la suite,
car il y aura des suites de plus en plus compliquées afin de pouvoir me "passer au-dessus "
Mais ça me supprime ligne par ligne, jusqu’à la valeur en « E3 », je suppose qu’il faudrait une autre boucle mais jusqu’à la valeur « E3 »
J’ai donc essayé:
For Rep = Dl To 1
Dl = Range("C" & Rows.Count).End(xlUp).ClearContents
Next Dl
Mais ça me bloque tout.
Et je n’ais pas trouvé l’astuce dont tu parles
'*************************************************
'* Dans cette partie, il y a une astuce à faire *
Dl = Range("C" & Rows.Count).End(xlUp).Row
Range("C5:C65000").ClearContents
'*************************************************
J’ai vu ton 2ème Exercice, il me parait très difficile, on verra après.
j’ai précisé
'*************************************************
'* Dans cette partie, il y a une astuce à faire *
Dl = Range(“C” & Rows.Count).End(xlUp).Row
Range(“C5:C65000”).ClearContents
'*************************************************
Dl signifie la dernière ligne non vide de la colonne C Range(“C5:C65000”) signifie la plage allant de C5 à C65000
pourquoi aller à 65000 alors que la dernière ligne est DL