Répartir des mots séparés par un "/" dans plusieurs cellules

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

ttlan

XLDnaute Nouveau
Bonjour,

J'ai une colonne avec des mots (1, 2 ou 3 mots) séparés par des " / ", comme :
Pierre
Pierre / Paul
Pierre / Paul / Jaques

Je voudrais séparer ces mots dans trois colonnes (en répétant le dernier mot pour toujours compléter les 3 colonnes). Obtenir quelque chose comme la pièce jointe.

J'arrive à me débrouiller avec Pierre / Paul, mais lorsqu'il n'y a pas de "/" ou lorsqu'il y en a 2, je patauge.

Est-ce que quelqu'un a une solution simple et élégante ?

Merci

Cordialement
 

Pièces jointes

Re, salut Nicole,

Eh oui, y a pas que zebanx qui soit accro au VBA 🙂

Si l'on n'est pas à l'aise avec les noms définis on utilisera une colonne auxiliaire.

Et si l'on veut que le tableau s'agrandisse automatiquement on utilisera un tableau Excel.

Fichiers (2) et (2 bis).

A+
 

Pièces jointes

Bonsoir Job75, Nicole, Theze

@Theze
Pas l'impression que la formule puisse se faire sans écraser quelques données des autres colonnes...
C'est idéal s'il n'y a pas d'autres colonnes par contre.

@job75
A force de coller d'excellents codes VBA, faut pas s'étonner qu'on essaye - tant bien que mal - de s'y coller --))

Et je suis étonné qu'un comparatif de TIMER sur 30000 lignes n'ait pas (encore) été effectué. 😀
Moi je l'ai fait sur 15000 lignes et je suis déjà largué sur mes formules en VBA *.

C'est pas grave, je suis content d'avoir travaillé sur un code VBA avec JOIN() en essayant de la rendre utilisable pour le code que tu avais déjà fourni.
Et accessoirement d'avoir récupéré de Nicole une autre formule pratique.
Tout en gardant ton dernier fichier en stock, ce que fera surement l'émetteur de ce post qui sera ravi d'utiliser ces formules bien pratiques plutôt que du VBA.

Bonne soirée
zebanx

*Timer :
Sur 15000 lignes environ :
- Formules : Job75 (<1 seconde)
- VBA : zebanx (>8 secondes sur le 1er code)
 
Dernière édition:
Bonjour à tous,

J'ai testé le fichier du post #15 de Nicole (avec séparateur " / ") sur 60 000 lignes :
Code:
Sub test()
Dim t
t = Timer
[F1:H1].AutoFill [F1:H60000], xlFillValues
MsgBox Timer - t
End Sub
Cette macro s'exécute en 4 secondes.

Avec mes 3 formules du post #6 la macro s'exécute en 1,4 seconde.

A+
 
Bonjour Job75

60000 lignes et moins de 2 secondes avec des formules 😎
Je t'avoue en être même surpris pour l'utilisation de formules directes sur une plage aussi grande.
Tant mieux, parce que cela concilie l'aspect pratique de la solution la plus pertinente pour ce post et la rapidité.

++
zebanx
 
Bonjour Nicole,

Le code est excellent de simplificité et d'efficacité mais, et pardon si je me trompe, j'ai l'impression qu'il ne travaille en matriciel que sur la colonne A.

Or la deuxième demande de l'émetteur du post serait de prendre en compte à la fois la possibilité d'avoir :
- 1,2, 3 prénoms dans la colonne A (c'était sa demande initiale)
- des prénoms dans la colonne B et/ou la colonne C (avec un total toujours de 3 prénoms au final par ligne).

Désolé pour le temps perdu si je suis à côté de la plaque ( Ca arrive assez souvent).
Et merci pour ces deux codes.

Bonne journée
zebanx
 
Re,

Suite au post #21 de Nicole et pour comparer des choses comparables j'ai utilisé :
Code:
Sub test()
Dim t
t = Timer
Calculate 'recalcule les formules
MsgBox Timer - t
End Sub
Avec le fichier du post #15 sur 60 000 lignes :

- fonction Decoupe du post #15 => 1,3 seconde

- fonction Decoupe2 du post #21 => 0,50 seconde

- formules du post #6 rendues volatiles* => 0,23 seconde.

* formules du post #6 adaptées en F1 G1 H1 :
Code:
=GAUCHE(A1;TROUVE(" /";A1&" /")-1)&T(ALEA())

=SI(A1=F1;F1;STXT(A1;NBCAR(F1)+4;TROUVE(" /";A1&" /";NBCAR(F1)+4)-NBCAR(F1)-4))&T(ALEA())

=SI(OU(A1=F1;A1=F1&" / "&G1);G1;STXT(A1;NBCAR(F1)+NBCAR(G1)+7;9^9))&T(ALEA())
A+
 
Re,

zebanx s'étonnait que des formules Excel puissent être plus rapides que du VBA.

Il faut savoir que VBA n'est pas un langage particulièrement rapide, en tout cas ce n'est pas le langage qu'utilise Microsoft pour programmer ses fonctions Excel.

Et il faut savoir aussi que VBA ne durera pas éternellement, Microsoft pense le supprimer.

A+
 
Re,

En fait le "nettoyage" des colonnes A et B (et éventuellement C) par formules n'est pas une très bonne solution, cela alourdit inutilement les calculs.

Il vaut mieux utiliser la commande "Remplacer" (touches Ctrl+H) pour remplacer "/" par " / " puis remplacer les doubles espaces par un seul.

Par contre dans ce fichier (3) j'ai traité la colonne G pour qu'un seul nom y soit affiché.

Malgré la complication le recalcul des formules (rendues volatiles) s'effectue en 96 millièmes de seconde.

Contre 121 millièmes de seconde avec la fonction Decoupe4 du post #28.

A+
 

Pièces jointes

- 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

Retour