Concatener une plage en fonction d'une autre plage

  • Initiateur de la discussion Initiateur de la discussion ceddeb
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

C

ceddeb

Guest
Bonjour,

Nous avons un fichier avec une succession de ligne qui contiennent un certain nombre d'attribut (une trentaine) et qui peuvent être vide.
Pour chaque ligne, nous souhaitons concaténer ces valeurs selon un type défini dans une ligne fixe.

Ex :
| DATE | TEXT | TEXT | NUMBER | NUMBER |
| 05/07/2012 | toto | | 158 | |
| 05/12/2012 | tata | test | 158 | 75 |

Concatener avec une ','
champs DATE recopier le contenu de la cellule entre '' ou mettre null
champs NUMBER recopier le contenu de la cellule ou mettre null
champs TEXT recopier le contenu de la cellule entre '' ou mettre 'N/A'

Donnerai :
=> '05/07/2012','toto','N/A',158,null
=> '05/12/2012','tat','test',158,75

Après recherche sur internet nous sommes arrivées à cette fonction, mais elle ne marche pas :

{
Function Concatvalue(plage As Range, typV As Range, Optional sep As String) As String

Dim rep As String, c As String, typ As String

For i = 0 To Range(typV).Cells

c = plage(i)
typ = typV(i)

If typ = "NUMBER" Then
If c <> "" Then
rep = rep & c & sep
Else
rep = rep & "null" & sep
End If
Else
If typ = "DATE" Then
If c <> "" Then
rep = rep & "'" & c & "'" & sep
Else
rep = rep & "null" & sep
End If
Else
If c <> "" Then
rep = rep & "'" & c & "'" & sep
Else
rep = rep & "'N/A'" & sep
End If
End If
End If
Next i

Concatplage = Left(rep, Len(rep) - Len(sep))

End Function
}


Merci beaucoup pour votre support
 
Re : Concatener une plage en fonction d'une autre plage

Bonsoir ceddeb et bienvenu 🙂

En l'absence de réponse, un essai via VBA. Un fichier joint aurait été un plus 🙂

VB:
Function Convertir(xLigne As Range, xTitre As Range) As String
Const Apo = "'", Vir = ",", Nul = "null", NA = "'N/A'"
Dim i As Long, N As Long, X

N = xLigne.Rows(1).Cells.Count
For i = 1 To N
X = Trim(xLigne(1, i))
  Select Case Trim(xTitre(1, i))
    Case "DATE"
      If X <> "" And IsDate(X) Then
         Convertir = Convertir & Vir & Apo & Format(xLigne(1, i), "dd/mm/yyyy") & Apo
      Else
        Convertir = Convertir & Vir & Nul
      End If
    Case "NUMBER"
      If X <> "" And IsNumeric(xLigne(1, i)) Then
         Convertir = Convertir & Vir & xLigne(1, i)
      Else
        Convertir = Convertir & Vir & Nul
      End If
    Case "TEXT"
      If X <> "" Then
         Convertir = Convertir & Vir & Apo & xLigne(1, i) & Apo
      Else
        Convertir = Convertir & Vir & NA
      End If
  End Select
Next i
Convertir = Right(Convertir, Len(Convertir) - 1)
End Function
 
Re : Concatener une plage en fonction d'une autre plage

Merci beaucoup de la part de Cédric et Déborah

Désolé de ne pas avoir répondu, je pensais qu'on serait alerté par mail.

Cela semble bien correspondre.
On va pouvoir mettre à jour le template d'insertion (que l'on n'a pas envoyé car un peu lourd et c'est un document interne)

En plus le code est clair pour des non initiés vba.
Après si quelqu'un à la solution sans passer par VB. Je dis pourquoi pas ?

Bon week-end
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
909
Retour