Concaténation 2 colonnes vers 1 et probème de 0 sur fonction chaîne de carac.

Amandineuh

XLDnaute Nouveau
Bonjour à tous,

Toujours en quête d'apprentissage, je reviens à la charge avec 1 soucis, et une petite bricole ...:confused:

J'ai crée un classeur (ClasseurAPPRENDRE.xls) joins à mon post pour montrer et illustrer mes difficultés.

1)

Je voudrais mettre en place une concaténation de 2 colonnes vers une seule(séparée par un " x"). J'ai tenté 2 façon de faire :

Code:
'1ere tentative de concaténation avec boucle For...Next

Sub Concat1()
Dim Cell As Range
For Each Cell In Range(Cells(4, 2), Cells(Rows.Count, 2).End(xlUp).Row)
Cell = (Cell.Offset(0, 4) & " x " & Cell.Offset(0, 5))
Next
End Sub
Celle ci fonctionne uniquement quand je définis un range fixe (Range("B2:B10"), mais le nombre de mes lignes peut varier, du coup j'ai tenter l'adressage d'une plage variable, mais je ramouille tériblement sur ce point.

Je me suis alors dit qu'un boucle While...Loop pourrait faire l'affaire. Elle irait lire sur une colonne de référence, et chaque fois qu'elle trouverait un champ non vide, elle passerait à la ligne du dessus en disant "tu peux concaténer". Et dès qu'elle trouverait un champs vide, elle dirait "Stop ! plus de concaténation j'ai rein trouvée".

Donc ma tentative à donné ceci :

Code:
'2ème tentative de concaténation avec boucle Do While... sur colonne référence

Sub Concat2()
Range("E4").Select 'j'ai pris une référence colonne dont je sais qu'elle est fiable (j'aurais put prendre une des col à concaténer puisque c'est ratraper par l'offset
   Do While ActiveCell <> "" 'Loops until the active cell is blank.

      ActiveCell.Offset(0, -3).FormulaR1C1 = _
         ActiveCell.Offset(0, 1) & " x " & ActiveCell.Offset(0, 2)

     
   Loop

End Sub

J'ai cherchée à droite et à gauche, et comme je sais que les opération de concaténation sont gourmandes en ressources mémoires j'ai même tentée la déclaration de variable via un tableau ! (mais mon niveau ne me permet pas cette liberté malheureusement :eek:).

2)

le second point doit être réglé par une propriété, mais j'ignore laquelle (là encore mon soucis est illustré dans le fichier joins).

Après avoir importée la même colonne (qui contient un code de 17 caractère) dans 3 colonnes différentes, j'applique les fonctions de chaîne de caractère pour extraire la partie du code qu'il me faut.
Code:
Sub tronquer_valeurs()

    ThisWorkbook.Worksheets("Feuil1").Activate
    
    Dim Cell As Variant 'ID
    Range("B24").Select
    For Each Cell In Range(Selection, Selection.End(xlDown))
    Cell.Formula = Left(Cell.Formula, 5)
    Next
    
    Range("C24").Select 'LONGEUR
    For Each Cell In Range(Selection, Selection.End(xlDown))
    Cell.Formula = Mid(Cell.Formula, 6, 4)
    Next
    
    Range("D24").Select 'LARGEUR
    For Each Cell In Range(Selection, Selection.End(xlDown))
    Cell.Formula = Mid(Cell.Formula, 10, 4)
    Next



End Sub

Le code est vilain, mais ça donne des résultats. :p

Mais malheureusement, excel passe à la trappe tous les "0" rendant mon code erroné (quand je devrais avoir "0007", j'ai "7" après extraction sur la chaîne).

J’espère ne pas trop vous en demandez, et vous pouvez avoir l'assurance que j'ai cherchée la solution par moi même et me suis documenté le plus possible pour régler ça.

Par avance merci à ceux qui passeront par là;)
Amandine.
 

Pièces jointes

  • ClasseurAPPRENDRE.xls
    38.5 KB · Affichages: 59
  • ClasseurAPPRENDRE.xls
    38.5 KB · Affichages: 59
  • ClasseurAPPRENDRE.xls
    38.5 KB · Affichages: 76

Staple1600

XLDnaute Barbatruc
Re : Concaténation 2 colonnes vers 1 et probème de 0 sur fonction chaîne de carac.

Bonjour "l'amoureuse" ;), le fil, le forum [EDITION=Bonjour ma pomme[:EDITION]

Rajoutes un ' pour préserver tes 000

Sinon pour concaténer F et G
Code:
Sub ConcatFetG()
   With Range("B4:B10")
   .FormulaR1C1 = "=RC[4]&""x""&RC[5]"
   .Value = .Value
   End With
End Sub

Avec une variante pour identifier la dernière ligne non vide en colonne E
Code:
Sub ConcatFetGII()
Dim DerLig&
DerLig = [E65536].End(xlUp).Row
   With Range("B4:B" & DerLig)
   .FormulaR1C1 = "=RC[4]&""x""&RC[5]"
   .Value = .Value
   End With
End Sub
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Concaténation 2 colonnes vers 1 et probème de 0 sur fonction chaîne de carac.

Bonjour Amandineuh,

Pour le premier point essayez:
VB:
Sub Concat1()
Dim Cell As Range
For Each Cell In Range(Cells(4, "e"), Cells(4, "e").End(xlDown))
  Cell.Offset(0, -3) = Cell.Offset(0, 1) & " x " & Cell.Offset(0, 2)
Next
End Sub

Edit: Bonjour Staple1600
 

Staple1600

XLDnaute Barbatruc
Re : Concaténation 2 colonnes vers 1 et probème de 0 sur fonction chaîne de carac.

Re

Pour la suite (garder les zéros)
Code:
Sub tronquer_valeursII()
Dim MesValeurs As Range, c As Range
  Set MesValeurs = Range("B24:B33")
  For Each c In MesValeurs
 c.Offset(, 5) = Left(c, 5)
  c.Offset(, 6) = "'" & Mid(c, 6, 4)
   c.Offset(, 7) = "'" & Mid(c, 10, 4)
 Next c
End Sub
 

Amandineuh

XLDnaute Nouveau
Re : Concaténation 2 colonnes vers 1 et probème de 0 sur fonction chaîne de carac.

Coucou les loulous ;),

Et merci pour votre aide. Je suis en train d'essayer de régler ce problème de "0". Et heu... pardon Staple, j'aurais du préciser que les 2 soucis que je rencontre sont indépendants :(

En fin de compte je cherche à faire apparaître le dedans ...
Code:
 Cell.Formula = Left(Cell.Formula, 5)
Cell.Formula = Mid(Cell.Formula, "6", 4)
Cell.Formula = Mid(Cell.Formula, 10, "4")
... une façon de lui dire "Hé, n'oublie pas mes zéro!"
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Concaténation 2 colonnes vers 1 et probème de 0 sur fonction chaîne de carac.

Bonjour les louloutes et loulous ;)
*régler ce problème de "0"
Il faudrait nous préciser:

Quel est le type des résultats que tu souhaites dans le tableau?:
  • Sont-ce des nombres mais qui s'affichent comme 0080 ou 0007 ?
  • ou bien sont-ce des chaînes de caractères ?


Le format appliqué aux cellules est différent dans chacun des cas:
1ier cas => format de type "0000"
2ième cas => format de type "@" ou l'astuce de Staple1600 (que je salue).
 
Dernière édition:

Amandineuh

XLDnaute Nouveau
Re : Concaténation 2 colonnes vers 1 et probème de 0 sur fonction chaîne de carac.

Oh pardon, je misais tout sur la ligne de code du dessous pour illustrer ce qui me turlupine :p

Je ne peux pas vous demander d'ouvrir le fichier excel que j'ai joins, mais j'avoue que ça m'aiderais dans les explications :D.

Heu ... et bien disons que mon code de 17 caractères et une chaine de caractère (oui puisque donnée numérique placée à gauche dans la cellule renvoie à un nombre prit comme "string" si je suis pas trop sotte ;)), et qu'il faudrait que les fonctions de remaniement soient appliquées strictement (si il y a 3 zéro avant il faut qu'ils apparaissent dans la colonne).

Je pense comprendre la nuance dont tu parles, finalement est ce qu'on retravaillera ces chiffres une fois dans la colonne ou est-ce uniquement un code comme on associerai le code: 2565 à une tranche de jambon.

J'avoue que j'aimerais bien savoir faire les 2, mais dans le cas où je retiendrais uniquement la valeurs en tant que chaine de caractère comment devrais je modifier mes fonction left, et mid pour que les données "code" de ma colonne soit fidèle ?

Oh ! les procédure de concaténation marche toute les deux et remarquablement bien, je conserve sur mon fichier avec les explication, merci sincèrement pour ça
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Concaténation 2 colonnes vers 1 et probème de 0 sur fonction chaîne de carac.

(re)Bonjour à tous,

Un code pour chacun des cas (un peu pompé sur celui de Staple1600:eek:)
VB:
Sub tronquer_valeurs_nombre()
Dim MesValeurs As Range, c As Range
  Set MesValeurs = Range("B24:B33")
  MesValeurs.Resize(, 3).NumberFormat = "0000"
  For Each c In MesValeurs
    c.Offset(, 2) = Mid(c, 10, 4)
    c.Offset(, 1) = Mid(c, 6, 4)
    c = Left(c, 5)
  Next c
End Sub

Sub tronquer_valeurs_texte()
Dim MesValeurs As Range, c As Range
  Set MesValeurs = Range("B24:B33")
  MesValeurs.Resize(, 3).NumberFormat = "@"
  For Each c In MesValeurs
    c.Offset(, 2) = Format(Mid(c, 10, 4), "0000")
    c.Offset(, 1) = Format(Mid(c, 6, 4), "0000")
    c = Left(c, 5)
  Next c
End Sub

C'est rigolo (enfin si on veut !) Excel 2010 transforme le format "0000" en "code postal portugais" sur ma bécane. j'en déduis que le Portugal à moins de 10.000 communes...
 
Dernière édition:

Amandineuh

XLDnaute Nouveau
Re : Concaténation 2 colonnes vers 1 et probème de 0 sur fonction chaîne de carac.

Wouhououou !!

C'est exactement ce que je souhaitais faire, et grace à l'ami Staple .. pardon Mr.Staple (;)), j'ai ajouté une varaible pour identifier la dernière cellule non vide, et prendre toutel a colonne :
Code:
DerLig = [B65536].End(xlUp).Row
  Set MesValeurs = Range("B24:B" & DerLig)

Je garde, sur mon fichier toutes vos explications, et hop dans mon dossier d'apprentissage.
Je ne sais que dire à part que je vous suis très reconnaissante à tous les deux.
Pis tiens, soyons folle! Gros bisou
 

Staple1600

XLDnaute Barbatruc
Re : Concaténation 2 colonnes vers 1 et probème de 0 sur fonction chaîne de carac.

Re

Je ne peux pas vous demander d'ouvrir le fichier excel que j'ai joins, mais j'avoue que ça m'aiderais dans les explications :D.

Tu crois que je n'ai pas ouvert ton fichier, "ma louloute" ?
Alors comment se fait-il que je connaisse l'adresse des cellules concernées ... ;)
 

Amandineuh

XLDnaute Nouveau
Re : Concaténation 2 colonnes vers 1 et probème de 0 sur fonction chaîne de carac.

Oh mais peut être que si on lui dit pas, il n'en sera rien, et n'aura aucune raison d'être jaloux. ;)

Nananère ! Puis tiens je réitère parce que je crois en un monde fais que de bisou !
Code:
Bisou
Amandine.
 

Discussions similaires

Réponses
1
Affichages
156
Réponses
2
Affichages
137

Statistiques des forums

Discussions
312 046
Messages
2 084 844
Membres
102 686
dernier inscrit
Franck6950