Microsoft 365 Extraire caractères d'une chaine de caractères

drenek35

XLDnaute Nouveau
Bonjour,
J'ai une chaine de caractères :
13 8 11 9 3 7 4 1 2 5 6 12 10

Je souhaiterais que, lorsque je colle cette chaine de caractère dans une cellule par exemple A3, les nombres se copient dans les cellules adjacentes. Un nombre par cellule.
Ce qui fait que j'aurais les nombres :
13 dans la cellule B3
8 dans la cellule C3
11 dans la cellule D3
...
10 dans la cellule N3

Ci-joint fichier exemple pour une meilleure compréhension.

Merci par avance pour votre aide.
Amicalement,
Christian.
 

Pièces jointes

  • Fichier exemple.xlsx
    8.7 KB · Affichages: 6

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Pour ceux qui n'ont pas 365 mais ont quand même accès à FILTRE.XML :
=TRANSPOSE(FILTRE.XML("<items><item>" & SUBSTITUE(A4;" ";"</item><item>") & "</item></items>";"//items/item"))
Pour ceux qui ont 365 (que je n'ai pas) vous avez la fonction :
Sinon le site xld regorge de trucs pour pour éclater des chaînes de caratères.
Une colonne entière par l'outil de conversion (Données/Convertir)
1673201192475.png
 

Pièces jointes

  • Fichier exemple.xlsx
    9.8 KB · Affichages: 3

fanch55

XLDnaute Barbatruc
Bonsoir à tous,
Sinon, pour agir en dynamique au niveau saisie sans retravailler toute la feuille :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    lr = Cells(Rows.Count, "A").End(xlUp).Row
    Select Case True
    Case Target.Count > 1
    Case lr < 3
    Case Not Intersect(Target, Range("A3:A" & lr)) Is Nothing
        Application.EnableEvents = False
            Range(Target.Offset(, 1), Rows(Target.Row).Columns(Columns.Count).Address).ClearContents
            T = Split(Target)
            Target.Offset(, 1).Resize(, UBound(T) + 1) = T
        Application.EnableEvents = True
    End Select
End Sub
 

drenek35

XLDnaute Nouveau
Bonjour @Hasco @Phil69970
Merci pour vos réponses. Les deux solutions sont bien et répondent à mes attentes.

Sauf un petit détail concernant la solution par VBA

@Phil69970, est-il possible d'écraser les données sans confirmation ?
Car quand je rajoute des chaines de caractères dans la colonne A, cela m'oblige de confirmer pour chaque ligne de donnée déjà présente. donc quand mon fichier fera 100 lignes, il faudra que je confirme pour chaque ligne.

Si trop compliqué à faire, c'est pas grave vue que la solution par formule fonctionne également. Mais j'ai peur qu'avec un grand nombre de ligne la solution via formule alourdisse le fichier.

Merci par avance pour votre aide.
Amicalement,

Christian.
 

fanch55

XLDnaute Barbatruc
@fanch55 votre réponse s'est intercalé avec mes réponses. merci pour votre participation. Je n'ai pas réussi à intégrer votre code dans mon fichier.
Classeur joint avec le code intégré dans la feuille
Qu'entendez vous par agir en dynamique au niveau saisie ?
Pas de bouton à activer, pas de formule à corriger ou étendre, il suffit de faire une modification en colonne A .
 

Pièces jointes

  • Drenek.xlsm
    15.9 KB · Affichages: 7

patricktoulon

XLDnaute Barbatruc
Bonsoir
sinon en une seule ligne tu peux te faire ta petite fonction perso
dans un module
VB:
Function StringSplitter(c As String)
StringSplitter = Split(c & Application.Rept(" ", 500), " ")
End Function
ensuite tu sélectionne une plage a partir de "B" et tu lui colle cette formule
=StringSplitter($A2)
et pour les version inf a OFFICE 365 valider en matriciel CTRL+MAJ+ENTER

demo.gif
 

fanch55

XLDnaute Barbatruc
Bonsoir
sinon en une seule ligne tu peux te faire ta petite fonction perso
dans un module
VB:
Function StringSplitter(c As String)
StringSplitter = Split(c & Application.Rept(" ", 500), " ")
End Function
ensuite tu sélectionne une plage a partir de "B" et tu lui colle cette formule
et pour les version inf a OFFICE 365 valider en matriciel CTRL+MAJ+ENTER
Salut @patricktoulon ,
Intéressante comme formule matricielle, mais elle ne concerne qu'une ligne et il faut donc l'adapter à chaque valeur entrée en colonne A.🤔
C'est la première fois que je vois REPT utilisé à la place de STRING mais c'est blanc bonnet ... ;)
 

Discussions similaires