Concatenation conditionnée

Y compris Power BI, Power Query et toute autre question en lien avec Excel
z
zanmankou
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 2 février 2015
Version d'Excel : 2010 FR

Message par zanmankou » 2 février 2015, 17:16

Bonjour
Je suis débutant en excel et j'ai besoin de votre aide pour ceci:
J'ai un fichier texte de contact que j'ai importé dans excel dans l'espoir de suprrimer les doublons.
Pour cela, je compte concatener les informations comprises entre les deux balises BEGIN:VCARD et END:VCARD.
J'ai 4922 lignes, le tout dans la colonne A de ma feuille excel.
Entre ces deux balises, le nombre de lignes n'est pass constant et varie souvent. Je me suis dit qu'il faut une boucle mais je ne sais comment y arriver. Vous trouverez ci-joint une capture d'écran.
Capture.JPG
Capture.JPG (47.5 Kio) Vu 200 fois
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'691
Appréciations reçues : 345
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 2 février 2015, 17:28

Bonjour et bienvenue sur le forum

Pour te faire une proposition, il faudrait que tu joignes ton fichier, même en ne mettant qu'une partie des 4922 lignes...
Bye !
z
zanmankou
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 2 février 2015
Version d'Excel : 2010 FR

Message par zanmankou » 2 février 2015, 17:50

Bonjour et merci gmb
Voici un extrait du fichier.
L'objectif final est d'avoir un numéro associé à un nom.
J'ai déjà trouvé un code de macro qui m'a permis de supprimer les lignes comportant VERSION
extrait_fichier.xlsx
(10.42 Kio) Téléchargé 10 fois
Avatar du membre
Marc L
Membre dévoué
Membre dévoué
Messages : 806
Appréciation reçue : 1
Inscrit le : 27 janvier 2015
Version d'Excel : 2003 / 2007

Message par Marc L » 2 février 2015, 17:57

 

Bonjour,

joindre un exemple précis du résultat final souhaité afin de sortir du brouillard !

Qui plus est le classeur joint a mal été importé, joindre plutôt un fichier comme le fichier source …

Sinon à partir d'un classeur, pas besoin de boucle via la méthode Find à consulter dans l'aide VBA intégrée …


______________________________________________________________________________________________________________________________________
Tous unis, tous Charlie
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'691
Appréciations reçues : 345
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 2 février 2015, 18:26

Alors voilà :
extrait_fichier v1.xlsm
(22.5 Kio) Téléchargé 12 fois
Cela te convient-il ?
Bye !
z
zanmankou
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 2 février 2015
Version d'Excel : 2010 FR

Message par zanmankou » 2 février 2015, 18:58

Merci pour votre réactivité mais ce n'est pas encore ce que je cherche à obtenir.
Avec ceci:

BEGIN:VCARD
N:;Abi Impots;;;
FN:Abi
TEL;PREF;CELL:374908378975985
END:VCARD
BEGIN:VCARD
N:;Abiba
FN:Abiba
TEL;PREF;CELL:9070709888
END:VCARD


Je voudrais avoir

BEGIN:VCARD+N:;Abi Impots;;;+FN:Abi+TEL;PREF;CELL:374908378975985+END:VCARD

BEGIN:VCARD+N:;Abiba+FN:Abiba+TEL;PREF;CELL:9070709888+END:VCARD

En conclusion, conacatenu le contenu entre les balises BEGIN:VCARD et END:VCARD sur une ligne

Merci
Avatar du membre
Marc L
Membre dévoué
Membre dévoué
Messages : 806
Appréciation reçue : 1
Inscrit le : 27 janvier 2015
Version d'Excel : 2003 / 2007

Message par Marc L » 2 février 2015, 19:11

 

Un exemple de concaténation dans ce sujet

 
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'691
Appréciations reçues : 345
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 2 février 2015, 19:21

Marc (Salut Marc !) a tout à fait raison : joins un exemple précis de ce que tu souhaites...
Bye !
Avatar du membre
Marc L
Membre dévoué
Membre dévoué
Messages : 806
Appréciation reçue : 1
Inscrit le : 27 janvier 2015
Version d'Excel : 2003 / 2007

Message par Marc L » 2 février 2015, 19:39

 
Vu la pauvreté de la présentation, sortie vers la feuille (et si c'est pas cela, tant pis, faut être clair dès le début !) :
Sub Demo()
    Dim Rd As Range, Rf As Range
                 C& = [COUNTIF(A:A,"BEGIN:VCARD")]
    ReDim T$(1 To C, 1 To 1)

    With Feuil1.Columns(1)
        Set Rf = .Cells(1)

        For R& = 1 To C
             Set Rd = .Find("BEGIN:VCARD", Rf)
             Set Rf = .Find("END:VCARD", Rd)
            T(R, 1) = Join(Application.Transpose(Range(Rd, Rf)), "+")
        Next
    End With

    With Feuil1.Cells(4)
        .CurrentRegion.Clear
        .Resize(C).Value = T
    End With
End Sub
 
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
z
zanmankou
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 2 février 2015
Version d'Excel : 2010 FR

Message par zanmankou » 2 février 2015, 19:47

Marc L a écrit :
 
Vu la pauvreté de la présentation, sortie vers la feuille (et si c'est pas cela, tant pis, faut être clair dès le début !) :
Sub Demo()
    Dim Rd As Range, Rf As Range
                 C& = [COUNTIF(A:A,"BEGIN:VCARD")]
    ReDim T$(1 To C, 1 To 1)

    With Feuil1.Columns(1)
        Set Rf = .Cells(1)

        For R& = 1 To C
             Set Rd = .Find("BEGIN:VCARD", Rf)
             Set Rf = .Find("END:VCARD", Rd)
            T(R, 1) = Join(Application.Transpose(Range(Rd, Rf)), "+")
        Next
    End With

    With Feuil1.Cells(4)
        .CurrentRegion.Clear
        .Resize(C).Value = T
    End With
End Sub
 
Merci Marc, le code que tu as envoyé répond à ma requête, celle d'avvoir toutes les informations d'un contact sur une même ligne. Le reste je vais m'en charger tout en continuant à lire les cours de VBA.
Merci beaucoup
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message