IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Scripting.Dictionary Question et probléme incrémentation Item [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 37
    Par défaut Scripting.Dictionary Question et probléme incrémentation Item
    Bonjour,

    Dans mon programme je dois incrémenter un nombre en le stockant en fonction d'une date et d'une région, j'ai donc utilisé la structure de données Dictionnary qui répondait parfaitement à mon problème. A propos de son utilisation j'ai deux questions :

    Peut-on ajouter seulement des clés et non des couples clé-valeur ? Pour l'instant je triche en le remplissant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim dicReg As Scripting.Dictionary
    Set dicReg = New Scripting.Dictionary
        For i = 0 To UBound(tabJour)
            For k = 0 To UBound(tabRegion)
                With dicReg
                    .Add tabJour(i) & tabRegion(k), -1
                End With
            Next k
        Next i
    Enfin, peut-on récupérer la valeur actuel d'un item avec sa clé, lui ajouter un nombre, puis le stocker à nouveau dans le dictionnaire ? Pour m'expliquer voici un bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     With dicReg.Item(tabJour(jour) & tabRegion(k)) = dicReg.Item(tabJour(jour) & tabRegion(k)) + Round(wbModif.Sheets("Prev_Agents").Cells(ligneMOB, 7) - (wbModif.Sheets("Prev_Agents").Cells(ligneMOB, 7) * percentage), "0")
    End With
    Dans ce dernier bout de code, il faut savoir que cet instruction est à l'intérieur de deux boucles, donc les valeurs de tabJour et tabRegion change au fur de l'incrementation ainsi que la valeurs de ligneMOB

    C'est un peu compliqué et fastidieux.
    Merci d'avance,
    Solown

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    je crois comprendre que tu confond item/cle
    quand tu fait
    tu ne peut pas faire
    en fait ca ajoute un item a ton dico ce n'est donc plus le meme item
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Invité
    Invité(e)
    Par défaut Re de R
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Public dicReg As Object  '  Scripting.Dictionary
    Property Get Assigner(v As String) As Variant
    If TypeName(dicReg) = "Nothing" Then Set dicReg = CreateObject("Scripting.Dictionary")
    Assigner = dicReg(v)
    End Property
    Property Let Assigner(v As String, Value As Variant)
    If TypeName(dicReg) = "Nothing" Then Set dicReg = CreateObject("Scripting.Dictionary")
    dicReg(v) = Value
    End Property
     
     
    Sub test()
    Set dicReg = Nothing
    For i = 1 To 10
      Assigner(Date) = Assigner(Date) + 1
    Next
     Debug.Print Assigner(Date)
    End Sub
    Dernière modification par Invité ; 21/02/2018 à 14h03.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 37
    Par défaut
    Salut et merci pour vos réponses.

    Dysorthographie, peut-tu m'expliquer ton code ?

    Petite clarification, en faite mon problème vient surtout du fait que sur cette instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    With dicReg.Item(tabJour(jour) & tabRegion(k)) = dicReg.Item(tabJour(jour) & tabRegion(k)) + Round(wbModif.Sheets("Prev_Agents").Cells(ligneMOB, 7) - (wbModif.Sheets("Prev_Agents").Cells(ligneMOB, 7) * percentage), "0")
    End With
    La valeur n'est pas à mise à jour à chaque itération des boucles, c'est à dire que quand je fais dicReg.Item( tabJour(jour) & tabRegion(k)) cette valeur est à -1 et reste à -1 alors que cette instruction devrait changer la valeur de l'item associé à cette clé à chaque itération de la boucle.

  5. #5
    Invité
    Invité(e)
    Par défaut
    j'ai créé une propriété!

    c'est comme une variable c'est elle qui vérifie l’existence du dictionnaire!

    Get lecture let écriture!

    Code lectuer : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Property Get Assigner(v As String) As Variant
    If TypeName(dicReg) = "Nothing" Then Set dicReg = CreateObject("Scripting.Dictionary")
    Assigner = dicReg(v)
    End Property
    Code écriture : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Property Let Assigner(v As String, Value As Variant)
    If TypeName(dicReg) = "Nothing" Then Set dicReg = CreateObject("Scripting.Dictionary")
    dicReg(v) = Value
    End Property

    ici on va lire Get Assigner(date) +1 et on vas stocker le résultat dans Let Assigner(v As String, Value As Variant)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Set dicReg = Nothing
    For i = 1 To 10
      Assigner(Date) = Assigner(Date) + 1
    Next
     Debug.Print Assigner(Date)
    End Sub
    Nom : Sans titre.png
Affichages : 628
Taille : 3,0 Ko
    Petite clarification, en faite mon problème vient surtout du fait que sur cette instruction :
    relis le poste de Patrick! (Salut Patrick)
    Dernière modification par Invité ; 21/02/2018 à 14h27.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 37
    Par défaut
    Si j'ai bien compris l'erreur vient du fait que j'ai inversé clé et item dans mon programme c'est bien ça ?

    Lorsque que j'initialise mon dictionnaire je dois définir une clé stable, ici la concaténation de tabJour et tabReg puis je peux modifier la valeur l'item à travers cette clé en utilisant dicReg.Item(tabJour(jour) & tabRegion(k)) = unevaleur c'est bien ça ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Nom : Sans titre.png
Affichages : 729
Taille : 13,0 Ko

    voila ce que tu fais!

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 37
    Par défaut
    Super merci pour l'explication, j'ai réussi à faire ce que je voulais !

    Merci à toi pour tes réponses et ta disponibilité.


    Solown

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. script shell: problème avec le caractère espace
    Par Le fut dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 04/05/2017, 11h49
  2. Problème de itemize dans un tableau
    Par salseropom dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 4
    Dernier message: 03/09/2009, 23h42
  3. [PHP-JS] script PHP problème
    Par beru333 dans le forum Langage
    Réponses: 7
    Dernier message: 18/06/2006, 23h42
  4. [SCRIPT WMI]Problèmes de permissions...
    Par zell45 dans le forum Windows
    Réponses: 6
    Dernier message: 09/05/2006, 13h21
  5. Problème : incrémentation !! perl a fumé ?
    Par Ickou dans le forum Langage
    Réponses: 11
    Dernier message: 30/11/2005, 17h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo