Créer une double permutation FOR-Next

Bonsoir

J’essaie de modifier un précédent code (code que Damien ma très bien aidé à réalisé ) mais avec mes nouvelles modifications, apparemment il y à des erreur.

Je veux simplement rajouter une boucle parallèle pour concaténer en plus la colonne D .

(voici le code précédent https://forum.excel-pratique.com/excel/creer-une-boucle-de-concaquenation-de-plage-de-zone-t32538.html )

    Sub permuta()
    Dim rangea As Range   'Déclaration de rangea en tant que range (plage)
    Dim rangeb As Range   'Déclaration de rangeb en tant que range (plage)
    Dim rangec As Range
    Dim cb As Range       'Déclaration de cb en tant que range (plage)
    Dim ca As Range       'Déclaration de cb en tant que range (plage)
    Dim cc As Range
    Dim i As Long         'Déclaration de i en tant que integer (entier..)

    Set rangec = ActiveSheet.Range("C1", "C4")  'définir rangec = C1=>C4
    Set rangea = ActiveSheet.Range("A1", "A4")  'definit rangea = A1=>A4
    Set rangeb = ActiveSheet.Range("B1", "B2")  'définir rangeb = B1=>B2
    i = 0

    For Each cc In rangec  'pour chaque range (cellule) contenu dans la plage rangec
    For Each cb In rangeb  'pour chaque range (cellule) contenu dans la plage rangeb

         For Each ca In rangea 'pour chaque range (cellule) contenu dans la plage rangeb

             Sheets("Feuil2").Range("A1").Offset(i, 0) = cc.Value & ca.Value & cb.Value 'on écrit la valeur de la cellule en cours du rangec puis on écrit la valeur de la cellule en cours du rangea puis la valeur de la cellule en cours du rangeb
           i = i + 1
        Next
     Next
    Next
    End Sub

Et voici maintenant le nouveau code modifié par mes soins ( avec erreur lol! ) :

Sub permutadouble()
    Dim rangea As Range   'Déclaration de rangea en tant que range (plage)
    Dim rangeb As Range   'Déclaration de rangeb en tant que range (plage)
    Dim rangec As Range
    Dim ranged As Range   'Déclaration de ranged en tant que range "2é"(plage)
    Dim cb As Range       'Déclaration de cb en tant que range (plage)
    Dim ca As Range       'Déclaration de ca en tant que range (plage)
    Dim cd As Range       'Déclaration de cd en tant que range "2é"(plage)
    Dim cc As Range
    Dim i As Long         'Déclaration de i en tant que integer (entier..)
    Dim y As Long         'Déclaration de y en tant que integer pour 2é boucle parraléle(entier..)

    Set rangec = ActiveSheet.Range("C1", "C4")  'définir rangec = C1=>C4
    Set rangea = ActiveSheet.Range("A1", "A4")  'definit rangea = A1=>A4
    Set rangeb = ActiveSheet.Range("B1", "B2")  'définir rangeb = B1=>B2
    Set ranged = ActiveSheet.Range("D1", "D2")  'définir rangeb = D1=>D2
    i = 0
    y = 0   'je sais pas si (y) est nescéssaire

    For Each cc In rangec  'pour chaque range (cellule) contenu dans la plage rangec
    For Each cb In rangeb  'pour chaque range (cellule) contenu dans la plage rangeb

         For Each ca In rangea 'pour chaque range (cellule) contenu dans la plage rangeb

           i = i + 1
        Next
    Next
    Next
    For Each cd In ranged  'pour chaque range (cellule D) contenu dans la plage ranged
    Sheets("Feuil2").Range("A1").Offset(i, 0) = cc.Value & ca.Value & cb.Value & cd.Value 'on écrit la valeur de la cellule en cours du rangec puis on écrit la valeur de la cellule en cours du rangea puis la valeur de la cellule en cours du rangeb
    y = y + 1
    Next

    End Sub

Le débogueur détecte une erreur de variable ou instruction WITH

Bonjour Jack20, forum

Il faut simplement rajouter une boucle:

 Option Explicit

   Sub permuta()
    Dim rangea As Range   'Déclaration de rangea en tant que range (plage)
   Dim rangeb As Range   'Déclaration de rangeb en tant que range (plage)
   Dim rangec As Range
   Dim ranged As Range
    Dim cb As Range       'Déclaration de cb en tant que range (plage)
   Dim ca As Range       'Déclaration de cb en tant que range (plage)
   Dim cc As Range
   Dim cd As Range
    Dim i As Long         'Déclaration de i en tant que integer (entier..)

    Set rangec = ActiveSheet.Range("C1", "C4")  'définir rangec = C1=>C4
    Set rangea = ActiveSheet.Range("A1", "A4")  'definit rangea = A1=>A4
    Set rangeb = ActiveSheet.Range("B1", "B2")  'définir rangeb = B1=>B2
    Set ranged = ActiveSheet.Range("D1", "D2")
    i = 0
    For Each cd In ranged
        For Each cc In rangec  'pour chaque range (cellule) contenu dans la plage rangec
            For Each cb In rangeb  'pour chaque range (cellule) contenu dans la plage rangeb
                For Each ca In rangea 'pour chaque range (cellule) contenu dans la plage rangeb
                Sheets("Feuil2").Range("A1").Offset(i, 0) = cd.Value & cc.Value & ca.Value & cb.Value 'on écrit la valeur de la cellule en cours du rangec puis on écrit la valeur de la cellule en cours du rangea puis la valeur de la cellule en cours du rangeb
                i = i + 1
                Next
            Next
        Next
    Next
    End Sub

Amicalement

Bonsoir,

Je ne suis pas certain que ce soit réellement cette méthode,

Je m'explique :

je voudrait cancaquener les colonne A . B . C ensemble, et en même temps, concaquenner cette ensemble ( A, B, C) avec la colonne D soit:

(boucle A, B, C ) & (boucle D)

le résultat finale serra donc différent qu'avec le code que tu à proposé, Non ?!?

Suggestion: peut-être faudra t-il mettre dans une variable "var1" le résultat de l'ensemble des boucles de (boucle A, B, C )

Puis mettre le résultat de la boucle (boucle D) dans une seconde variable "var2"(ou pas ...) ( au faite je ne sait pas s'il faut vraiment faire une boucle dans D ( car le but avec D est de récupérer chaque valeur de la cellule D pour la conquaquener avec la conquaquenation mutuel de ABC

Et enfin récupérer le résultat recherché comme ceci ( en le collant dans feuille 2):

Sheets("Feuil2").Range("A1").Offset(i, 0) = var1 & var2

Ou encore comme ceci ( autre exemple) :

Sheets("Feuil2").Range("A1").Offset(i, 0) = cc.Value & ca.Value & cb.Value & var2 'var2 est la cellule dans la boucle D

Voilà, j’espère avoir été claire sinon je peut faire plus simple la prochaine fois dans mes explication

bonne soirée

Rechercher des sujets similaires à "creer double permutation next"