[VBA Ragexp] Récupérer le contenu avant et après un Pattern
Résolu
lml-mike
Messages postés
487
Statut
Contributeur
-
pijaku Messages postés 13513 Statut Modérateur -
pijaku Messages postés 13513 Statut Modérateur -
Bonjour,
J'ai une cellule dans lequel est contenu :
Je souhaite faire un ragexp pour récupérer chacune des lignes dans une variable incrémentable. Le problème, c'est que je ne sais récupérer que le caractère rencontré qui les sépare, en l'occurence le retour à la ligne. Comment dois-je m'y prendre pour récupérer chaque commentaire séparement ?
Voici mon bout de code :
Mille mercis !
J'ai une cellule dans lequel est contenu :
> Commentaire 1
> Commentaire 2
> Commentaire 3
Je souhaite faire un ragexp pour récupérer chacune des lignes dans une variable incrémentable. Le problème, c'est que je ne sais récupérer que le caractère rencontré qui les sépare, en l'occurence le retour à la ligne. Comment dois-je m'y prendre pour récupérer chaque commentaire séparement ?
Voici mon bout de code :
Dim myRegExp As RegExp
Dim myMatches As MatchCollection
Dim myMatch As Match
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "\n"
Set myMatches = myRegExp.Execute(Cells(3, 4))
If myMatches = 0
Commentaire = Cells(3, 4))
Else
For Each myMatch In myMatches
' Commentaire n = contenu avant le 1er retour à la ligne
' Commentaire n+1 = contenu après chaque retour à la ligne
Next
Mille mercis !
A voir également:
- [VBA Ragexp] Récupérer le contenu avant et après un Pattern
- Comment recuperer un message supprimé sur whatsapp - Guide
- Comment récupérer un document dans le presse-papier samsung - Guide
- Comment récupérer un compte facebook piraté - Guide
- Récupérer mon compte facebook désactivé - Guide
- Comment recuperer une video sur youtube - Guide
3 réponses
Merci pour ta réponse !
J'ai remplacé Response.write par une msgbox parce qu'elle provoquait une erreur.
Le split ne détecte pas le \n, i renvoie donc 0 et la cellule entière est affichée.
Ai-je omis un détail ?
J'ai remplacé Response.write par une msgbox parce qu'elle provoquait une erreur.
Le split ne détecte pas le \n, i renvoie donc 0 et la cellule entière est affichée.
Ai-je omis un détail ?
Je n'utiliserais pas d'expression régulière pour ce genre de travail, le SPLIT semble mieux indiqué. La fonction SPLIT permet de séparer une chaîne de caractères selon un délimiteur. Chaque expression séparée par un séparateur sera placée dans un tableau.
Voici un exemple d'utilisation:
Bonne chance!
Voici un exemple d'utilisation:
Dim arrCommentaires
Dim strValeur
strValeur = "> Commentaire 1\n> Commentaire 2\n> Commentaire 3"
arrCommentaires = Split(strValeur, "\n")
Dim i
For i = 0 to Ubound(arrCommentaires)
Response.Write i & " = " & arrCommentaires(i) & "<BR>"
Next
Bonne chance!
Je me suis permis de garder Ragexp pour en profiter en supprimant les "> " dans les commentaires afin de mieux présenter les commentaires.
Le contenu de la cellule peut être :
ou
Mon code est le suivant :
Maintenant, il me manque à foutre toutes les occurences myMatch dans une variable incrémentale...
J'aimerais le faire via un tableau, mais même étant dynamique, je ne peut pas déclarer la taille du tableau à l'avance. Je ne peux même pas utiliser mymatches.count, vu qu'il est 3x supérieur au nombre de commentaires...
Une idée sur comment je peux assigner chaque mymatch à commentaire_n, n étant incrémental ?
Le contenu de la cellule peut être :
Commentaire 1
ou
> Commentaire 2
> Commentaire 3
> Commentaire 4
> Commentaire n (le nombre est variable)
Mon code est le suivant :
Private Sub CommandButton1_Click()
Dim myRegExp As RegExp
Dim myMatches As MatchCollection
Dim myMatch As Match
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "(> )|(.*)"
Set myMatches = myRegExp.Execute(Cells(3, 4))
For Each myMatch In myMatches
If myMatch <> "> " And myMatch <> "" Then
MsgBox myMatch
End If
Next
End Sub
Maintenant, il me manque à foutre toutes les occurences myMatch dans une variable incrémentale...
J'aimerais le faire via un tableau, mais même étant dynamique, je ne peut pas déclarer la taille du tableau à l'avance. Je ne peux même pas utiliser mymatches.count, vu qu'il est 3x supérieur au nombre de commentaires...
Une idée sur comment je peux assigner chaque mymatch à commentaire_n, n étant incrémental ?
Oui, une idée : revoir le cours sur les variables tableaux ;-)
Il te faut redimensionner ta variable tableau à chaque occurence valide. Pour cela, il convient d'utiliser ReDim et Preserve.
Comme ceci :
Un petit rappel sur les variables tableaux, pour quand tu auras un peu de temps...
Il te faut redimensionner ta variable tableau à chaque occurence valide. Pour cela, il convient d'utiliser ReDim et Preserve.
Comme ceci :
Dim myRegExp As RegExp
Dim myMatches As MatchCollection
Dim myMatch As Match
Dim monTab() As String
Dim indTab As Integer
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "(> )|(.*)"
Set myMatches = myRegExp.Execute(Cells(3, 4))
For Each myMatch In myMatches
If myMatch <> "> " And myMatch <> "" Then
ReDim Preserve monTab(indTab) 'redimensionnement de la variable tableau
monTab(indTab) = myMatch 'stockage de sa valeur en mémoire
indTab = indTab + 1 'incrémentation de l'indice de la variable tableau
End If
Next
'boucle sur la variable tableau
For indTab = 0 To UBound(monTab)
Debug.Print monTab(indTab)
Next
Un petit rappel sur les variables tableaux, pour quand tu auras un peu de temps...
J'avais utilisé ce même tableau comme référence pour la création de mon tableau dynamique, mais je n'avais pas eu la logique de penser que je pouvais incrémenter simplement via un ++ au lieu d'un "For"... Comme quoi je suis vraiment rouillé !
Je vais pouvoir finir mon code grâce à ça ! Merci beaucoup pour l'aide et les références qui sont maintenant bookmarkées ^_^
Excellente journée !
Je vais pouvoir finir mon code grâce à ça ! Merci beaucoup pour l'aide et les références qui sont maintenant bookmarkées ^_^
Excellente journée !
Regarde ce tutoriel de Caféine.
Et plus particulièrement le chapitre sur les méthodes.
Reviens en cas de besoin, mais tu connais la maison...
Cependant je n'ai pas encore la logique sur le choix des symboles...
Je vais potasser dessus, merci !
Je cherche un moyen d'exclure les retour à la ligne via le tuto.
Je sens que je vais finir avec une camisole xD
Ben oui...
Alors pourquoi ne pas utiliser Split...
Comme ceci :