Gestion de chaine de caratère sous VBA [Résolu]

Signaler
Messages postés
11127
Date d'inscription
dimanche 19 janvier 2014
Statut
Membre
Dernière intervention
23 février 2020
-
Patrice33740
Messages postés
7959
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
22 février 2020
-
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

Messages postés
7959
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
22 février 2020
16
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


Cordialement
Patrice
hoquei44
Messages postés
11127
Date d'inscription
dimanche 19 janvier 2014
Statut
Membre
Dernière intervention
23 février 2020

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
Patrice33740
Messages postés
7959
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
22 février 2020
16
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