Créer une boucle de concaquénation de plage de zone

bonjour

Serait-il simple de générés le résultat d'une concaquénation de valeur directement dans un autre fichier Excel ou dans une autre feuille et on utilisant Vb ?

Explication:

fichier Excel 1:

J'ai des valeur dans A1 à A4 .

J'ai d'autre valeur dans B1 à B2 .

Je voudrais faire générer une liste qui contiendrait le résultat concaquénation de valeur comme ceci:

fichier Excel 2 ou feuille 2:

C

1 le contenue A1+ le contenu B1

2 le contenue A2+ le contenu B1

3 le contenue A3+ le contenu B1

4 le contenue A4+ le contenu B1

5 le contenue A1+ le contenu B2

(Note: la boucle se termine en A4 puis recommence afin de mélanger une fois chaque éléments de la cellule A avec chaque éléments de la cellule B ) .

Note: il s'agit de concaquer seulement le contenu des cellule afin d'en obtenir le résulta concret.

Si quelqu'un pourrait me poster un fichier avec un exemple cela m'aiderais réellement s'il vous plaît . Merci

Salut,

Un test :

Sub permuta()

Dim rangea As Range
Dim rangeb As Range
Dim cb As Range
Dim ca As Range
Dim i As Long

Set rangea = ActiveSheet.Range("A1", "A4")
Set rangeb = ActiveSheet.Range("B1", "B2")
i = 0

For Each cb In rangeb
    For Each ca In rangea
      Sheets("Feuil2").Range("A1").Offset(i, 0) = ca.Value & cb.Value  'Ecris en colonne A dans l'onglet Feuil2
      i = i + 1
    Next
Next

End Sub

Note: il s'agit de concaquer seulement le contenu des cellule afin d'en obtenir le résulta concret.

Qu'entends tu pas là ? Résultat concret ?

Damien

Salut et déjà merci! car ton code a bien l'aire de correspondre a mes attente ,

Se que j'entends par concaquener les valeurs réel? Voici un exemple:

A. B

A1=22 B=y

A2=33

Feuille 2 récupérera le produit concaquener brut des valeurs comme ceci :

C

22Y

33Y

Se sont simplement les valeurs dans les cellule qui m'intéresseront et je craignais que l'on ne me comprennent pas.

Pour en revenir a tes instructions Vb que tu me propose elle me rappelle les quelques notion de base que j'avais acquis avec visuel Basic.vb6

Tu a créé deux boucles"For" dont une sous-boucle.

J'ai du mal a comprendre certaines instructions mais je comprend que très globalement.

Par exemple je me demande se que représente cb et ca. Pour moi

Cb représente la colonne A et cb représente la colonne B .

Afin de pouvoir tester cela je doit chercher a trouver comment utiliser ton code dans un fichiers Excel. Je ne les jamais réalisé. Peut-tu expliquer les expressions de ton code stp

Merci

Je trouve comment faire et te donne le résultat

Re,

Voici mon code commenté

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 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 i As Long         'Déclaration de i en tant que integer (entier..)

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 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) = ca.Value & cb.Value '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
End Sub

Je lis chaque cellule dans le range B1=>B2, a chaque valeur lue je fais une boucle pour récuperer chaque valeur de la plage A1->A4 et je remonte la valeur concaténée.

Dis moi si tu ne comprends pas.

Damien

salut

c'est assez claire finalement , merci

Maintenant je vais essayer de me débrouiller et te tiendrais au courant pour les évolution.

Je vais tenter d'ajouter une troisième colonne à concaquéner .

Cet exercice consistera pour moi à essayer de concaquéner une 3é valeur en la plaçons au tout début et à la fin.

Ex:

3éme_valeur & 1ére & 2éme & 3éme

Je vais m'essayer à cet exercice !!

ps: pour le moment je cherche toujours à tenter d’exécuter ton code .... je vais réussir ne t’inquiète pas Damien

Cordialement marc


petite question au passage :

si tu à le fichier avec le code et si tu à le temps alors hésite pas à me le joindre sinon se n'est pas important et je me débrouillerais,

Ne t'en fait pas pour moi lol

merci

voici le fichier vb que je viens de créer avec ton code.

Je n'imaginais pas qu'il y est autant de difficulté que cela.

J'ai fait ceci :

1) Nouveau fichier

2) cliquer " ouvrir le code" (après activation des macro via option de sécurité)

3) Cliquer dans l'une des fenêtre appelé "CODE"

4) Coller le code dedans ( c'était ton code )

5)Ensuite j'ai cliqué sur le bouton "play"

6) Une boite de dialogue ma demander de choisir la macro

7) J'ai choisi de faire ( afficher toute les Macros) , puis en cliquant dessus, une erreur c'est produite.

Voici le fichier joints ( Mais il faut savoir que j'ai ouvert un autre fichier VB qui n'a rien avoir et je pense qu'il se sont mélangé ensemble lorsque j'ai ouvert la fenêtre des macros)

Re,

Voici le fichier avec le code, j'ai rajouté un bouton pour le lancer. (Fait ALT+F11 pour ouvrir l'editeur)

Pense que tu dois être sur la feuille contenant les données quand tu lances la macro.

Et que tu dois modifier le nom de l'onglet de resultat dans la ligne :

Sheets("Feuil2").Range("A1").Offset(i, 0) = ca.Value &........

De plus un fichier avec l'extension XLSX ne PEUT PAS contenir de macro, il faut enregistrer ton fichier en XLSM.

Damien

16permutation.zip (10.02 Ko)

Re

Très très bien, je vais faire exactement comme tu me dis ,

Je suis encore chez moi alors que j'ai rendez-vous avec mon patron depuis 14h00 lol ...... > Je dois faire vite!

Merci


sa Fonctionne très très bien !!!

Merci vraiment c'est super sympas

Je t'ecris depuis mon mobile...

J'ai pensée a une méthode pour remplacer la collone A comme ceci:

Utiliser des valeurs issue d'un fichier texte ou d'une feuille d'un autre fichier Excel au lieu de choisir la colonne A1:A4.

Ex: un fichier.txt contenant du texte comme ceci " A, B, C, D "

Si mon fichier texte ce situe sur mon bureau et qu'il y a dedans des valeurs séparés par une virgule .

Pour faire une boucle de la même manière que ton code mais a la place d'utiliser le rang A (A1:A4) , on utiliseraient ce fichier texte .

Les données contenue a l'intérieur seront exactement les même qu'au début du post .

Je vais essayer de trouver un poste avec exemple et je poste le résultats ici.

Salut

Je viens de modifier le code et je me demande s'il est juste. Je le testerais après.

J'ai fait en sorte de rajouter et créer la colonnes "c" c1=>c4.

Je veux la concaquener en la m'étant en tout premier avec les autres résultats.

Code avec C en plus :

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

End Sub

Est ce que c'est juste ?


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
End Sub

Ensuite si min code est juste, je voudrais savoir comment ajouter la colonnes B depuis un fichiers Excel se trouvant a l'emplacement c:

Salut,

Il manque un next dans ton code : tu auras une erreur lors du lancement.

Sinon, pour aller chercher les valeurs de la colonne B dans un autre fichier :

(A tester)

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..)
Dim monfichierencours As Workbook
Dim monautrefichier As Workbook

Set monfichierencours = ActiveWorkbook 'mon fichierencours est le fichier que je suis en train d'utiliser
Set rangec = monfichierencours.ActiveSheet.Range("C1", "C4")  'définir rangec = C1=>C4
Set rangea = monfichierencours.ActiveSheet.Range("A1", "A4")  'definit rangea = A1=>A4

'PENSER A CHANGER LE NOM DU FICHIER
Set monautrefichier = Workbooks.Open("c:\FichierColonneB.xls", , True) 'On ouvre l'autre fichier en lecture seul
'PENSER A CHANGER LE NOM DE L'ONGLET

Set rangeb = monautrefichier.Sheets("Feuil1").Range("B1", "B2")  'définir rangeb = B1=>B2 dans l'autre fichier
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

         monfichierencours.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

monautrefichier.Close False 'on ferme le fichier sans sauvegarde (même si dans ce cas, comme on l'a ouvert en lecture seul...)
End Sub

A te relire.

Damien

Bonsoir et merci

Comme je suis un peut débutant pour vba sur excel je m'est un peut de temps

Pour résumer où j'en suis :

J'essaie de rajouter ton dernier code avec le code précédent "permutation" .

- Donc pour se faire je conte ouvrir la macro permutation puis de coller le nouveaux dans la fenêtre Code principal.

Ensuite je vais créer le fichiers excel requis "c:\FichierColonneB.xls" (pour faire fonctionner la macro).

Cordialement

Salut

Apparemment ce post est sur résolut (j'allais le valider malgré que je n'est pas finalisé de mon coté)

Rechercher des sujets similaires à "creer boucle concaquenation plage zone"