Microsoft 365 Sortir le 1er nom à gauche d'une cellule

ChantalTreize

XLDnaute Occasionnel
Bonjour tout le monde
J'ai une colonne avec des 3 noms dans une cellule et je voudrais savoir comment extraite juste le 1er nom à gauche
voir le fichier joint
Merci d'avance
Chantal
 

Pièces jointes

  • Nom client.xlsx
    9.3 KB · Affichages: 16

Phil69970

XLDnaute Barbatruc
Bonjour @ChantalTreize

COUP DE GUEULE : :mad:

A quoi cela sert de poser des questions si tu ne réponds pratiquement JAMAIS.

A quoi cela sert que nous cherchions des solutions pour des personnes comme toi qui ne se donnent même pas la peine de revenir dire par exemple la réponse d'untel fonctionne mais celle de machin ne va pas ou me convient mieux etc.....
C'est la base d'un forum c'est l'échange et pas je mes sers sans vergogne !!!!



:mad::mad::mad::mad::mad::mad:

Bonne lecture

C'était mon humeur du jour 🤣🤣
Et cela va nettement mieux une fois que ces choses là sont dites !!!
;)
 

C'est papy Mougeot !

XLDnaute Occasionnel
Bonjour,
Avec 365 il n'y a même pas besoin de formule. Vous vous placez en C3 et vous écrivez BOULOT puis en C4 vous écrivez GAROPA et Excel a compris ce que vous voulez. Il vous écrit tous les premiers noms automatiquement.
Capture d’écran 2024-09-13 172347.png
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @fcyspm30 :),

Bravo ! Ah ben je m'en souvenais pas de cette astuce.

Cependant cela signifie qu'on analyse à la main (ou plutôt de visu) les résultats pour savoir si toutes les lignes sont justes ou non, et dans le cas contraire on corrige la ligne puis on vérifie encore une fois toutes les lignes et ainsi de suite... Avec peu de lignes c'est faisable mais avec plusieurs centaines de lignes ça risque d'être plus compliqué.

Une formule est l'aboutissement d'un raisonnement. Si à partir d'une structure source définie, on définit un raisonnement pour aboutir au résultat correct alors nul besoin de vérifier le résultat pour toutes les lignes.

Comment savoir si le raisonnement comporte des failles ? C'est compliqué aussi car souvent on oublie des cas particuliers rares ou qui ne sautent pas aux yeux pour les éléments sources. Par exemple pour une entreprise qui s'appellerait "LA CAVE à VIN ANGEVINE", le "à" met en défaut le raisonnement qui est à la base de la formule. La formule est à adapter.

C'est là où une fonction VBA est souvent plus simple : Chercher le premier terme en partant de la fin qui est en majuscule et retourner ce mot et tous les mots qui sont avant se traduit facilement en code VBA.

J'ai donc écrit ce code (fonction DebutMaj).

Par curiosité j'ai soumis le problème à COPILOT (ma première demande à une IA 🤨).

J'ai été surpris par la justesse du code généré par COPILOT.

Si vous voulez voir les deux codes (celui de ma pomme et celui de l'IA), vous pouvez les consulter dans le classeur joint dans Module1. J'ai appelé la fonction générée par l'IA du nom Copilot (me suis pas foulé). Même l'exemple fourni par COPILOT est judicieux et pertinent.

Les deux raisonnements sont les mêmes si ce n'est que je parcours les mots de la fin vers le début et l'IA parcours les mots du début vers la fin.

Question posée (excusez mon anglais approximatif - je ne savais pas que Copilot parlait français) :
excel VBA : a function that takes a string as input. The function should extract all the words from the beginning of the input until the last word that is in uppercase. The last uppercase word should be in the result of the function.

Exemple fourni par L'IA :
Sub TestExtractUntilLastUppercase()
Dim testString As String
Dim result As String

testString = "HELLO WORLD this IS a Test"
result = ExtractUntilLastUppercase(testString)

MsgBox result ' This will display "HELLO WORLD this IS"
End Sub
 

Pièces jointes

  • ChantalTreize- Fractionner- v1.xlsx
    18.8 KB · Affichages: 11
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour à tous,

J'ai testé en recopiant le tableau source du post #13 sur 190 000 lignes.

Chez moi la 1ère actualisation de la requête Power Query s'effectue en 2,2 secondes.

Avec cette macro le résultat est obtenu en 0,5 seconde, voyez le fichier zippé joint :
VB:
Sub Test()
Dim t, tablo, resu$(), i&, x$, j%, y$
t = Timer
tablo = ListObjects(1).Range
ReDim resu(1 To UBound(tablo), 1 To 1)
For i = 1 To UBound(tablo)
    x = tablo(i, 1)
    For j = 1 To Len(x)
        y = Mid(x, j, 1)
        If y <> UCase(y) Then If j > 3 Then resu(i, 1) = Left(x, j - 3): Exit For
Next j, i
resu(1, 1) = "Résultat"
[D2].Resize(i - 1) = resu
MsgBox Timer - t
End Sub

A+
 

Pièces jointes

  • Nom client_premiere minuscule.zip
    676.4 KB · Affichages: 3
Dernière édition:

job75

XLDnaute Barbatruc
Une autre méthode un peu plus rapide => 0,40 seconde :
VB:
Sub Test()
Dim t, tablo, resu$(), i&, s, x$, j%, y$
t = Timer
tablo = ListObjects(1).Range
ReDim resu(1 To UBound(tablo), 1 To 1)
For i = 1 To UBound(tablo)
    s = Split(tablo(i, 1))
    x = ""
    For j = 0 To UBound(s)
        y = s(j)
        If y = UCase(y) Then x = x & " " & y Else resu(i, 1) = Trim(x): Exit For
Next j, i
resu(1, 1) = "Résultat"
[D2].Resize(i - 1) = resu
MsgBox Timer - t
End Sub
 

Pièces jointes

  • Nom client_premiere minuscule.zip
    676.6 KB · Affichages: 5
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 090
Messages
2 116 101
Membres
112 661
dernier inscrit
ceucri