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
- Messages
- 358
- Excel
- 2003-2007 FR
- Inscrit
- 02/08/2011
- Emploi
- Consultant Test Performance / Audit
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 SubNote: 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!
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
- Messages
- 358
- Excel
- 2003-2007 FR
- Inscrit
- 02/08/2011
- Emploi
- Consultant Test Performance / Audit
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 SubJe 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)
- Messages
- 358
- Excel
- 2003-2007 FR
- Inscrit
- 02/08/2011
- Emploi
- Consultant Test Performance / Audit
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
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 SubEnsuite si min code est juste, je voudrais savoir comment ajouter la colonnes B depuis un fichiers Excel se trouvant a l'emplacement c:
- Messages
- 358
- Excel
- 2003-2007 FR
- Inscrit
- 02/08/2011
- Emploi
- Consultant Test Performance / Audit
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 SubA 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é)