Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
J'utilise actuellement ce code pour ouvrir un USF lorsque je clique sur la cellule correspondante, par contre je ne voudrais qu'une cellule sur 3, alors j'ai ecrit plusieurs fois la meme macro, n'y a t'il pas la possibilite de faire une boucle car en plus je voudrais aller jusqu'a la cellule 50.
et je voudrais aussi repeter ça sur la colonne K , N , R.
Je voudrais eviter d'ecrire un nombre de fois important la meme macro.
Merci de votre aide.
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("H4:H4")) Is Nothing Then
Saisie.TextBox10.Value = Range("H2").Value
Saisie.Show
End If
If Not Intersect(Target, Range("H7:H7")) Is Nothing Then
Saisie.TextBox10.Value = Range("H2").Value
Saisie.Show
End If
If Not Intersect(Target, Range("H10:H10")) Is Nothing Then
Saisie.TextBox10.Value = Range("H2").Value
Saisie.Show
End If
End Sub
Re : Comment faire une boucle sur macro qui se repete
Bonsoir
Essayes ce code
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim plage As Range
Set plage = _
Union(Range("H4:H50"), _
Range("K4:K50"), _
Range("N4:N50"), _
Range("R4:R50"))
If Not Intersect(Target, plage) Is Nothing Then
If Not IsEmpty(Target) And Target.Row Mod 3 = 1 Then
With UserForm1
.TextBox1.Value = Target
.Show
End With
End If
End If
End Sub
Re : Comment faire une boucle sur macro qui se repete
Bonsoir Yves03,
Oui, on peut faire une boucle, il suffit de trouver le point commun.
Si j'ai bien suivi, tu veux que la macro se déclenche quand tu clic sur H4 ou H7 ou H10 ou ...?
Si oui, le point commun est vite trouvé, en partant de la cellule H4, il faut descendre de 3 lignes à chaque fois!
Proposition de boucle - méthode 1 :
Code:
For i=[COLOR="Blue"][B]4[/B][/COLOR] to [COLOR="Red"][B]10[/B][/COLOR] step 3 'la variable i prend les valeurs 4, 7 et 10
'... ta partie de macro à répéter
Next i
i -> représentant le numéro de la ligne : avantage, tu peux réutiliser cette variable dans ta macro!
Exemple concret :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i as Integer
For i=4 to 10 step 3
If Not Intersect(Target, Range("H" & i)) Is Nothing Then
Saisie.TextBox10.Value = Range("H2").Value
Saisie.Show
End If
Next i
End Sub
Sinon tu peux aussi utiliser une boucle en comptant le nombre de répétition. Cela t'oblige à rajouter une variable pour gérer le numéro de ta ligne, mais tu sais plus facilement le nombre de fois que ta macro est répété.
Proposition de boucle - méthode 2 :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i as Integer
Dim NumLigne as Integer
NumLigne = 4
For i=1 to 3
If Not Intersect(Target, Range("H" & NumLigne)) Is Nothing Then
Saisie.TextBox10.Value = Range("H2").Value
Saisie.Show
End If
NumLigne = NumLigne + 3
Next i
End Sub
A mon avis, dans ton cas, le plus intéressant est la méthode 1.
Après tu peux compliquer légèrement la chose pour gérer plusieurs colonnes en imbriquant des boucles.
Pour information, le point commun entre : H, K , N , R
c'est que tu te déplace de 3 colonnes vers la droite à chaque fois!
Je te laisse essayé et si tu as besoin d'aide, dis le.
Bonne fin de soirée
yves03 à dit:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("H4[COLOR="Gray"][B]:H4[/B][/COLOR]")) Is Nothing Then
Saisie.TextBox10.Value = Range("H2").Value
Saisie.Show
End If
If Not Intersect(Target, Range("H7[COLOR="Gray"][B]:H7[/B][/COLOR]")) Is Nothing Then
Saisie.TextBox10.Value = Range("H2").Value
Saisie.Show
End If
If Not Intersect(Target, Range("H10[COLOR="Gray"][B]:H10[/B][/COLOR]")) Is Nothing Then
Saisie.TextBox10.Value = Range("H2").Value
Saisie.Show
End If
End Sub
PS. : pour l'écriture de ton code, penses à la mise en page (saut de ligne, décalage vers la gauche de la ligne, ...) pour rendre ton code plus clair 😉
Re : Comment faire une boucle sur macro qui se repete
Bonsoir,
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row > 3 And Target.Row < 51 Then
Select Case Target.Column
Case 8, 11, 14, 18
Saisie.TextBox10.Value = Range("H2").Value
Saisie.Show
End Select
End If
End Sub
Oui, on peut faire une boucle, il suffit de trouver le point commun.
Si j'ai bien suivi, tu veux que la macro se déclenche quand tu clic sur H4 ou H7 ou H10 ou ...?
Si oui, le point commun est vite trouvé, en partant de la cellule H4, il faut descendre de 3 lignes à chaque fois!
Proposition de boucle - méthode 1 :
Code:
For i=[COLOR="Blue"][B]4[/B][/COLOR] to [COLOR="Red"][B]10[/B][/COLOR] step 3 'la variable i prend les valeurs 4, 7 et 10
'... ta partie de macro à répéter
Next i
i -> représentant le numéro de la ligne : avantage, tu peux réutiliser cette variable dans ta macro!
Exemple concret :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i as Integer
For i=4 to 10 step 3
If Not Intersect(Target, Range("H" & i)) Is Nothing Then
Saisie.TextBox10.Value = Range("H2").Value
Saisie.Show
End If
Next i
End Sub
Sinon tu peux aussi utiliser une boucle en comptant le nombre de répétition. Cela t'oblige à rajouter une variable pour gérer le numéro de ta ligne, mais tu sais plus facilement le nombre de fois que ta macro est répété.
Proposition de boucle - méthode 2 :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i as Integer
Dim NumLigne as Integer
NumLigne = 4
For i=1 to 3
If Not Intersect(Target, Range("H" & NumLigne)) Is Nothing Then
Saisie.TextBox10.Value = Range("H2").Value
Saisie.Show
End If
NumLigne = NumLigne + 3
Next i
End Sub
A mon avis, dans ton cas, le plus intéressant est la méthode 1.
Après tu peux compliquer légèrement la chose pour gérer plusieurs colonnes en imbriquant des boucles.
Pour information, le point commun entre : H, K , N , R
c'est que tu te déplace de 3 colonnes vers la droite à chaque fois!
Je te laisse essayé et si tu as besoin d'aide, dis le.
Bonne fin de soirée
PS. : pour l'écriture de ton code, penses à la mise en page (saut de ligne, décalage vers la gauche de la ligne, ...) pour rendre ton code plus clair 😉
J'ai suivi tes conseils, j'utilise la methode 1.
ça fonctionne parfaitement, mais je voudrais inclure une autre boucle pour pouvoir decaler les colonnes de 3 en 3 vers la droite.
J'ai essaye de l'inclure, en suivant l'exemple de la boucle pour les lignes, mais sans succes.
Si tu pouvais m'indiquer le chemin a suivre.
Merci d'avance
Re : Comment faire une boucle sur macro qui se repete
Bonsoir Yves03,
yves03 à dit:
J'ai suivi tes conseils, j'utilise la methode 1.
ça fonctionne parfaitement, mais je voudrais inclure une autre boucle pour pouvoir decaler les colonnes de 3 en 3 vers la droite.
J'ai essaye de l'inclure, en suivant l'exemple de la boucle pour les lignes, mais sans succes.
Si tu pouvais m'indiquer le chemin a suivre.
Merci d'avance
Pour rendre le code plus clair, j'ai remplacé i par Ligne
J'ai rajouter la boucle bleu pour les numéro de colonnes.
Pour plus de facilité, j'ai remplacé la fonction Range() par la fonction Cells(), plus simple d'utilisation car les lettres correspondants aux noms des colonnes sont remplacées par des chiffres. Plus facile à incrémenter! 😉
1 = Colonne A
2 = Colonne B
...
8 = Colonne H
11 = Colonne K (=8+3)
14 = Colonne N (=11+3)
18 = Colonne R (=14+4)
Message de 00H07
Yves03 à dit:
je voudrais aussi repeter ça sur la colonne K , N , R
Remarque :
* Pour se déplacer de la colonne H à K, on se déplace de 3 colonnes vers la droite.
* Pour se déplacer de la colonne K à N, on se déplace de 3 colonnes vers la droite.
* Pour se déplacer de la colonne N à R, on se déplace de 4 colonnes vers la droite!?!?!?
Tu es sûr pour la lettre R? Ca ne serait pas plutôt Q?
Dans le code, ci-dessous, j'ai fais comme si c'était la colonne Q. Si c'est bien la colonne R, il faudra corriger la macro!
Proposition :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim [COLOR="Red"][I]Ligne[/I][/COLOR] As Integer
Dim Colonne As Integer
[COLOR="Blue"][B]For Colonne[/B][/COLOR] = 8 [COLOR="Blue"][B]To[/B][/COLOR] 17 [COLOR="Blue"][B]Step[/B][/COLOR] 3
For [COLOR="Red"][B]Ligne[/B][/COLOR] = 4 To 10 Step 3
If Not Intersect(Target, [COLOR="DimGray"][B]Cells([/B][/COLOR][COLOR="Red"][B]Ligne[/B][/COLOR], Colonne[COLOR="DimGray"][B])[/B][/COLOR]) Is Nothing Then
Saisie.TextBox10.Value = Range("H2").Value
Saisie.Show
End If
Next [COLOR="Red"][B]Ligne[/B][/COLOR]
[COLOR="Blue"][B]Next Colonne[/B][/COLOR]
End Sub
Nous en sommes donc à deux boucles imbriquées pour l'instant, mais reconnait que présenté ainsi (retrait de lignes et saut de lignes) c'est quand même plus clair 😉
Re : Comment faire une boucle sur macro qui se repete
Merci beaucoup Excel Lent
Tes explications sont vraiment TOP
Explique comme ça je comprend le principe, je vais tacher de mettre en aplication tes conseils pour la lisibilite du code;
Merci encore.
A bientot 😉
Ils étaient très succint! Voici plus de détails ci-dessous
Les principes de bases pour bien présenter sont :
-> ne pas hésiter à sauter des lignes pour séparer les différents blocs
-> aligner à l'aide des retraits ce qui va ensemble
-> ne pas hésiter à rajouter des commentaires dans le code (mettre un guillemet simple juste avant le commentaire.
Exemple ci-dessous avec de la couleur pour mieux visualiser :
Code:
[COLOR="Red"][B]Private Sub[/B][/COLOR] Worksheet_SelectionChange(ByVal Target As Range)
Dim Ligne As Integer [COLOR="Green"][B]'La variable "Ligne" contient le numéro de la ligne[/B][/COLOR]
Dim Colonne As Integer [B][COLOR="Green"]'La variable "Colonne" contient le numéro de la colonne
[/COLOR][/B]
[COLOR="Blue"][B]For[/B][/COLOR] Colonne = 8 [COLOR="Blue"][B]To[/B][/COLOR] 17 [B][COLOR="Blue"]Step[/COLOR][/B] 3
[COLOR="DimGray"][B]For[/B][/COLOR] Ligne = 4 [COLOR="DimGray"][B]To[/B][/COLOR] 10 [COLOR="DimGray"][B]Step[/B][/COLOR] 3
[B][U]If[/U][/B] Not Intersect(Target, Cells(Ligne, Colonne)) Is Nothing [B][U]Then[/U][/B]
Saisie.TextBox10.Value = Range("H2").Value
Saisie.Show
[U][B]End If[/B][/U]
[COLOR="DimGray"][B]Next[/B][/COLOR] Ligne
[COLOR="Blue"][B]Next[/B][/COLOR] Colonne
[COLOR="Red"][B]End Sub[/B][/COLOR]
Lorsqu'on met "Private Sub" au début de la macro, il faut mettre à la fin : End Sub
Une boucle For - To (step) fini par Next
Une condition IF - Then (Else) fini normalement par End If
Pour tout ces éléments, il faut choisir un retrait et prendre le même pour l'élément de début et de fin. Ainsi tu es sûr de ne pas l'oublier, mais en plus de VOIR où il se termine
Surtout lorsque plusieurs éléments sont imbriqués.
Par contre, si tes éléments ne sont pas imbriqués. C'est à dire que l'élément 2 s'ouvre seulement APRES que le premier élément soit fermé, alors tu peux les aligner TOUT LES DEUX sur la même colonne.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD