Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Récupérer un bout de chaine (jusque l'apparition de : "-" )

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 !

Fabinou62

XLDnaute Occasionnel
Bonjour,

J'ai dans une cellule : mot1 - mot2
J'aimerais récupérer seulement le mot1, en VBA, il a une taille variable.
J'ai pensé à faire une boucle While.... mais je ne sais pas si il y a une meilleur façon de le faire 🙂

Merci d'avance 🙂
 
Solution
Bonjour Fabinou,
En PJ un essai, qui, à partir de mot1 - mot2 stocke mot1 et mot2
il faut utiliser le résultat de tableau.
VB:
Sub essai()
For indextab = 2 To 30
    If InStr(Cells(indextab, 11).Value, " - ") <> 0 Then
        'MsgBox (" -  détécté")
        Tableau = Split(Cells(indextab, 11), " - ") ' tableau commence à l'indice 0
        Cells(indextab, 13).Value = Tableau(0) ' premier mot
        Cells(indextab, 15).Value = Tableau(1) ' second mot
    End If
Next indextab
End Sub

Addon :
J'aurai une autre question, j'aimerais récupérer la partie droite de la chaîne (ici : mot2) pour la mettre dans une cellule, j'ai tester ca mais ca ne fonctionne pas :
VB:Copier dans le presse-papier
If InStr(Cells(indextab, 11).Value, " - ") <> 0 Then
MsgBox (" - détécté")
Tableau = Split(Cells(indextab, 11).Value, " - ")
Cells(indextab, 10).Value = Split(Cells(indextab, 11).Value, " - ")
Cells(indextab, 11).Select

For i = 0 To Tableau.GetUpperBound(0)
MsgBox(Tableau(i))
Next i

End If
indextab est une variable incrémentée par une boucle for
Mais il m'indique à chaque fois, objet requis 🙁

exusez moi si c'est indiqué 2 fois 🙂
 
J'ai fais des modifs et ca marche, merci quand même 🙂

Pour les curieux :

If InStr(Cells(indextab, 11).Value, " - ") <> 0 Then
Cells(indextab, 11).Select
MsgBox (" - détécté")
Tableau = Split(Cells(indextab, 11).Value, " - ")
Cells(indextab, 10).Value = Split(Cells(indextab, 11).Value, " - ")
Cells(indextab, 12).Value = Tableau(UBound(Tableau))

End If
 
Bonjour Fabinou,
En PJ un essai, qui, à partir de mot1 - mot2 stocke mot1 et mot2
il faut utiliser le résultat de tableau.
VB:
Sub essai()
For indextab = 2 To 30
    If InStr(Cells(indextab, 11).Value, " - ") <> 0 Then
        'MsgBox (" -  détécté")
        Tableau = Split(Cells(indextab, 11), " - ") ' tableau commence à l'indice 0
        Cells(indextab, 13).Value = Tableau(0) ' premier mot
        Cells(indextab, 15).Value = Tableau(1) ' second mot
    End If
Next indextab
End Sub

Addon :
 

Pièces jointes

bonjour
perso je me dis que split pour split je vire instr
pourquoi tester instr pour splitter autant tester le ubound du split ca fait un code simple et plus facile a appréhender
VB:
    With Cells(indextab, 11)
        tableau = Split(.Value, " - ")
        If UBound(tableau) > 0 Then
            MsgBox (" - détécté")
            .Offset(, -1).Value = tableau(0)
            .Offset(, 1).Value = tableau(UBound(tableau))
        End If
    End With
 
Bonsoir Patrick,
C'est la même chose.
J'ai conservé l' Instr de Fabinou, il évite le transfert de la cellule dans le tableau en cas d'absences de " - ";
ensuite lequel est le plus rapide ....
Avec deux mots surement pas de différence, avec des chaines plus complexes, je ne saurais me prononcer.

Addon :
Just for the fun ...
Avec 28000 chaines sans " - ", sur mon PC, avec Instr : 0.253s, sans Instr : 0.316 soit 25% plus rapide avec Instr
Avec 1000 chaines avec " - ", sur mon PC, avec Instr : 0.242s, sans Instr : 0.234 soit 3% plus rapide sans Instr
Donc l'optimum va dépendre du ratio de chaîne avec et sans séparateur.🙂
 
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

Réponses
4
Affichages
406
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…