Déplacer des infos contenues dans une cellule dans d'autres cellules

Bonjour à toutes et à tous,

je voudrais savoir s'il existe une formule permettant de déplacer certaines infos contenues dans une cellule pour les mettre dans plusieurs autres cellules afin de faciliter ma recherche dans le tableau. Je vous ai mis ci-dessous respectivement le tableau qu'on m'a donné pour bosser (bien sûr il comporte des 100aines de données, je l'ai coupé) et ce que je voudrais au final. Merci pour vos retours

11exemple.xlsx (8.76 Ko)

Bonjour

une solution:

sélectionner les données -> données -> convertir -> cocher délimité -> suivant -> cocher espace -> suivant -> changer la destination par celle souhaité (dans l'exemple D2)-> terminer

Ensuite pour la colonne interlocuteur:

=RECHERCHEV(GAUCHE(D2;4);GAUCHE(A2:B4;4);2;FAUX)

a étirer

5exemple.xlsx (9.95 Ko)

Bonjour à toutes et tous,

@Chocos22,

Une proposition a tester par formules:

Voir feuilles "Données Bruts" & "Résultats".

Cdlt.

Bonjour le fil, bonjour le forum,

Une proposition VBA avec le code ci-dessous :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TR() As Variant 'déclare la variable TR (Tableau Résultats)
Dim I As Integer 'déclare la variable I (Incrément)
Dim DEB As String 'déclare la variable DEB (DEBut)
Dim NE As Byte 'déclare la variable NE (Nombre d'Espaces)

Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
ReDim TR(1 To UBound(TV, 1), 1 To 5) 'redimensionne le tabelau des résultats (autant de lignes que TV, 5 colonnes)
TR(1, 1) = "CLIENT" 'définit la donnée en ligne 1 colonne 1 de TL
TR(1, 2) = "CODE CLIENT" 'définit la donnée en ligne 1 colonne 2 de TL
TR(1, 3) = "VILLE" 'définit la donnée en ligne 1 colonne 3 de TL
TR(1, 4) = "DÉPARTEMENT" 'définit la donnée en ligne 1 colonne 4 de TL
TR(1, 5) = "INTERLOCUTEUR" 'définit la donnée en ligne 1 colonne 5 de TL
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    TR(I, 1) = Split(TV(I, 1), " (")(0) 'définit la donnée en ligne I colonne 1 de TR (le texte avant espace suivi de l'ouverture de paranthèse)
    DEB = Split(TV(I, 1), " - ")(0) 'définit la début du mot DEB (texte avant le premier espace-tiret-espace)
    NE = UBound(Split(DEB, " ")) 'définit le nombre d'espaces NE qu'il y a dans DEB
    TR(I, 2) = Split(DEB, " ")(NE) 'définit la donnée en ligne I colonne 2 de TR (le texte avant le dernier espace)
    TR(I, 3) = Split(TV(I, 1), " - ")(2) 'définit la donnée en ligne I colonne 3 de TR (le texte après le derneir espace-tiret-espace)
    TR(I, 4) = Split(TV(I, 1), " - ")(1) 'définit la donnée en ligne I colonne 4 de TR (le texte après le second espace-tiret-espace)
    TR(I, 5) = TV(I, 2) 'définit la donnée en ligne I colonne 5 de TR (la donnée ligne I colonne 2 de TV)
Next I 'prochaine ligne de la boucle
O.Range("A1").Resize(UBound(TV, 1), 5).Value = TR 'renvoie le tableau TR dans A1 redimensionnée de l'onglet O
With O.Columns("A:E") 'prend en compte les colonnes A à E
    .AutoFit 'largeur des colonne
    .HorizontalAlignment = xlCenter 'alignement vertical
End With 'fin de la prise en compte des colonne A à E
'quadrillage
With O.Range("A1").CurrentRegion
    With .Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlEdgeTop)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlEdgeRight)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlInsideVertical)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
    End With
End With
End Sub

Bonjour ThauThème,

Quel talent Juste une question si tu le veux bien, pour mes faibles connaissances en VBA.

Comment ferais-tu pour mettre les résultats dans la "Feuil2" en conservant les données de la "Feuil1".

Par avance merci.

Cdlt

Re,

@MDO,

Si le fichier contient déjà un second onglet, ça donnerait par exemple :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OS (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TR() As Variant 'déclare la variable TR (Tableau Résultats)
Dim I As Integer 'déclare la variable I (Incrément)
Dim DEB As String 'déclare la variable DEB (DEBut)
Dim NE As Byte 'déclare la variable NE (Nombre d'Espaces)

Set OS = Worksheets("Feuil1") 'définit l'onglet OS
Set OD = Worksheets("Feuil2") 'définit l'onglet OD (à adapter à ton cas)
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
ReDim TR(1 To UBound(TV, 1), 1 To 5) 'redimensionne le tabelau des résultats (autant de lignes que TV, 5 colonnes)
TR(1, 1) = "CLIENT" 'définit la donnée en ligne 1 colonne 1 de TL
TR(1, 2) = "CODE CLIENT" 'définit la donnée en ligne 1 colonne 2 de TL
TR(1, 3) = "VILLE" 'définit la donnée en ligne 1 colonne 3 de TL
TR(1, 4) = "DÉPARTEMENT" 'définit la donnée en ligne 1 colonne 4 de TL
TR(1, 5) = "INTERLOCUTEUR" 'définit la donnée en ligne 1 colonne 5 de TL
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    TR(I, 1) = Split(TV(I, 1), " (")(0) 'définit la donnée en ligne I colonne 1 de TR (le texte avant espace suivi de l'ouverture de paranthèse)
    DEB = Split(TV(I, 1), " - ")(0) 'définit la début du mot DEB (texte avant le premier espace-tiret-espace)
    NE = UBound(Split(DEB, " ")) 'définit le nombre d'espaces NE qu'il y a dans DEB
    TR(I, 2) = Split(DEB, " ")(NE) 'définit la donnée en ligne I colonne 2 de TR (le texte avant le dernier espace)
    TR(I, 3) = Split(TV(I, 1), " - ")(2) 'définit la donnée en ligne I colonne 3 de TR (le texte après le derneir espace-tiret-espace)
    TR(I, 4) = Split(TV(I, 1), " - ")(1) 'définit la donnée en ligne I colonne 4 de TR (le texte après le second espace-tiret-espace)
    TR(I, 5) = TV(I, 2) 'définit la donnée en ligne I colonne 5 de TR (la donnée ligne I colonne 2 de TV)
Next I 'prochaine ligne de la boucle
OD.Range("A1").Resize(UBound(TV, 1), 5).Value = TR 'renvoie le tableau TR dans A1 redimensionnée de l'onglet OS
With OD.Columns("A:E") 'prend en compte les colonnes A à E
    .AutoFit 'largeur des colonne
    .HorizontalAlignment = xlCenter 'alignement vertical
End With 'fin de la prise en compte des colonne A à E
'quadrillage
With OD.Range("A1").CurrentRegion
    With .Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlEdgeTop)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlEdgeRight)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlInsideVertical)
        .LineStyle = xlContinuous
    End With
    With .Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
    End With
End With
OD.Activate 'active l'onglet OD
End Sub

@ThauThème,

Merci pour ta réponse sympas de m'avoir répondu malgré que je ne sois pas à l'origine de la demande.

j'avais trouvé une solution, mais elle n'était pas aussi précise que la tienne.

Je vais maintenant m'employer pour comparer les 2 codes pour voir ce que j'ai loupé.

Encore merci. Belle journée à toi.

Merci beaucoup

Merci à vous tous pour vos retours, c'est vraiment gentil.

Thau Thème, j'ai pas encore testé ta solution mais je prendrai le temps de le faire mais elle a l'air bien complète

Rechercher des sujets similaires à "deplacer infos contenues"