Excel vba recherche
Résolu
amine69500
Messages postés
471
Statut
Membre
-
Mytå Messages postés 4246 Date d'inscription Statut Contributeur Dernière intervention -
Mytå Messages postés 4246 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
voila j'ai une chaine de caractere et je souhaiterais créer une fonction qui me permet de recuperer quelques données
voila ma chaine de caractere
[test,"id":"12345","name":"données1","lead","name":"xxxx",test,"id":"12345","name":"données2","lead","name":"yyyy",test,"id":"12345","name":"données3","lead","name":"zzzzz"]
mon but est de recuperer ce qu'il se trouve entre lead et name donc donnée1,données2,donnée3.
et construire un tableau dans lequel je trouve :
donnée1
donnée2
donnée3
merci de votre aide
Cordialement
voila j'ai une chaine de caractere et je souhaiterais créer une fonction qui me permet de recuperer quelques données
voila ma chaine de caractere
[test,"id":"12345","name":"données1","lead","name":"xxxx",test,"id":"12345","name":"données2","lead","name":"yyyy",test,"id":"12345","name":"données3","lead","name":"zzzzz"]
mon but est de recuperer ce qu'il se trouve entre lead et name donc donnée1,données2,donnée3.
et construire un tableau dans lequel je trouve :
donnée1
donnée2
donnée3
merci de votre aide
Cordialement
13 réponses
-
Salut le forum
A testerOption Explicit Sub Extraire() Dim i As Byte, Lig As Byte Dim Chaine As Variant Chaine = Split(Replace([A1], """", ""), "name:") Lig = 2 For i = 0 To UBound(Chaine) If InStr(Chaine(i), "lead") Then Cells(Lig, 1) = Split(Chaine(i), ",")(0) Lig = Lig + 1 End If Next i End Sub
Mytå
-
Trop trop fort ou forte ca marche super meme sur ma chaine de caractere direct sans rien changer au code, trop trop fort ou forte
merci mille fois a tous ce qui m'ont aidé
merci encore
Cordialement
Myta, tu peut m'expliquer un peu ton code? STP merci-
Re le forum
Sub Extraire() Dim i As Byte, Lig As Byte Dim Chaine As Variant Chaine = Split(Replace([A1], """", ""), "name:") Lig = 2 If UBound(Chaine) = -1 Then Exit Sub For i = 0 To UBound(Chaine) If InStr(Chaine(i), "lead") Then Cells(Lig, 1) = Split(Chaine(i), ",")(0) Lig = Lig + 1 End If Next i End Sub
Suppression des guillemets et découpage de la Chaine avec l'expression name:Chaine = Split(Replace([A1], """", ""), "name:")
Si le Tableau (Chaine) est vide on quitte la procédureIf UBound(Chaine) = -1 Then Exit Sub
On boucle sur le Tableau (Chaine) à la recherche de l'expression lead
Si l'expression est trouvé on écrit le premier élément du découpage avec la virguleFor i = 0 To UBound(Chaine) If InStr(Chaine(i), "lead") Then Cells(Lig, 1) = Split(Chaine(i), ",")(0) Lig = Lig + 1 End If Next i
Mytå -
-
-
-
Salut,
C'est pas exactement le même souci que dans ce sujet ?
La même solution fonctionne avec le même problème...
-
Bonjour et merci de votre aide
non c'est pas excatement ca, ce que je cherche la, c'est un code qui me permet d'extraire une chaine de caratere entre deux chaine de caractere, ici c'est donnée1 qui est entre lead et name.
merci de votre aide
Cordialement -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
-
Bonjour,
Un exemple en VBA (donnees1, etc ne sont peut-etre pas de longueurs fixes)
Sub rechchaine() '123456789012345678901234567890123456789 '[test,"id":"12345","name":"données1","lead","name":"xxxx",test,"id":"12345","name":"données2","lead","name":"yyyy",test,"id":"12345","name":"données3","lead","name":"zzzzz"] Entete = "5" & Chr(34) & "," & Chr(34) & "name" Suffix = "lead" chaine = Worksheets("feuil2").Range("A1") y = InStr(1, chaine, Entete) + 11 x = InStr(1, chaine, Suffix) - 3 D1 = Mid(chaine, y, x - y) y = InStr(x + 6, chaine, Entete) + 11 a = InStr(x + 6, chaine, Suffix) - 3 D2 = Mid(chaine, y, a - y) y = InStr(a + 6, chaine, Entete) + 11 b = InStr(a + 6, chaine, Suffix) - 3 D3 = Mid(chaine, y, b - y) End Sub
L'exemple de Morgothal peut etre modifie de meme, si le coeur lui en dit
Bonne suite -
Bonjour et merci de ton aide
je vais essai et l'adapter a mon cas
merci
cordialement -
Cette macro fonctionne également :
Sub recherchedechaine() Dim colonne As Integer Dim D1, tabl(3) As String Range("A1").Select Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _ :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _ Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _ ), Array(14, 1), Array(15, 1)), TrailingMinusNumbers:=True D1 = "" i = 1 For colonne = 1 To 15 If Left(Cells(1, colonne), 4) = "name" And Cells(1, colonne + 1) = "lead" Then tabl(i) = Mid(Cells(1, colonne).Value, 7, Len(Cells(1, colonne).Value) - 7) i = i + 1 End If Next For i = 1 To 3 Cells(i + 2, 1) = tabl(i) Next End Sub
-
-
Re,
Code modifie, en effet "12345" doit etre un nombre sur 5 caracteres.
Sub rechchaine() '123456789012345678901234567890123456789 '[test,"id":"12345","name":"données1","lead","name":"xxxx",test,"id":"12345","name":"données2","lead","name":"yyyy",test,"id":"12345","name":"données3","lead","name":"zzzzz"] test = "test" Entete = "name" Suffix = "lead" 'Chaine en Feuil2 A1 pour exemple chaine = Worksheets("feuil2").Range("A1") 'recherche pour D1 y = InStr(1, chaine, Entete) + 7 x = InStr(1, chaine, Suffix) - 3 D1 = Mid(chaine, y, x - y) 'recherche test poour D2 a = InStr(x, chaine, test) y = InStr(a, chaine, Entete) + 7 x = InStr(a, chaine, Suffix) - 3 D2 = Mid(chaine, y, x - y) 'recherche test poour D3 a = InStr(x, chaine, test) y = InStr(a, chaine, Entete) + 7 x = InStr(a, chaine, Suffix) - 3 D3 = Mid(chaine, y, x - y) End Sub -
Super merci a tous,
j'ai essayé vos solutions ca marche super mais avec une chaine de caractere fixe alors ma chaine de caractere peut varier exemple : aujourdhui elle la 3000 caractere demain elle aura 3500 caractere et ainsi de suite.
merci de m'aider si vous pouvez
merci encore de votre aide
Cordialement -
Bonjour a vous tous
Question:
Votre chaine de caracteres provient de quoi? un fichier ou...?
Merci -
c'est un GET en web service qui me permet de recuperer cette chaine de caractere
cordialement