Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Conversion des données séparées par ; en ligne

  • Initiateur de la discussion Initiateur de la discussion shmider
  • 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 !

shmider

XLDnaute Occasionnel
Bonjour tou le monde;

Voilà je souhaiterai mettre en ligne (la conversion par excel permet de le mettre en colonne) des données séparées par ;

En effet, dans l'option excel>données>convertir on peut mettre ces données en colonne.

Cf. fichier joint pour exemple.

Merci de votre aide et bonne journée à toutes et tous !!!
 

Pièces jointes

Re : Conversion des données séparées par ; en ligne

re,

ton soucis vient d'ici :
Code:
                .Range("A" & i).Offset(decalage, 0).Value = tabColA(j)
                .Range("B" & i).Offset(decalage, 0).Value = tabColB(k)
                .Range("AL" & i).Offset(decalage, 0).Value = tabColAL(L)
                .Range("AM" & i).Offset(decalage, 0).Value = [B][COLOR=Red]tabColAM[/COLOR][/B](M)
                .Range("AO" & i).Offset(decalage, 0).Value = [B][COLOR=Red]tabColAO[/COLOR][/B](Q)

a+
 
Re : Conversion des données séparées par ; en ligne

😱Bonsoir,

En pièce jointe je t'explique mon problème actuel en détail. en principe on a demandé à ce que la macro passe en deuxième ligne (créer une ligne juste à la suite) des données après le ; sauf que là, il y a beaucoup plus de ligne qui ont été crées !!??

@+ mromain et bonne soirée.
 
Dernière édition:
Re : Conversion des données séparées par ; en ligne

bonjour shmider,

tu as du oublier le fichier dans ton post précédent.

sinon, pour l'instant la macro crée une ligne pour chaque combinaisons possible.
en gros :
- si c'est une ligne qui as 2 données concaténées en colonne A, la macro créera 2 lignes.
- si c'est une ligne qui as 3 données concaténées en colonne A, la macro créera 3 lignes.
- si c'est une ligne qui as 3 données concaténées en colonne A et 2 en colonne B, la macro créera 3x2=6 lignes.
- si c'est une ligne qui as 3 données concaténées en colonne A, 2 en colonne B et 4 en colonne AL, la macro créera 3x2x4=24 lignes.
- ...

hier j'ai essayé de savoir ce que tu voulais exactement (cf mes posts de 14h13 et 14h44) et je n'ai pas eu de réponse...

a+
 
Re : Conversion des données séparées par ; en ligne

🙂Re-Bonjour mromain,

Je m'excuses pour hier, j'ai essayé d'etre le plus clair possible. C'est vrai, j'aurais dû t'expliquer mon objectif plus clairement.

mromain, en fait, et comme tu peux le voir sur la pièce jointe, je souhaite mettre en ligne les valeur après le ;. Et ça, à chaque fois que j'ai des données concaténées. mon objectif est de mettre dans la meme ligne toutes les valeurs concaténées dans une ligne.
i.e: Si j'ai en colonne A: S123;S456 , en B: 100;200 et C: 01;02
par macro on formate de telle sorte à avoir:
A1: S123 , B1: 100 et C1: 01
A2: S456 , B2: 200 et C2: 02
et ainsi de suite jusqu'à la Nième donnée concaténée.

j'éspère que je me suis bien exprimer cette fois romain.

aller @+ et merci encore.
 

Pièces jointes

Dernière édition:
Re : Conversion des données séparées par ; en ligne

re,

OK, début de réponse 🙂

donc si il y a en colonne A S123;S456 , en B: 100 et C: 01;02,
on doit avoir ça :
A1: S123 , B1: 100 et C1: 01
A2: S456 , B2: 100 et C2: 02

et si il y a en colonne A S123;S456;S789 , en B: 100 et C: 01;02,
on doit avoir quoi ?
ça :
A1: S123 , B1: 100 et C1: 01
A2: S456 , B2: 100 et C2: 02
A2: S789 , B2: 100 et C2: 01
ou ça :
A1: S123 , B1: 100 et C1: 01
A2: S456 , B2: 100 et C2: 02
A2: S789 , B2: 100 et C2: 02

a+
 
Re : Conversion des données séparées par ; en ligne

hello romain,

Tu me rassure là, car tu vois très bien mon problème !!

Ce qui plus rassurant, c'est qu'on tombera jamais sur les deux derniers cas de figures, soient,
A1: S123 , B1: 100 et C1: 01
A2: S456 , B2: 100 et C2: 02
A2: S789 , B2: 100 et C2: 01
ou ça :
A1: S123 , B1: 100 et C1: 01
A2: S456 , B2: 100 et C2: 02
A2: S789 , B2: 100 et C2: 02

car tout simplement, dans mon cas une commande a toujours une quantité 😉 donc jamais une commande sans articles 😉

d'où,

"Si A S123;S456 , en B: 100 et C: 01;02,
on doit avoir ça :
A1: S123 , B1: 100 et C1: 01
A2: S456 , B2: 100 et C2: 02 "

en gros, le nombre des ; est le meme dans toutes les cellules contenant des données concaténées 😉

voilà, voilà 🙂

Merci mromain.
 
Re : Conversion des données séparées par ; en ligne

voici le code modifié (à tester)
Code:
Sub convertir()
Dim i As Integer, j As Integer, k As Integer, decalage As Integer, strMem As String, lineAdded As Boolean

'déclarer autant de tableau que de colonne contenant des valeurs concaténées
Dim tabColA() As String, tabColB() As String, tabColAL() As String, tabColAM() As String


'masquer l'affichage
Application.ScreenUpdating = False

With ThisWorkbook.Sheets("Feuil1")

    'ce "For" permet de boucler sur ligne de la feuille "Feuil1" (de 13 à 2 dans cet exemple)
    For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
    
        'récupérer dans les tableaux "tabColX" les items de la colonne "X" de la ligne i
        '(c'est ici qu'on sépare les items séparés par un ";")
        tabColA = Split(.Range("A" & i).Text, ";")
        tabColB = Split(.Range("B" & i).Text, ";")
        tabColAL = Split(.Range("A" & i).Text, ";")
        tabColAM = Split(.Range("A" & i).Text, ";")
        
        'compter le nombre max de valeurs concaténées sur les différentes colonnes
        j = 0
        j = IIf(j < UBound(tabColA), UBound(tabColA), j)
        j = IIf(j < UBound(tabColB), UBound(tabColB), j)
        j = IIf(j < UBound(tabColAL), UBound(tabColAL), j)
        j = IIf(j < UBound(tabColAM), UBound(tabColAM), j)
        
        'compléter les tableaux qui n'ont pas la taille maxi
        While UBound(tabColA) < j
            ReDim Preserve tabColA(LBound(tabColA) To UBound(tabColA) + 1)
            tabColA(UBound(tabColA)) = tabColA(LBound(tabColA))
        Wend
        While UBound(tabColB) < j
            ReDim Preserve tabColB(LBound(tabColB) To UBound(tabColB) + 1)
            tabColB(UBound(tabColB)) = tabColB(LBound(tabColB))
        Wend
        While UBound(tabColAL) < j
            ReDim Preserve tabColAL(LBound(tabColAL) To UBound(tabColAL) + 1)
            tabColAL(UBound(tabColAL)) = tabColAL(LBound(tabColAL))
        Wend
        While UBound(tabColAM) < j
            ReDim Preserve tabColAM(LBound(tabColAM) To UBound(tabColAM) + 1)
            tabColAM(UBound(tabColAM)) = tabColAM(LBound(tabColAM))
        Wend
        
        'INSERER LES NOUVELLES LIGNES
        For j = LBound(tabColA) To UBound(tabColA) - 1
            'insérer une ligne après la ligne i
            .Rows(i + 1).Insert
            'copier les valeur de la ligne i (dans la ligne insérée)
            .Rows(i).Copy .Rows(i + 1)
        Next j
        
        'MODIFIER LES COLONNES "A COMBINAISON"
        'boucler sur chaque combinaison
        For j = LBound(tabColA) To UBound(tabColA)
            'inscrire les différentes combinaisons sur la ligne concernée
            .Range("A" & i).Offset(j, 0).Value = tabColA(j)
            .Range("B" & i).Offset(j, 0).Value = tabColB(j)
            .Range("AL" & i).Offset(j, 0).Value = tabColAL(j)
            .Range("AM" & i).Offset(j, 0).Value = tabColAM(j)
        Next j
    'passer à l'autre ligne (de la feuille ("Feuil1")
    Next i
End With

'raffraichir l'affichage
Application.ScreenUpdating = True

End Sub

a+
 
Re : Conversion des données séparées par ; en ligne

Salut mromain,

Nikel j'ai pu faire des petites modife pour pouvoir adopter le code.
Je pense que mon problème est résolu. je te confirme ça à la fin de cet après midi.

salut et grace à toi tout est nikel 😉

@+
 
Dernière édition:
- 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

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…