Je ne travaille généralement pas avec VBA
et je n'arrive pas à comprendre cela. J'essaie de déterminer si une certaine lettre est contenue dans une chaîne sur mon tableur.
Private Sub CommandButton1_Click()
Dim myString As String
RowCount = WorksheetFunction.CountA(Range("A:A"))
MsgBox RowCount
For i = 2 To RowCount
myString = Trim(Cells(i, 1).Value)
If myString.Contains("A") Then
oldStr = Cells(i, 15).Value
newStr = Left(oldStr, oldStr.IndexOf("A"))
End If
Next
End Sub
Ce code doit passer par une liste de valeurs et s’il rencontre la lettre A pour le supprimer et tout ce qui vient après. J'ai des problèmes avec ma déclaration IF
, qualificatif non valide. Comment pourrais-je créer une instruction IF
si la chaîne de la cellule contient ou non la lettre A?
Merci beaucoup
Essayez d’utiliser la fonction InStr qui renvoie l’index dans la chaîne à laquelle le caractère a été trouvé. Si InStr renvoie 0, la chaîne n'a pas été trouvée.
If InStr(myString, "A") > 0 Then
Pour l'erreur sur la ligne affectant newStr, convertissez également oldStr.IndexOf en fonction InStr.
Left(oldStr, InStr(oldStr, "A"))
Vous ne savez pas si c'est ce que vous recherchez, mais il passera en boucle dans la plage que vous lui avez attribuée et s'il trouve un "A", il le supprimera de la cellule. Je ne suis pas sûr de savoir à quoi sert oldStr ...
Private Sub foo()
Dim myString As String
RowCount = WorksheetFunction.CountA(Range("A:A"))
For i = 2 To RowCount
myString = Trim(Cells(i, 1).Value)
If InStr(myString, "A") > 0 Then
Cells(i, 1).Value = Left(myString, InStr(myString, "A"))
End If
Next
End Sub
Si vous parcourez de nombreuses cellules en boucle, utilisez la fonction binaire, elle est beaucoup plus rapide ... .. L'utilisation de "<> 0" à la place de "> 0" accélère également les choses:
If InStrB(1, myString, "a", vbBinaryCompare) <> 0
Essayer:
If myString like "*A*" Then