Comparer des chaînes de caractères en VBA
Résolu/Fermé
A voir également:
- Vba comparer deux string
- Deux ecran pc - Guide
- Deux comptes whatsapp - Guide
- Itinéraire google map entre deux adresses - Guide
- Faire deux colonnes sur word - Guide
- Find vba - Astuces et Solutions
5 réponses
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
14 janv. 2014 à 11:40
14 janv. 2014 à 11:40
Bonjour,
un peu plus simple:
un peu plus simple:
Sub RechercheChaîneCaractères()
Dim p As Integer
Dim q As Integer
Dim AdressText As String
Dim AdresseTexteChercher As String
With Worksheets("Sources")
'passage en majuscule phrase
AdressText = UCase(.Range("J3"))
For i = 3 To 7
'passage en majuscule texte a chercher
AdresseTexteChercher = UCase(.Range("I" & i))
'test si dans phrase
If InStr(1, AdressText, AdresseTexteChercher) Then
'ecriture
.Range("K3") = AdresseTexteChercher
End If
Next i
End With
End Sub
Ohhh Punaise!!
D'une part merci pour ta réponse :D
C'est plus simple pour toi mais j'ai pas du tout compris le code; y a moyen que tu explicites ton code ou pas?
Pourquoi tu passes en majuscule en fait? C'est surtout ca qui me pose problème ^^
Je t'en serai reconnaissant
D'une part merci pour ta réponse :D
C'est plus simple pour toi mais j'ai pas du tout compris le code; y a moyen que tu explicites ton code ou pas?
Pourquoi tu passes en majuscule en fait? C'est surtout ca qui me pose problème ^^
Je t'en serai reconnaissant
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
14 janv. 2014 à 11:56
14 janv. 2014 à 11:56
Re,
sauf si vous y tenez, recherche entetes de colonnes pas utiles
bloc With --- end with: si autre feuille active, vous ecrirez pas au bon endroit
passage en majuscules pour eviter les differences d'ecriture (miniscules, majuscules)
instr(): permet de trouver la position d'un caractere ou chaine dans un mot ou une phrase
sauf si vous y tenez, recherche entetes de colonnes pas utiles
bloc With --- end with: si autre feuille active, vous ecrirez pas au bon endroit
passage en majuscules pour eviter les differences d'ecriture (miniscules, majuscules)
instr(): permet de trouver la position d'un caractere ou chaine dans un mot ou une phrase
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
14 janv. 2014 à 12:16
14 janv. 2014 à 12:16
Bonjour à tous,
ou si les 2 chaines doivent être strictement égales :
Ajouter Ucase() sur les 2 chaines si il peut y avoir une différence de case.
eric
ou si les 2 chaines doivent être strictement égales :
If IAdressText = AdresseTexteChercher ThenOn ne sait jamais, des termes comme "Prélèvement" peuvent éventuellement être présents dans des libellés plus long...
Ajouter Ucase() sur les 2 chaines si il peut y avoir une différence de case.
eric
Merci Eriiic pour ta réponse,
Les termes sont toujours écrits de la même manière en fait donc ca me gênera pas. Mais si c'est le cas je dois utiliser Ucase en fait?
J'ai bien tout compris ^^?
Et sinon j'ai pas compris non plus pourquoi on utilisais la syntaxe suivante:
Pourquoi le "." devant le range?
Les termes sont toujours écrits de la même manière en fait donc ca me gênera pas. Mais si c'est le cas je dois utiliser Ucase en fait?
J'ai bien tout compris ^^?
Et sinon j'ai pas compris non plus pourquoi on utilisais la syntaxe suivante:
.Range("K3") = AdresseTexteChercher
Pourquoi le "." devant le range?
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
14 janv. 2014 à 12:56
14 janv. 2014 à 12:56
Si tu as un doute sur les majuscules/minuscules qui pourraient être différentes tu transformes les chaines en majuscule avec Ucase() pour les rendre équivalentes.
Si tu ne sais pas tu le mets d'office comme l'a fait f894009.
eric
Si tu ne sais pas tu le mets d'office comme l'a fait f894009.
eric
Je suis dégoutté parce que la méthode de f894009 fonctionne à merveille mais je n'arrive pas à l'adapter à mon projet.
Ne comprenant pas pourquoi on utilise la méthode With, je ne souhaite pas la représenter dans mon programme. C'est pourquoi je souhaite continuer avec la base de code que je vous ai fourni.
J'ai donc fait quelques modifications en fonction de ce que vous m'aviez proposé tel que:
Mais me voilà encore bloquer, je ne comprends pas pourquoi la valeur de la variable "TexteChercher" ne s'inscrit pas dans la cellule K3!
Est ce que quelqu'un peut m'éclairer et me dire pourquoi cela ne fonctionne t-il pas?
Je sens que je ne suis pas loin....
Merci beaucoup
Ne comprenant pas pourquoi on utilise la méthode With, je ne souhaite pas la représenter dans mon programme. C'est pourquoi je souhaite continuer avec la base de code que je vous ai fourni.
J'ai donc fait quelques modifications en fonction de ce que vous m'aviez proposé tel que:
Dim q As Integer
Dim AdressText As String
Dim AdresseTexteChercher As String
q = 0
Cells.Find("Exemple").Select
ActiveCell.Range("a1").Offset(1, 0).Activate
ActiveCell.Select
AdresseTexte1 = ActiveCell.Address(0, 0)
TexteReference = UCase(Range(AdresseTexte1))
For i = 1 To 5
q = q + 1
Cells.Find("Opérations").Select
ActiveCell.Range("a1").Offset(q, 0).Activate
AdresseTexte2 = ActiveCell.Address(0, 0)
TexteChercher = UCase(Range(AdresseTexte2))
If InStr(1, TexteReference, TexteChercher) Then
Cells.Find ("Affectation")
ActiveCell.Range("a1").Offset(1, 0).Activate
Range("K3") = TexteChercher
Next i
End Sub
Mais me voilà encore bloquer, je ne comprends pas pourquoi la valeur de la variable "TexteChercher" ne s'inscrit pas dans la cellule K3!
Est ce que quelqu'un peut m'éclairer et me dire pourquoi cela ne fonctionne t-il pas?
Je sens que je ne suis pas loin....
Merci beaucoup
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je voulais vous dire un très grand merci car j'ai réussi avec succès à faire ce que je voulais avec le code suivant (pour les intéresser, donc sans le With):
Encore merci beaucoup pour votre aide :D
Bonne fin de journée à tous
Dim p As Integer
Dim q As Integer
Dim TexteReference As String
Dim TexteCherche As String
p = 0
q = 0
For j = 1 To 2
p = p + 1
Cells.Find("Exemple").Select
ActiveCell.Range("a1").Offset(p, 0).Activate
ActiveCell.Select
AdresseTexte1 = ActiveCell.Address(0, 0)
TexteReference = Range(AdresseTexte1)
For i = 1 To 5
'NombreDeLignesColonneOpérations
q = q + 1
Cells.Find("Opérations").Select
ActiveCell.Range("a1").Offset(q, 0).Activate
AdresseTexte2 = ActiveCell.Address(0, 0)
TexteChercher = Range(AdresseTexte2)
Cells.Find("Affectation").Select
ActiveCell.Range("a1").Offset(p, 0).Activate
Temps = InStr(1, TexteReference, TexteChercher, vbTextCompare)
If Temps <> 0 Then
ActiveCell.Value = TexteChercher
End If
Next i
q = 0
Next j
End Sub
Encore merci beaucoup pour votre aide :D
Bonne fin de journée à tous