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

Messages postés
10670
Date d'inscription
dimanche 19 janvier 2014
Statut
Membre
Dernière intervention
16 octobre 2019
-
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
Afficher la suite 

1 réponse

Messages postés
7828
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
11 octobre 2019
16
0
Merci
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
10670
Date d'inscription
dimanche 19 janvier 2014
Statut
Membre
Dernière intervention
16 octobre 2019
-
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
7828
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
11 octobre 2019
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
Commenter la réponse de Patrice33740