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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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))

  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
    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

+ 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, 09h43
  2. Réponses: 10
    Dernier message: 28/07/2007, 15h53
  3. Réponses: 5
    Dernier message: 10/07/2007, 09h43
  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, 13h13
  5. formulaire qui transforme les données!
    Par xave dans le forum Langage
    Réponses: 11
    Dernier message: 03/07/2006, 11h58

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