Comment modifier la valeur d'une variable à chaque boucle
Fermé
Serge
-
29 janv. 2020 à 14:10
yg_be Messages postés 23482 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 mars 2025 - 29 janv. 2020 à 20:56
yg_be Messages postés 23482 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 mars 2025 - 29 janv. 2020 à 20:56
Bonjour,
J'ai réalisé une première boucle i qui effectue un certain nombre de traitements sur la ligne 1.
(For i = x to y.... Next i)
Maintenant je souhaite reproduire le traitement de la ligne 1 sur toutes les autres lignes de ma plage avec une 2eme boucle j
(For j = x to z...Next j)
Sauf que lors de la boucle i, le sub récupère sa variable y en A1 qui détermine combien de fois le traitement doit être fait. Comment faire pour que la boucle j lors de son exécution récupère sa variable z d'abord en A1, puis en A2, puis en A3.... à chaque loop ? Comment déterminer la valeur de z ?
Des idées ?
J'ai réalisé une première boucle i qui effectue un certain nombre de traitements sur la ligne 1.
(For i = x to y.... Next i)
Maintenant je souhaite reproduire le traitement de la ligne 1 sur toutes les autres lignes de ma plage avec une 2eme boucle j
(For j = x to z...Next j)
Sauf que lors de la boucle i, le sub récupère sa variable y en A1 qui détermine combien de fois le traitement doit être fait. Comment faire pour que la boucle j lors de son exécution récupère sa variable z d'abord en A1, puis en A2, puis en A3.... à chaque loop ? Comment déterminer la valeur de z ?
Des idées ?
A voir également:
- Comment modifier la valeur d'une variable à chaque boucle
- Modifier dns - Guide
- Modifier liste déroulante excel - Guide
- Modifier une story facebook - Guide
- Comment modifier un pdf - Guide
- Modifier extension fichier - Guide
2 réponses
yg_be
Messages postés
23482
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 mars 2025
Ambassadeur
1 568
29 janv. 2020 à 14:59
29 janv. 2020 à 14:59
bonjour,
pourquoi faire deux boucles, plutôt qu'en utiliser une pour toutes les lignes?
tiens, je ne vois pas la boucle qui va passer d'une ligne à l'autre.
peux-tu montrer ton code, cela nous permettra d'être plus précis.
pense à utiliser les balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
à tout hasard:
pourquoi faire deux boucles, plutôt qu'en utiliser une pour toutes les lignes?
tiens, je ne vois pas la boucle qui va passer d'une ligne à l'autre.
peux-tu montrer ton code, cela nous permettra d'être plus précis.
pense à utiliser les balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
à tout hasard:
Dim i As Long, x As Long Dim uneligne As Range For Each uneligne In ActiveSheet.UsedRange.Rows x = 1 For i = x To uneligne.Cells(1, 1) ' ... Next i Next uneligne
Merci de me revenir
1- deux boucles parce que la première et la seconde ont des rôles différents. La première opère un calcul et une mise en forme sur la ligne active, la deuxième répète la première boucle autant de fois qu'il n'y de lignes jusqu'à la dernière ligne non vide.
2- bah y'en a pas. Je débute en VBA et ça doit être une erreur. Peut on la corriger ?
3- bien sûr. Ci dessous
Sub Traitement()
Dim i As Long, j As Long, Qt As Long, Nb As Integer
ActiveCell.EntireRow.Select
'Cloner feuille des données, insérer X nouvelles lignes et changer couleur première ligne
Sheets("Feuil1").Copy After:=Sheets(1)
Qt = Int(Val(ActiveCell.Offset(0, 2).Value))
For j = 1 To Qt
For i = 1 To Qt - 1
Selection.Copy
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Next i
Selection.Font.Bold = False
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
'Recopier X fois selection en G, L, K et J
Cells(ActiveCell.Row, "G").Select
Cells(ActiveCell.Row, "G") = Cells(ActiveCell.Row, "G") / Qt
Selection.Copy
For i = 1 To Qt - 1
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
ActiveCell.Offset(-Qt + 1, 5).Select
Cells(ActiveCell.Row, "L") = Cells(ActiveCell.Row, "L") / Qt
Selection.Copy
For i = 1 To Qt - 1
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
ActiveCell.Offset(-Qt + 1, -1).Select
Cells(ActiveCell.Row, "K") = Cells(ActiveCell.Row, "K") / Qt
Selection.Copy
For i = 1 To Qt - 1
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
ActiveCell.Offset(-Qt + 1, -1).Select
Cells(ActiveCell.Row, "J") = Cells(ActiveCell.Row, "J") / Qt
Selection.Copy
For i = 1 To Qt - 1
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
ActiveCell.Offset(1, 0).EntireRow.Select
Next j
End Sub
Remerciements
1- deux boucles parce que la première et la seconde ont des rôles différents. La première opère un calcul et une mise en forme sur la ligne active, la deuxième répète la première boucle autant de fois qu'il n'y de lignes jusqu'à la dernière ligne non vide.
2- bah y'en a pas. Je débute en VBA et ça doit être une erreur. Peut on la corriger ?
3- bien sûr. Ci dessous
Sub Traitement()
Dim i As Long, j As Long, Qt As Long, Nb As Integer
ActiveCell.EntireRow.Select
'Cloner feuille des données, insérer X nouvelles lignes et changer couleur première ligne
Sheets("Feuil1").Copy After:=Sheets(1)
Qt = Int(Val(ActiveCell.Offset(0, 2).Value))
For j = 1 To Qt
For i = 1 To Qt - 1
Selection.Copy
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Next i
Selection.Font.Bold = False
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
'Recopier X fois selection en G, L, K et J
Cells(ActiveCell.Row, "G").Select
Cells(ActiveCell.Row, "G") = Cells(ActiveCell.Row, "G") / Qt
Selection.Copy
For i = 1 To Qt - 1
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
ActiveCell.Offset(-Qt + 1, 5).Select
Cells(ActiveCell.Row, "L") = Cells(ActiveCell.Row, "L") / Qt
Selection.Copy
For i = 1 To Qt - 1
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
ActiveCell.Offset(-Qt + 1, -1).Select
Cells(ActiveCell.Row, "K") = Cells(ActiveCell.Row, "K") / Qt
Selection.Copy
For i = 1 To Qt - 1
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
ActiveCell.Offset(-Qt + 1, -1).Select
Cells(ActiveCell.Row, "J") = Cells(ActiveCell.Row, "J") / Qt
Selection.Copy
For i = 1 To Qt - 1
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
ActiveCell.Offset(1, 0).EntireRow.Select
Next j
End Sub
Remerciements
yg_be
Messages postés
23482
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 mars 2025
1 568
Modifié le 29 janv. 2020 à 18:04
Modifié le 29 janv. 2020 à 18:04
avant tout, le code fonctionne-t'il correctement?
je suppose que la discussion est à propos de ceci:
peux-tu maintenant expliquer ton soucis plus concrètement?
je suppose que la discussion est à propos de ceci:
Qt = Int(Val(ActiveCell.Offset(0, 2).Value)) For j = 1 To Qt For i = 1 To Qt - 1 ' ... Next i ' ... Next j
peux-tu maintenant expliquer ton soucis plus concrètement?
Serge
>
yg_be
Messages postés
23482
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 mars 2025
29 janv. 2020 à 20:14
29 janv. 2020 à 20:14
Merci encore
1- Oui, le code fonctionne très bien, mais je sèche sur la valeur à attribuer à j (For j = 1 to ?)
2- Concrètement, je souhaite modifier la valeur de la variable j de sorte qu'elle soit différente à chaque loop de la deuxième boucle.
Dans mon code, la boucle 1 fait une mise en forme et insère autant de lignes qu'il n'y a de quantité en colonne C de ma ligne active, donc 5, si 5 est la valeur en Colonne C de ma ligne active, ainsi de suite pour chaque ligne. Jusque là, pas de souci
La deuxième boucle N°2 elle doit reprendre les mêmes opérations (insertion d'un nombre x de lignes + mise en forme) pour chacune des lignes jusqu'à la dernière ligne non vide du tableau tout en modifiant la valeur de j à chaque passage de la boucle. (en fonction du nombre disponible en C de chacune des lignes). Ce sera multiplié par a, au premier loop, (a est en A1), puis par b au deuxième (b est en A2), puis c puis d etc.
Les valeurs sont toujours à récupérer en colonne C mais diffèrent d'une ligne à l'autre
Merci de me revenir pour d'autres précisions
1- Oui, le code fonctionne très bien, mais je sèche sur la valeur à attribuer à j (For j = 1 to ?)
2- Concrètement, je souhaite modifier la valeur de la variable j de sorte qu'elle soit différente à chaque loop de la deuxième boucle.
Dans mon code, la boucle 1 fait une mise en forme et insère autant de lignes qu'il n'y a de quantité en colonne C de ma ligne active, donc 5, si 5 est la valeur en Colonne C de ma ligne active, ainsi de suite pour chaque ligne. Jusque là, pas de souci
La deuxième boucle N°2 elle doit reprendre les mêmes opérations (insertion d'un nombre x de lignes + mise en forme) pour chacune des lignes jusqu'à la dernière ligne non vide du tableau tout en modifiant la valeur de j à chaque passage de la boucle. (en fonction du nombre disponible en C de chacune des lignes). Ce sera multiplié par a, au premier loop, (a est en A1), puis par b au deuxième (b est en A2), puis c puis d etc.
Les valeurs sont toujours à récupérer en colonne C mais diffèrent d'une ligne à l'autre
Merci de me revenir pour d'autres précisions
yg_be
Messages postés
23482
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 mars 2025
1 568
>
Serge
29 janv. 2020 à 20:56
29 janv. 2020 à 20:56
je ne te comprends pas.
quand tu écris "la valeur à attribuer à j", je ne comprends pas, puisque j va évoluer de 1 à Qt.
j'ai l'impression que tu n'as pas encore beaucoup d’expérience avec les boucles, et que tu es en train de découvrir.
quand tu écris "deuxième boucle", je n'ai aucune idée de quoi il s'agit.
de même, quand tu écris "boucle 1 fait...", je ne comprends pas de quoi il s'agit.
essaie de faire référence à des éléments concrets, comme à des lignes de code.
il me semble que tu n'utilises pas la variable j.
ajoute peut-être des commentaires dans ton code pour préciser ce que sont les boucles 1 et 2.
j'ai l'impression que tu commences à programmer, et que, dans tes explications, tu mélanges ce que devrait faire le programme avec le résultat que tu attends.
il est possible que ton programme ne fasse pas du tout ce que tu souhaites. il est peut-être préférable de partager ton fichier et d'expliquer ce que tu souhaites que le programme fasse.
quand tu écris "la valeur à attribuer à j", je ne comprends pas, puisque j va évoluer de 1 à Qt.
j'ai l'impression que tu n'as pas encore beaucoup d’expérience avec les boucles, et que tu es en train de découvrir.
quand tu écris "deuxième boucle", je n'ai aucune idée de quoi il s'agit.
de même, quand tu écris "boucle 1 fait...", je ne comprends pas de quoi il s'agit.
essaie de faire référence à des éléments concrets, comme à des lignes de code.
il me semble que tu n'utilises pas la variable j.
ajoute peut-être des commentaires dans ton code pour préciser ce que sont les boucles 1 et 2.
j'ai l'impression que tu commences à programmer, et que, dans tes explications, tu mélanges ce que devrait faire le programme avec le résultat que tu attends.
il est possible que ton programme ne fasse pas du tout ce que tu souhaites. il est peut-être préférable de partager ton fichier et d'expliquer ce que tu souhaites que le programme fasse.
29 janv. 2020 à 17:33
1- deux boucles parce que la première et la seconde on des rôles différents. La première opère un calcul et une mise en forme dur la ligne active, la deuxième répète la première boucle jusqu'à la dernière ligne non vide
2- bah y'en a pas. Je débute en VBA et ça doit être une erreur. Peut on la corriger ?
3- bien sûr
Sub Traitement()
Dim i As Long, j As Long, Qt As Long, Nb As Integer
ActiveCell.EntireRow.Select
'Cloner feuille des données, insérer X nouvelles lignes et changer couleur première ligne
Sheets("Feuil1").Copy After:=Sheets(1)
Qt = Int(Val(ActiveCell.Offset(0, 2).Value))
For j = 1 To 1
For i = 1 To Qt - 1
Selection.Copy
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Next i
Selection.Font.Bold = False
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
'Recopier X fois selection en G, L, K et J
Cells(ActiveCell.Row, "G").Select
Cells(ActiveCell.Row, "G") = Cells(ActiveCell.Row, "G") / Qt
Selection.Copy
For i = 1 To Qt - 1
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
ActiveCell.Offset(-Qt + 1, 5).Select
Cells(ActiveCell.Row, "L") = Cells(ActiveCell.Row, "L") / Qt
Selection.Copy
For i = 1 To Qt - 1
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
ActiveCell.Offset(-Qt + 1, -1).Select
Cells(ActiveCell.Row, "K") = Cells(ActiveCell.Row, "K") / Qt
Selection.Copy
For i = 1 To Qt - 1
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
ActiveCell.Offset(-Qt + 1, -1).Select
Cells(ActiveCell.Row, "J") = Cells(ActiveCell.Row, "J") / Qt
Selection.Copy
For i = 1 To Qt - 1
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Next i
ActiveCell.Offset(1, 0).EntireRow.Select
Next j
End Sub
Remerciements ????