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é
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 SubEt 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 SubLe 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 SubAmicalement
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