Gestion de chaine de caratère sous VBA

Résolu
hoquei44 Messages postés 16031 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 23 avril 2024 - Modifié le 3 juin 2019 à 20:07
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 6 juin 2019 à 10:50
Bonjour,

Je suis sur un projet de récupération de données sportives venant d'un site pour les transférer sur Wikipedia.
Je télécharge la page web du site dans mon fichier Excel, et je lance une macro pour manipuler les données. Et, au final, j'obtiens un résultat que je n'ai plus qu'à coller dans Wikipédia.
Le résultat est déjà satisfaisant cependant, j'aurais souhaité améliorer certains détails.

Actuellement, je parviens à réaliser une ligne avec l'ensemble des joueurs qui ont marqué un but pour une équipe. Un but génère l'incrémentation du buteur à la suite des autres.
Ex. :
|buts 1=JoueurA<br>JoueurB<br>JoueurC<br>JoueurC<br>JoueurA<br>JoueurD<br>JoueurC

Je voudrais retraiter cette ligne dans l'objectif que le nom d'un même joueur n'apparaisse qu'une seule fois et que le nombre de but inscrit soit indiqué entre parenthèse à côté.
Ex. :
|buts 1=JoueurA (2)<br>JoueurB <br>JoueurC (3) <br>JoueurD

Comment procéder ?

Merci d'avance,

Bonne journée

1 réponse

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 21
Modifié le 3 juin 2019 à 22:37
Bonjour,

Exemple de traitement de la ligne :
Option Explicit
Sub test()
'
Dim d As Object
Dim b As String
Dim s As String
Dim t As Variant
Dim i As Integer
Dim k As Variant

  b = "|buts 1=JoueurA<br>JoueurB<br>JoueurC<br>JoueurC<br>JoueurA<br>JoueurD<br>JoueurC "
  ' Partie utile de la chaine
  s = Mid(b, InStr(1, b, "=") + 1, Len(b))
  ' Tableau des joueurs
  t = Split(s, "<br>")
  ' Comptage des joueurs
  Set d = CreateObject("Scripting.Dictionary")
  For i = LBound(t) To UBound(t)
    d(t(i)) = d(t(i)) + 1
  Next i
  ' Reconstitution de la chaine
  s = Mid(b, 1, InStr(1, b, "="))
  For Each k In d.Keys
    s = s & k & "(" & d(k) & ")<br>"
  Next k
  s = Left(s, Len(s) - 4)
  MsgBox b & vbCrLf & s
  
End Sub


0
hoquei44 Messages postés 16031 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 23 avril 2024
3 juin 2019 à 22:53
Merci du retour, le résultat répond parfaitement à mes attentes.

Charge à moi de prendre du temps pour bien tout comprendre.

Merci et bonne soirée
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 21
6 juin 2019 à 10:50
Tu trouvera des explications concernant les dictionnaires (et bien d'autres) sur l'excellent site de Jacques Boisgontier :
http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm
0
Rejoignez-nous