Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Microsoft 365Ré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 !
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 🙂
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
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 🙁
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
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.🙂
- 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