Microsoft 365 Concaténer un ensemble de cellules avec Excel

jejdjd

XLDnaute Nouveau
Bonjour,

J'ai récupéré le code suivant afin de concaténer un ensemble de cellules, cependant mes cellules ne sont pas vides mais elles contiennent le caractère "-", seriez-vous comment je peux exclure ces cellules ?

Function ConcatPlage(plage As Range, séparateur As String, Optional contenant As String) As String
Dim rep As String, c As Range
For Each c In plage
If InStr(c.Value, contenant) > 0 Then
rep = rep & c.Value & séparateur
End If
Next c
ConcatPlage = Left(rep, Len(rep) - Len(séparateur))
End Function


Merci d'avance !
Bonne journée
 

frangy

XLDnaute Occasionnel
Bonjour,

La fonction que tu présentes effectue la concaténation des cellules en utilisant un séparateur paramétré. Un autre paramètre (optionnel) permet de ne sélectionner que les cellules qui contiennent un caractère (ou chaine de caractères) donné.
Reste à savoir comment tu utilises cette fonction. Tu devrais indiquer plus précisément le type de valeurs que contiennent les cellules et quel est le résultat attendu.
Un fichier exemple ne serait pas de trop ...

Cordialement.
 

jejdjd

XLDnaute Nouveau
J'ai trois colonnes G, H et I
Toutes ces colonnes contiennent une chaîne de caractère, si la cellule est vide il est noté "-".
Sur le même principe que le code précédent, je souhaiterais assembler mes trois cellules sur toutes les lignes et quand il assemble mes données, j'aimerais qu'il considère que si il est écrit "-" alors c'est vide.
Actuellement, il me considère que c'est vide uniquement si il n'a pas d'information.
 

xUpsilon

XLDnaute Accro
Bonjour jejdjd,

Plusieurs choses :
- Il existe une fonction Concaténer directement grâce à =Concat sur Excel
- Utilise la fonction Si dans ta concaténation
- Si tes cellules contiennent uniquement le caractère "-", il te suffit de tester si le Contenu de ta cellule est = '-' ou pas. Tu peux faire ça aisément avec la formule SI.

Bonne continuation
 

xUpsilon

XLDnaute Accro
En supposant que tu aies des valeurs dans A1 B1 et C1 et que tu stockes la concaténation dans D1 :
Tu écris dans D1
=CONCATENER(Si(A1="-";;A1);Si(B1="-"; ;B1);Si(C1="-"; ; C1))

Est-ce plus clair ?

Bonne continuation

Edit : Comme tu n'as pas l'air d'y connaitre grand chose, j'imagine que tu vas me dire qu'il concatène des 0 issus des Si qui renvoient une valeur Vraie. Ce problème vient des paramètres de Excel qui met par défaut 0 dans les cases dont la valeur est vide. Pour corriger cela vois ce lien : https://support.office.com/fr-fr/ar...s-nulles-3ec7a433-46b8-4516-8085-a00e9e476b03
 

xUpsilon

XLDnaute Accro
Tu peux bien sûr utiliser VBA.
A ce moment là il te faut quelque chose comme ça :
VB:
Dim a, b ,c as String

If Range("A1") = "-" then
    a = ""
Else
    a = Range("A1")
End if
If Range("B1") = "-" then
    b = ""
Else
    b = Range("B1")
End if
If Range("C1") = "-" then
    c = ""
Else
    c = Range("C1")
End if

Range("D1") = a & b & c

Ce code n'est pas du tout optimisé, mais c'est juste pour te montrer un peu la démarche qu'il faudrait utiliser pour concaténer.

Bonne continuation
 

patricktoulon

XLDnaute Barbatruc
bonjour
VB:
Function ConcatPlage(plage As Range, séparateur As String, Optional contenant As String) As String
    Dim rep As String, c As Range
    For Each c In plage
        If InStr(c.Value, contenant) > 0 And c.Value <> "-" Then
            rep = rep & c.Value & séparateur
        End If
    Next c
    ConcatPlage = Left(rep, Len(rep) - Len(séparateur))
End Function
maintenant si dans le concat les emplacement doivent être présent même pour les value="-"
Code:
If InStr(c.Value, contenant) > 0  Then

            rep = rep & iif(c.value="-","",c.value) & séparateur
ce que je pige pas c'est que si contenant est une chaîne différente du séparateur et différente de "-" normalement ça devrait fonctionner ton modèle
plus de précision sur ce point pourrait nous éclairer
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Une autre syntaxe pour concaténer (un chouia plus courte ;))
VB:
Function CCAT(Rng As Range, Optional vSp As String = ";")
CCAT = Join(Application.Transpose(Rng), vSp)
End Function
Utilisation
=CCAT(A1:A10)
ou avec choix du séparateur
=CCAT(A1:A10;"/")
 

Staple1600

XLDnaute Barbatruc
Re

La version avec le choix du sens (Vertical ou Horizontal )
VB:
Function CCAT(Rng As Range, Vertical As Boolean, Optional vSp As String = ";")
Dim p
With Application
p = IIf(Vertical, .Transpose(Rng), .Transpose(.Transpose(Rng)))
End With
CCAT = Join(p, vSp)
End Function
Utilisation
Vertical
=CCAT(A1:A12;VRAI)
ou Horizontal
=CCAT(A5:E5;FAUX)
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
En supposant que tu aies des valeurs dans A1 B1 et C1 et que tu stockes la concaténation dans D1 :
Tu écris dans D1
=CONCATENER(Si(A1="-";;A1);Si(B1="-"; ;B1);Si(C1="-"; ; C1))

Est-ce plus clair ?
J'ai trois colonnes G, H et I
Pourquoi faire un test ???
=SUPPRESPACE(SUBSTITUE(CONCATENER(G1;" ";H1;" ";I1);"-";" "))

Edit : Comme tu n'as pas l'air d'y connaitre grand chose
:rolleyes: pourquoi utiliser EXcel pour la programmation,
en ignorant le B.A. BA des formules de feuille de calcul ?


 

Discussions similaires

Statistiques des forums

Discussions
315 095
Messages
2 116 167
Membres
112 675
dernier inscrit
Tazra_IMOU