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

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 !

Bonjour @ChantalTreize

COUP DE GUEULE : 😡

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 !!!!



😡😡😡😡😡😡

Bonne lecture

C'était mon humeur du jour 🤣🤣
Et cela va nettement mieux une fois que ces choses là sont dites !!!
😉
 
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:
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

Dernière édition:
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

Dernière édition:
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

Dernière édition:
- 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