Comment modifier la valeur d'une variable à chaque boucle

Serge -  
yg_be Messages postés 23437 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 ?

2 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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
    1. Serge
       
      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
  2. Serge
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
      1. Serge > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        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
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Serge
         
        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