Comment modifier la valeur d'une variable à chaque boucle

Fermé
Serge - 29 janv. 2020 à 14:10
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 - 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 ?
A voir également:

2 réponses

yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
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:
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
0
Merci de me revenir

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 ????
0
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
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
Modifié le 29 janv. 2020 à 18:04
avant tout, le code fonctionne-t'il correctement?
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?
0
Serge > yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024
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
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471 > Serge
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.
0