macro concaténer cellules

matt31

XLDnaute Occasionnel
Bonjour,

j'aurais besoin d'aide pour créer une macro qui concatène des cellules selon si elles sont vides ou non.

Dans le fichier exemple joint, sur la feuille 1, j'ai 3 colonnes (P, C et A).
Dans chaque colonne j'ai des noms.
Je voudrais que sur la feuille 2 pour les lignes P, C et A, les noms de chaque colonne s'affichent dans la cellule B correspondante.

Dans la réalité j'ai ces 3 mêmes colonnes mais 200 lignes et 30 feuilles que je veux récupérer dans ma feuille bilan.

Merci par avance pour votre aide.
 

Pièces jointes

  • Classeur1.xlsx
    8.4 KB · Affichages: 69
  • Classeur1.xlsx
    8.4 KB · Affichages: 64
  • Classeur1.xlsx
    8.4 KB · Affichages: 64

matt31

XLDnaute Occasionnel
Re : macro concaténer cellules

Bonsoir,
je reviens sur mon post car j'ai un souci pour adapter.
En fait, dans mon fichier, les données à récupérer ne sont pas en colonnes A,B et C et à partir de la ligne 2 mais en colonne L,M et N et à partir de la ligne 16, sachant que les cellules des colonnes avant et des lignes au dessus ne sont pas vides.
Je n'arrive pas à adapter et toutes mes colonnes sont sélectionnées par la macro.

Encore merci pour votre aide
 

Papou-net

XLDnaute Barbatruc
Re : macro concaténer cellules

Bonsoir matt31,

Pour faire la recherche à partir de la ligne 16 et de la colonne L, il faut modifier le code comme ceci :

Code:
Sub Demo()
Dim Col As Range, Lig As Range, Lg As Long

Lg = 4
With Feuil1
  For Each Col In .Range("L16:L" & Rows.Count).SpecialCells(xlCellTypeConstants)
    Feuil2.Range("A" & Lg) = Col
    For Each Lig In .Columns(Col.Column).SpecialCells(xlCellTypeConstants)
      If Not Lig = Col Then Feuil2.Range("B" & Lg) = Feuil2.Range("B" & Lg) & " " & Lig.Value
    Next
    Lg = Lg + 1
  Next
End With
End Sub
Espérant avoir répondu.

Cordialement.
 

matt31

XLDnaute Occasionnel
Re : macro concaténer cellules

Merci.
Cependant cela ne fonctionne pas tout à fait.
Sur mon fichier exemple (après avoir décalé aux cellules correspondantes) cela mélange les données et ne passe pas à la colonne suivante.
Sur mon fichier final, j'ai le message suivant :
"Erreur d'exécution '1004':
Pas de cellules correspondantes".

Encore merci pour votre aide
 

Papou-net

XLDnaute Barbatruc
Re : macro concaténer cellules

Bonjour matt31,

Exact, ça ne fonctionne pas (je n'avais pas testé). Voici donc une copie corrigée qui devrait te convenir :

Code:
Sub Demo()
Dim Col As Range, Lig As Range, Lg As Long

Lg = 4
With Feuil1
  For Each Col In .Range(.Cells(16, 12), .Cells(16, Columns.Count)).SpecialCells(xlCellTypeConstants)
    Feuil2.Range("A" & Lg) = Col
    For Each Lig In .Range(.Cells(16, Col.Column), .Cells(Rows.Count, Col.Column)).SpecialCells(xlCellTypeConstants)
      If Not Lig = Col Then Feuil2.Range("B" & Lg) = Feuil2.Range("B" & Lg) & " " & Lig.Value
    Next
    Lg = Lg + 1
  Next
End With
End Sub
A +

Cordialement.
 

matt31

XLDnaute Occasionnel
Re : macro concaténer cellules

Je te remercie.
Cela fonctionne en effet parfaitement sur le fichier exemple mais lorsque j'adapte au mien, la macro ne recopie rien.
Mon fichier comportant des noms et adresses (et je ne peux pas tout effacer, est-il possible de te l'envoyer en MP pour voir d'où vient le bug?
Merci par avance
 

Papou-net

XLDnaute Barbatruc
Re : macro concaténer cellules

Je te remercie.
Cela fonctionne en effet parfaitement sur le fichier exemple mais lorsque j'adapte au mien, la macro ne recopie rien.
Mon fichier comportant des noms et adresses (et je ne peux pas tout effacer, est-il possible de te l'envoyer en MP pour voir d'où vient le bug?
Merci par avance

Pas de problème, je te transmets mon adresse mail par MP.

Cordialement.
 

Papou-net

XLDnaute Barbatruc
Re : macro concaténer cellules

Bonjour Matt,

Voici donc ta macro modifiée :

Code:
Sub PV()
Dim Col As Range, Lig As Range, Lg As Long

Lg = 4
Sheets("Procès Verbal").Range("4:6").ClearContents
With Sheets("Résolution 1 M. STREE")
  For Each Col In .Range(.Cells(16, 12), .Cells(16, Columns.Count)).SpecialCells(xlCellTypeFormulas)
    Sheets("Procès Verbal").Range("A" & Lg) = Col.Offset(-1, 0)
     For Each Lig In .Range(.Cells(15, Col.Column), .Cells(Rows.Count, Col.Column)).SpecialCells(xlCellTypeFormulas)
      If Not Lig = Col Then Sheets("Procès Verbal").Range("B" & Lg) = Sheets("Procès Verbal").Range("B" & Lg) & Lig.Value & "; "
    Next
    Lg = Lg + 1
  Next
End With
End Sub
Note : cette macro ne fonctionne que pour la feuille 3 (Résolution 1 M. S....). Il serait judicieux, je pense, de prévoir une liste déroulante des feuilles de résolution pour établir le PV correspondant. Par ailleurs, j'ai prévu une commande d'effacement des lignes 4 à 6 de la feuille Procès Verbal pour éviter d'accumuler les données en cas de clics multiples sur le bouton de commande.

A +

Cordialement.
 

Discussions similaires

Réponses
8
Affichages
439

Statistiques des forums

Discussions
312 520
Messages
2 089 277
Membres
104 083
dernier inscrit
hecko