Recherche d'un mot dans une chaîne de caractères
Résolu/Fermé
A voir également:
- Rechercher un mot dans une chaîne de caractère python
- Rechercher ou entrer l'adresse - Guide
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Voir mot de passe wifi android - Guide
2 réponses
Bonjour,
On ne peut pas comparer des chaines avec des caractères joker *?
Dans ton cas une solution serait de coder des fonctions spécialisées.
Par exemple, voici une fonction qui cherche un mot de 12 caractères commençant par "UP-" et de terminant par "-" suivi d'un chiffre
En voici une autre qui cherche un mot de 7 caractères commençant par "UP-"
Il faut placer ces fonctions dans un module
Voici une procédure test qui montre comment appeler ces fonctions
On ne peut pas comparer des chaines avec des caractères joker *?
Dans ton cas une solution serait de coder des fonctions spécialisées.
Par exemple, voici une fonction qui cherche un mot de 12 caractères commençant par "UP-" et de terminant par "-" suivi d'un chiffre
Function cherche_UP(ligneTXT As String) As String
Dim pos As Integer
Dim mot As String
pos = InStr(ligneTXT, "UP-")
cherche_UP = ""
If pos > 0 Then
mot = Mid(ligneTXT, pos, 12)
If Mid(mot, 11, 1) = "-" _
And Asc(Mid(mot, 12, 1)) >= Asc("0") _
And Asc(Mid(mot, 12, 1)) <= Asc("9") Then
cherche_UP = mot
End If
End If
End Function
En voici une autre qui cherche un mot de 7 caractères commençant par "UP-"
Function cherche_UP(ligneTXT As String) As String
Dim pos As Integer
Dim mot As String
pos = InStr(ligneTXT, "UP-")
cherche_UP = ""
If pos > 0 Then
mot = Mid(ligneTXT, pos, 12)
If Mid(mot, 11, 1) = "-" _
And Asc(Mid(mot, 12, 1)) >= Asc("0") _
And Asc(Mid(mot, 12, 1)) <= Asc("9") Then
cherche_UP = mot
End If
End If
End Function
Il faut placer ces fonctions dans un module
Voici une procédure test qui montre comment appeler ces fonctions
Sub test()
Dim ligneTEXTE As String 'texte à scanner
Dim RES As String 'resultat
'appel fonction cherche_UP
ligneTEXTE = "blabla UP-xxxxxxx-3 blablabla"
RES = cherche_UP(ligneTEXTE)
If RES <> "" Then
MsgBox "test UP- trouvé -> " & RES
Else
MsgBox "test UP- pas trouvé"
End If
'appel fonction cherche_UT
ligneTEXTE = "blabla UT-xxxxxxx-3 blablabla"
RES = cherche_UT(ligneTEXTE)
If RES <> "" Then
MsgBox "test UT- trouvé -> " & RES
Else
MsgBox "test UT- pas trouvé"
End If
End Sub
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
22 déc. 2015 à 09:41
22 déc. 2015 à 09:41
Bonjour,
A quel moment ces deux variables prennent une valeur:
A quel moment ces deux variables prennent une valeur:
Dim Nom As String * 12 Dim PNom As String * 7
Bonjour,
Et merci pour votre réponse.
Apres quelques remarques j'ai modifié mon code.
Cependant lorsque je donne une valeur à Nom il n'accepte pas ceci : "UP-" & "*" & "-?"
Je dois donc lui attribuer une valeur en dur alors que Nom n'a pas toujours la même valeur.
Idem pour PNom.
Aussi, la position de la sous chaîne n'est jamais la même, et là aussi j'ai du lui attribuer une position en dur.
Mon code ne fonctionne donc que pour recherche UNE unique valeur dans UNE unique cellule, ce qui n'est pas du tout ce que je veux faire mais je n'arrive pas à faire autrement.
Je vous joins mon code :
Merci par avance pour votre aide.
Et merci pour votre réponse.
Apres quelques remarques j'ai modifié mon code.
Cependant lorsque je donne une valeur à Nom il n'accepte pas ceci : "UP-" & "*" & "-?"
Je dois donc lui attribuer une valeur en dur alors que Nom n'a pas toujours la même valeur.
Idem pour PNom.
Aussi, la position de la sous chaîne n'est jamais la même, et là aussi j'ai du lui attribuer une position en dur.
Mon code ne fonctionne donc que pour recherche UNE unique valeur dans UNE unique cellule, ce qui n'est pas du tout ce que je veux faire mais je n'arrive pas à faire autrement.
Je vous joins mon code :
Sub Cherche()
Dim PlageDeRecherche As Range
Dim Nom As String * 12
Dim PNom As String * 7
Dim i As Integer
Dim j As Integer
j = 1
'For i = 1 To 2000
i = 1954
Nom = "UP-M-03454-1"
PNom = "UT-" & "????"
Do While Cells(i, 5).Value <> ""
Set PlageDeRecherche = Sheets("Feuil1").Cells(i, 5)
If InStr(PlageDeRecherche, Nom) = 14 Then
' MsgBox "trouvé"
Sheets("Feuil2").Cells(j, 1).Value = Nom
GoTo fin
Else
GoTo Suite
End If
Suite:
If InStr(PlageDeRecherche, PNom) = 1 Then
MsgBox "IP trouvé"
Sheets("Feuil2").Cells(j, 2).Value = PNom
Else
MsgBox " Aucun UT ou UP trouvé"
i = i + 1
End If
fin:
j = j + 1
Loop
'Next i
End Sub
Merci par avance pour votre aide.
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
>
Siamens_duj
22 déc. 2015 à 14:08
22 déc. 2015 à 14:08
Re,
Pouvez-vous mettre un fichier avec des donnees significatives et une explication claire de ce que voue voulez obtenir pour que nous puissions comprendre ?????
Pouvez-vous mettre un fichier avec des donnees significatives et une explication claire de ce que voue voulez obtenir pour que nous puissions comprendre ?????
Siamens_duj
>
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
Modifié par Siamens_duj le 22/12/2015 à 16:00
Modifié par Siamens_duj le 22/12/2015 à 16:00
Je dispose d'un classeur Excel composé d'une "feuil1" qui comporte des données en ligne dont les données qui m'intéressent en colonne E.
Par exemple =
A1 = La petite
B1 = Fille de ce
C1 = Monsieur aime
D1 = Aimer les
E1 = Poneys de numéro "UP-M-03434-1"
Les données dans les autres cellules ne m'intéressent pas car elles peuvent être les même que dans d'autres cellules.
Par contre, le numéro qui m'intéresse en "E" n'est pas toujours à la même position et la longueur de la chaîne n'est pas toujours la même.
Le numéro n'est jamais le même dans d'autre cellule mais commence toujours par "UP-" fini par "- un chiffre" et comporte en tout 12 caractères ou commence par "UT-" suivi de 4 caractères.
J'espère avoir été un peu plus claire, j'avoue avoir un peu de mal à expliquer.
Je vous remercie tout de même pour votre aide.
Par exemple =
A1 = La petite
B1 = Fille de ce
C1 = Monsieur aime
D1 = Aimer les
E1 = Poneys de numéro "UP-M-03434-1"
Les données dans les autres cellules ne m'intéressent pas car elles peuvent être les même que dans d'autres cellules.
Par contre, le numéro qui m'intéresse en "E" n'est pas toujours à la même position et la longueur de la chaîne n'est pas toujours la même.
Le numéro n'est jamais le même dans d'autre cellule mais commence toujours par "UP-" fini par "- un chiffre" et comporte en tout 12 caractères ou commence par "UT-" suivi de 4 caractères.
J'espère avoir été un peu plus claire, j'avoue avoir un peu de mal à expliquer.
Je vous remercie tout de même pour votre aide.
22 déc. 2015 à 15:40
Cependant cela ne fonctionne pas, j'ai "test UT- pas trouvé" et "test UP- pas trouvé" à tout les coup ...
22 déc. 2015 à 15:43
A+
22 déc. 2015 à 16:05
Et dans "Thisworkbook"
22 déc. 2015 à 16:36
'appel fonction cherche_UP
ligneTEXTE = "blabla UP-xxxxxxx-x blablabla"
Il faut tester avec un chiffre à la 12è position
'appel fonction cherche_UP
ligneTEXTE = "blabla UP-xxxxxxx-5 blablabla"
puisque le 12ème caractère doit etre un chiffre
pour ma part j'ai fait un faux copié collé pour la fonction cherche_UT
voici la bonne
Modifié par Siamens_duj le 23/12/2015 à 09:27
Votre code fonctionne, j'ai cependant retiré le chiffre en dernière position car on sait que le code UP doit faire 12 caractères et j'ai fais en sorte qu'il me copie le résultat dans la feuil2.
Aussi, j'aimerais parcourir toutes les cellules de ma feuil1 et copier le résultat qu'il trouve en feuil2 colonne A pour les UP et en colonne B pour les UT.
J'ai fais un code mais il ne me copie que ce qu'il trouve dans la cellule E de la première ligne.
Comment puis-je faire ?