Concatener une plage en fonction d'une autre plage

ceddeb

XLDnaute Nouveau
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
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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
 

ceddeb

XLDnaute Nouveau
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
 

Discussions similaires

Statistiques des forums

Discussions
312 765
Messages
2 091 876
Membres
105 084
dernier inscrit
lca.pertus