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 : "-" )

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 :

Fabinou62

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

Fabinou62

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

sylvanu

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

  • Split.xlsm
    15.4 KB · Affichages: 4

patricktoulon

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

sylvanu

XLDnaute Barbatruc
Supporter XLD
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:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…