Utilisation scripting dictionary [Résolu]

Signaler
-
 kilardj -
Bonjour la communauté,

Je ne suis pas informaticien, juste
une personne à la retraite qui pour remplir ces journées s'est mise au VBA (Bon niveau Excel mais connaissances très limitées du VBA).

je suis parvenu à adapter un code pour réaliser une Userform avec sélection en cascade en utilisant "scripting Dictionary". Par contre je sèche, pour réalisé une ventilation de données contenues dans 2 colonnes vers des feuilles déjà nommées dont une colonne contient les noms de ces feuilles (récupérer les données sans doublons).
exemple:
colA..............colB...............colC
ciseaux..........outil..............magasin
ciseaux..........outil..............stock
ciseaux..........outil..............commande

dans feuille("ciseaux")

reporter colA "outil" (sans doublon) et en ligne les valeurs contenues dans colonne C (transposé sans doublon)

colA.............colB...........colC..........colD
.................magasin........Stock.........commande
outil
Pour faire simple, pour le reste je pense pouvoir me débrouiller.
Autre chose nouveau comment faire pour joindre un fichier?

je vous remercie par avance.

27 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Excuse le retard (visite inattendue et boisson )

Ceci devrait faire ton affaire :
Option Explicit
Private Sub CommandButton1_Click()
  Dim derlig As Long, i As Integer, zone, feuilles, f As Worksheet, f_encours As String
  Dim oul As Long, ouc As Long
  feuilles = ""
  For Each f In Worksheets
    feuilles = feuilles & Chr(1) & Trim(LCase(f.Name))
  Next
  feuilles = LCase(feuilles & Chr(1))
  derlig = Range("B" & Rows.Count).End(xlUp).Row
  zone = Range("B2:D" & derlig)
  For i = 1 To UBound(zone)
   If InStr(feuilles, Chr(1) & Trim(LCase(zone(i, 1))) & Chr(1)) = 0 Then
     With ThisWorkbook.Worksheets.Add
       .Name = Trim(LCase(zone(i, 1)))
       feuilles = feuilles & Trim(LCase(zone(i, 1))) & Chr(1)
       DoEvents
     End With
   End If
   f_encours = Trim(LCase(zone(i, 1)))
   oul = 2
   ouc = 2
   If i = UBound(zone) - 1 Then Exit Sub
   Do While Trim(LCase(zone(i, 1))) = f_encours And i <= UBound(zone)
    If WorksheetFunction.CountIf(Worksheets(f_encours).Columns(1), zone(i, 3)) = 0 Then
       Worksheets(f_encours).Range("A" & oul).Value = zone(i, 3)
       oul = oul + 1
    End If
    If WorksheetFunction.CountIf(Worksheets(f_encours).Rows(1), zone(i, 2)) = 0 Then
       Worksheets(f_encours).Cells(1, ouc).Value = zone(i, 2)
       ouc = ouc + 1
    End If
    If i >= UBound(zone) Then Exit For
    If i <UBound(zone) - 1 Then i i + 1
   Loop
    i = i - 1
  Next
End Sub


J'ai mis ce code au click d'un bouton de commande, pour l'essayer. Mets-le où cela te convient.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Bonjour,
Autre chose nouveau comment faire pour joindre un fichier?

Ici, on ne joint pas de classeuir (que seuls les moins prudents ouvriraient, d'ailleurs !).
On montre, entre balises code (3ème icône en partant de la droite) le code indenté concerné.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Je crois par ailleurs deviner que tu n'aurais nul besoin d'utiliser un dictionnaire si :
- tu triais (tri hiérarchisé) avant traitement sur colonne A et colonne B
- il te suffirait ensuite de traiter en boucle sur colonne A. Tu saurais de cette manière quand le contenu de la cellule change.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Pardon : boucle sur colonne A pour choix de la feuille (ici ciseaux) et sur colonne B tant que "outil" ou autre ... à la suite


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
je vous remercie pour votre réactivité.
je n'ai peut-être pas bien exposé mon problème. En fait, j'ai un tableau sur feuille "BD" dans lequel je saisie des paramètres, en colonne "A" des données avec doublons (chacune des données est représentée par une feuille portant le nom d'une donnée de la colonne "A"), les colonne "B" et "C" colonne comportent aussi des doublons. je voudrai donc sur chaque feuille nommée faire un tableau à 2 dimensions qui en colonne (en "A2") comporte les données de la colonnes "B" de la feuille "BD" sans doublon et en ligne ("B1") les données de la colonne "C" de la feuille "BD"(transposée) sans doublon.

j'ai fait des essais avec filtre mais je n'arrive pas à virer les doublons.

je vous rappelle que je suis en apprentissage du VBA, mes connaissances sont limitées. Puis avoir un bout de code à adapter.

Je vous remercie pour votre aide.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
J'ai des difficultés à cerner avec précision ce qui est appelé "doublon", dans cette affaire.
le mieux sera alors peut-être de déposer sur un site de dépôt de ton choix : non ton classeur, mais :
- une image de la feuille à traiter, avec des "doublons"
- une image du résultat souhaité
Par "image", j'entends "copie d'écran"

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Je vous remercie pour votre célérité.

voici 2 images, j'espère que vous cernerez beaucoup mieux mes attentes.

http://dl.free.fr/qG9WnwuTW.

http://dl.free.fr/fEOLozAfA
je pense que j'ai fait une erreur de manipulation lors du collage des URL des images, je fais une autre tentative. mes excuses je n'ai pas tellement l'habitude.

http://dl.free.fr/fEOLozAfA

http://dl.free.fr/qG9WnwuTW

Voilà, j'espère que c'est bon
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Bien.
Si j'ai bien compris, tu ne veux que ce que tu as mis en jaune dans les feuilles de résultat, avec une feuille de résultat pour chaque groupe de la colonne B
Veux-tu bien commencer par trier (tri hiérarchisé) par colonne B, puis D puis C
L'enregistreur de macros t'aidera à connaître ce code de tri hiérarchisé.
Dis-moi quand fait.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
je vous remercie mais ce n'est pas exactement ce que je cherche à faire (tri hiérarchisé), mais si ton idée est bonne pour parvenir au résultat escompté je suis preneur.
j'ai fait le filtrage hiérarchisé et pour la suite que dois-je faire pour récupérer les données de la colonne "D" sans doublon?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
mais si ton idée est bonne pour parvenir au résultat escompté je suis preneur

Elle a pour finalité d'agiliser de manière très significative le traitement qui va suivre.
On peut s'en passer, mais au pris d'une lenteur à éviter.
Quand ce tri aura été fait : dépose, comme tu l'as fait, un fichier Excel avec tes seules données (sans aucune macro). Je l'ouvrirai sur une autre machine et il me servira de base de travail.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Désolé mais j'ai omis de vider le fichier des macros

je le remets en ligne sans aucune macro

[fichier sans macro http://dl.free.fr/idE2jamcW]

merci pour l'aide
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
=>>>
404 - File or directory not found.
The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.

Mauvais lien .


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
j'ai réuploadé le fichier, j'espère que le lien sera bon.

http://dl.free.fr/iwoJ4BaSQ

Merci.
ci-joint sous format excel 2003

http://dl.free.fr/j4gEKBQBo

il est possible que les fichiers prenant en charge les macros(xlsm)ne sont pas acceptés sur le serveur.

Merci.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Je l'ai, maintenant.
Je m'y "mettrai" après le dîner.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Je vous remercie et travaille de mon côté.

J'avais reçu à adapter un code dans une userform pour des sélections en cascade (en utilisant des combobox, listbox et textbox). j'avais bien compris le truc (du fameux "Scripting.Dictionary"), il permet de récupérer une liste d'une colonne sans doublons. Par contre, je n'ai pas encore saisi son utilisation dans des feuilles excel.

merci et bonne soirée.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Bon,
je viens de commencer à y travailler :
1ère constatation, alors que je cherche à faire mieux (créer la feuille nécessaire de destination si n'existe pas encore) ===>>> J'avais un plantage inattendu ! après analyse : en colonne B, les "groupes" (Gros, Olé, etc ...) n'ont pas toujours exactement les mêmes caractères pour un même groupe ...). J'ajoute donc une "verrue", mais il vaudrait mieux, de ton côté, ne pas laisser l'utilisateur y saisir manuellement le groupe. Une liste de validation vaudrait mieux.
Je continue dans un moment ...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Ah oui, pardon :
Te crée les feuilles nécessaires, si n'existent pas.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.