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

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

  • Separer_mots.xlsx
    8.2 KB · Affichages: 22

job75

XLDnaute Barbatruc
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

  • Foutoir_integral_a_exploser(2).xlsx
    17.6 KB · Affichages: 30
  • Foutoir_integral_a_exploser(2 bis).xlsx
    19.2 KB · Affichages: 17

zebanx

XLDnaute Accro
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é. :D
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:

job75

XLDnaute Barbatruc
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+
 

zebanx

XLDnaute Accro
Bonjour Job75

60000 lignes et moins de 2 secondes avec des formules :cool:
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
 

zebanx

XLDnaute Accro
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
 

job75

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
Re,

Si vraiment il faut "nettoyer" les colonnes A et B on introduira les noms EpureA et EpureB :
Code:
=SUPPRESPACE(SUBSTITUE(Feuil1!$A1;"/";" / "))
=SUPPRESPACE(SUBSTITUE(Feuil1!$B1;"/";" / "))
Je joins le fichier complété.

A+
 

Pièces jointes

  • Copie de Foutoir_integral_a_exploser(2).xlsx
    367.2 KB · Affichages: 33

job75

XLDnaute Barbatruc
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

  • Copie de Foutoir_integral_a_exploser(3).xlsx
    366.2 KB · Affichages: 29

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou