Comment modifier la valeur d'une variable à chaque boucle
Serge
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
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
- Comment modifier une story sur facebook - Guide
- Modifier extension fichier - Guide
- Vous avez besoin d'une autorisation de la part de système pour modifier ce dossier - Guide
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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
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
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.
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 ????