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 :

MsgBox qui reprend les données d'un objet [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 94
    Par défaut MsgBox qui reprend les données d'un objet
    Bonjour le forum,

    Je cherche à reprendre dans un MsgBox les données enregistrées dans un objet de type "dictionary".
    Aucun élément ne s'affiche avec ce code :


    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
    19
    20
    21
    22
        Set MonDico = CreateObject("Scripting.Dictionary")
     
        'selection de la feuille
        Sheets("E1_SA").Select
        'positionnement en haut du tableau
        Range("D10").Select
        'parcours du tableau sur les 85 lignes pour mémoriser les valeurs à traiter dans la feuille "Saisie"
        For i = 0 To 85
                'que si elles contiennent du texte
                If ActiveCell.Offset(i, 0).Value <> "" Then
                    'si la valeur n'a pas encore été traitée (pour éviter les doublons)
                    If Not MonDico.Exists(ActiveCell.Offset(i, 0).Value) Then
                        'on mémorise la valeur
                        MonDico.Add ActiveCell.Offset(i, 0).Value, ""
                    End If
                End If
            End If
        Next i
     
         If MsgBox("Etes-vous certain d'avoir tout sélectionné?" & Chr(13) & MonDico.Item(0), vbYesNo) = vbNo Then
         Exit Sub
        End If
    Merci par avance et merci à jerome.vaussenat qui m'a donné les premiers éléments de mon code.

    Bon après-midi à tous,

    Boris

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    dans ton dictionnaire, tu ne crées que les clés, les valeurs sont vides

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                ' ici c'est la clé
    MonDico.Add ActiveCell.Offset(i, 0).Value, ""
                                               ' ici c'est l'élément

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Ou sinon la valeur à retourner est peut-être MonDico.Key(0) ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 94
    Par défaut
    Merci pour vos réponses. Je ne peux pas déclarer les valeurs car elles sont variables. Je souhaiterai ressortir l'ensemble des valeurs identifiées dans la MsgBox.

    MonDico.Key (0) ne fonctionne pas malheureusement..

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Et comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim arrTmp
     
    ' CODE
     
    arrTmp = MonDico.keys ' on met toutes les keys dans un array
    MsgBox arrTmp(0) ' on utilise l'array
    D'ailleurs pour les experts, je n'ai jamais compris pourquoi dico.keys(0) renvoyait une erreur (la propriété get n'a pas renvoyé d'objet). C'est donc une volonté des concepteurs de l'objet dictionaire ? Mais dans quel but ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Parlons le même langage, on va pas se comprendre sinon

    ta procédure créee des entrées dans un dictionnaire, et tu n'y renseigne que les clés. Tu laisses la valeurs à vide

    ensuite, tu voudrais pouvoir afficher l'ensemble des clés que tu as inséré dans le MsgBox c'est bien ça ?

    essaye comme ça, juste après la partie de ton code qui crée le dictionnaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Tabl()
    Tabl = MonDico.keys
     
    For i = 0 To MonDico.Count - 1
        liste = liste & Chr(13) & Tabl(i)
    Next i
     
    If MsgBox("Etes-vous certain d'avoir tout sélectionné : " & liste, vbYesNo) = vbNo Then Exit Sub
    Attention, s'il y a trop de valeurs la fenêtre de message ne pourra pas tout afficher

  7. #7
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par mathspountz Voir le message
    Et comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim arrTmp
     
    ' CODE
     
    arrTmp = MonDico.keys ' on met toutes les keys dans un array
    MsgBox arrTmp(0) ' on utilise l'array
    D'ailleurs pour les experts, je n'ai jamais compris pourquoi dico.keys(0) renvoyait une erreur (la propriété get n'a pas renvoyé d'objet). C'est donc une volonté des concepteurs de l'objet dictionaire ? Mais dans quel but ?

    Pourquoi ? Je ne sais pas, probablement lié à la construction et structure de l'objet ?

    si on veut accéder à une clé par son index sans passer par un tableau intermédiaire, la fonction Index est utile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Application.Index(MonDico.keys, 2)
    ce qui permet de récupérer une chaine composée de l'ensemble des clé comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = 1 To MonDico.Count
        liste = liste & Chr(13) & Application.Index(MonDico.keys, i)
    Next i
     
    If MsgBox("Etes-vous certain d'avoir tout sélectionné : " & liste, vbYesNo) = vbNo Then Exit Sub
    mais c'est quand même plus long que faire un Join sur la collection des clés en direct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste = Chr(13) & Join(MonDico.keys, Chr(13))

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 94
    Par défaut
    Bravo le join marche parfaitement!

    Merci à tous pour votre aide

  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour, bonjour !

    Citation Envoyé par borisp Voir le message
    MonDico.Key (0) ne fonctionne pas malheureusement..
    Normal car en informatique comme en français les fautes d'orthographe sont interdites !


    Citation Envoyé par mathspountz Voir le message
    je n'ai jamais compris pourquoi dico.keys(0) renvoyait une erreur
    Citation Envoyé par joe.levrai Voir le message
    Je ne sais pas, probablement lié à la construction et structure de l'objet ?
    Sans souci, tout dépend déjà comment est déclarée la variable objet Dictionary !
    Joe est dans le vrai, Dictionary n'étant pas un objet interne au VBA …

    Exemples :

    • déclaration anticipée en activant la référence : ligne n°12 de cette discussion

    • déclaration tardive via CreateObject : ligne n°20 de ce code

    ______________________________________________________________________________________________________
    Pour apprendre quelque chose aux gens, il faut mélanger ce qu’ils connaissent avec ce qu’ils ignorent. (Pablo Picasso)

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

Discussions similaires

  1. [COM] Existe-t'il un document qui reprend les objets COM de Excel ?
    Par beegees dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 03/02/2009, 10h43
  2. Réponses: 10
    Dernier message: 28/07/2007, 16h53
  3. Réponses: 5
    Dernier message: 10/07/2007, 10h43
  4. Creer une requete update qui recupere les données de 2 tables
    Par pooi1 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/06/2007, 14h13
  5. formulaire qui transforme les données!
    Par xave dans le forum Langage
    Réponses: 11
    Dernier message: 03/07/2006, 12h58

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