Scripting Dictionary (même item sur différentes keys)

Résolu/Fermé
Identifiant_Anonyme Messages postés 12 Date d'inscription vendredi 9 mai 2014 Statut Membre Dernière intervention 20 juin 2014 - 19 juin 2014 à 16:55
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 20 juin 2014 à 10:15
Bonjour à tous,

Je travaille sur un fichier assez mal fichu et énooorme, que je ne peux absolument pas modifié (il y a beaucoup de cellules vides, le même pays revient parfois plus loin...) et je dois faire avec). :-((

Bref, j'ai créé un scripting.dictionary adapté à ce fichier pour recenser des villes par pays.
Je crois que ça fonctionne, sauf qu'il y a des villes qui existent dans plusieurs pays, et là mon dictionnaire bloque.

Un des buts du fichier sera de mettre en évidence ces villes qui se trouvent dans plusieurs pays (j'ai mis en rouge les commentaires), mais pour l'instant, ma question est simplement : Mais où est l'erreur qui m'empêche de terminer mon dictionnaire ??

Quelqu'un saurait-il m'aider ?
Je joins un modèle réduit de ce fameux fichier.

Merci beaucoup.


https://www.cjoint.com/?3Ftq0B1dlrw

2 réponses

Identifiant_Anonyme Messages postés 12 Date d'inscription vendredi 9 mai 2014 Statut Membre Dernière intervention 20 juin 2014 1
20 juin 2014 à 08:56
Bonjour,

Je ne m'attendais pas à une réponse si rapide... Merci.

Mon codage ne devait pas être très bon (pusique tu l'as modifié), je vais donc essayer de comprendre les éléments qui me sont inconnus (Redim et UBound, au moins), et ensuite j'essayerais de continuer.

Merci beaucoup, déjà, c'est très aimable.
Je place en Résolu et reviendrai éventuellement si je bloque encore.

I:I
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
20 juin 2014 à 10:15
Bonjour

Je ne m'attendais pas à une réponse si rapide... Merci.

Le problème m'avait branché ;o)

pour des explications sur Ubound et Redim voir ce tuto très complet
https://silkyroad.developpez.com/vba/tableaux/
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 19/06/2014 à 22:21
Bonjour,

une alternative:
Ci joint proposition donnant les pays par villes ( les clés du dico sont les villes)
https://www.cjoint.com/?3FtwpBgsD7L
Attention à la casse dans "dans le pays ....."

la macro (on devrait peut-^tre aller + vite mais...)
Option Explicit
Option Base 1

Sub lister_Pays_par_ville()
Dim Nbre As Integer
Dim T_pays, Cptr_a As Integer, Lig As Long
Dim D_ville As Object, Cptr_b As Integer, Ville As String

'initialisations
Application.ScreenUpdating = False
Range("G2:H1000").Clear
Set D_ville = CreateObject("scripting.dictionary")
Nbre = Application.CountIf(Columns("A"), "*dans le pays*")
ReDim T_pays(Nbre, 3)
Lig = Rows.Count

For Cptr_a = 1 To Nbre
'limites par pays
Lig = Columns("A").Find("dans le pays", Cells(Lig, "A")).Row
T_pays(Cptr_a, 1) = Lig
If Cptr_a = UBound(T_pays) Then
T_pays(Cptr_a, 2) = Columns("A").Find("*", , , , , xlPrevious).Row
Else
T_pays(Cptr_a, 2) = Columns("A").Find("dans le pays", Cells(Lig, "A")).Row
End If
'nom pays 'SENSIBLE A LA CASSE
T_pays(Cptr_a, 3) = Application.Substitute(Cells(Lig, "A"), "dans le pays ", "")

'affectations au dictionary
For Cptr_b = T_pays(Cptr_a, 1) To T_pays(Cptr_a, 2)
Ville = Cells(Cptr_b, "B")
If Ville <> "" Then
If Not D_ville.exists(Ville) Then
D_ville.Add Ville, T_pays(Cptr_a, 3) & " "
Else
D_ville.Item(Ville) = D_ville.Item(Ville) & T_pays(Cptr_a, 3) & " "
'test = D_ville.Item(Ville)
End If
End If
Next
Next
'restitution pays par ville
Range("G2").Resize(D_ville.Count, 1) = Application.Transpose(D_ville.Keys)
Range("H2").Resize(D_ville.Count, 1) = Application.Transpose(D_ville.items)
End Sub

--
Michel
0