Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2012, 10h22   #1
Candidat au titre de Membre du Club
 
Homme
Technicien réseau
Inscription : décembre 2011
Messages : 91
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Technicien réseau
Secteur : Service public

Informations forums :
Inscription : décembre 2011
Messages : 91
Points : 13
Points : 13
Par défaut Afficher elements d'un dictionnary

Bonjour a tous et a toutes,


Qui pourrait m'indiquer comment faire pour afficher les élements d'un dictionnary si celui ci existe

Code :
1
2
3
4
5
6
7
8
9
10
Set objDico = CreateObject("Scripting.Dictionary")
objJferies.CompareMode = vbTextCompare 
 
 
        If objDico.exists(date) Then
 
       'AFFICHER L'ELEMENT DU DICTIONNARY,
       ce sont des dates qui se trouvent sur une feuille excel
 
       End if


Merci à tous et a toutes...
debutVBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 10h36   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Je ne comprends pas bien ta question. Tu veux faire quoi quand tu dis afficher ?
Tu veux mettre tous les éléments d'un dictionary sur une feuille ?
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 10h57   #3
Candidat au titre de Membre du Club
 
Homme
Technicien réseau
Inscription : décembre 2011
Messages : 91
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Technicien réseau
Secteur : Service public

Informations forums :
Inscription : décembre 2011
Messages : 91
Points : 13
Points : 13
Par défaut suite réponse

Bonjour zebre loup,


alors je m'explique

j'ai sur une feuille ceci :
01/11/2011
11/11/2011
26/12/2011
27/12/2011
28/12/2011
29/12/2011
30/12/2011



puis je cree donc un dictionnary

Code :
1
2
3
4
5
6
7
8
9
Set objDico = CreateObject("Scripting.Dictionary")
objJferies.CompareMode = vbTextCompare 
 
        'si la date est present je souhaiterai l'afficher
        If objDico.exists(date) Then
 
 
   'ici je souhaiterai afficher la date si la condition est vraie. 
       End if

Merci
debutVBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h00   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Euh, je ne comprends toujours pas... Je dois manquer un peu de neurones ! (Ou tu n'es pas très très clair).

Déjà tu déclares un objDico, puis tu parles d'objJferies. Ensuite tu dis que tu veux l'afficher, mais où ? Et tu ne l'as pas encore rempli ton dictionary.

Ou alors tu veux entrer les valeurs des cellules dans le dictionary ?

J'aime bien les devinettes, mais il me fait des indices
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h15   #5
Candidat au titre de Membre du Club
 
Homme
Technicien réseau
Inscription : décembre 2011
Messages : 91
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Technicien réseau
Secteur : Service public

Informations forums :
Inscription : décembre 2011
Messages : 91
Points : 13
Points : 13
Par défaut suite réponse




je mets directement toute la fonction :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 
 
Function Work_Days(BegDate As Date, EndDate As Date, _
                   Optional bAvecJFerie As Boolean = True) As Variant
    Dim dt As Date
 
On Error GoTo Work_Days_Error
 
    If IsNull(BegDate) Or IsNull(EndDate) Then err.Raise vbObjectError + 1
    If Not IsDate(BegDate) Or Not IsDate(EndDate) Then err.Raise vbObjectError + 2
    If BegDate > EndDate Then err.Raise vbObjectError + 3
 
    dt = BegDate
    Work_Days = 0
 
    While dt <= EndDate
 
        If DatePart("w", dt, vbMonday) < 6 And Not obJDico.exists(dt) Then
            Work_Days = Work_Days + 1
 
 
        End If
 
 
 
 
'ici je souhaiterai afficher la date si celle ci est dans cette liste
 
01/11/2011
11/11/2011
26/12/2011
27/12/2011
28/12/2011
29/12/2011
30/12/2011
 
 
        If obJDico.exists(dt) Then
 
 
        'ici je cherche a afficher la date si
        MsgBox " la date est " & obJDico.Value
 
 
 
        End If
 
        dt = DateAdd("d", 1, dt)
    Wend
 
    Exit Function
 
Work_Days_Error:
    Select Case err.Number
        Case vbObjectError + 1: Work_Days = "Les 2 dates sont obligatoires."
        Case vbObjectError + 2: Work_Days = "Format de date incorrect."
        Case vbObjectError + 3: Work_Days = "La date de fin doit être postérieure à la date de début."
        Case Else: Work_Days = err.Description
    End Select
End Function
debutVBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h21   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Je ne comprends toujours pas, il faut vraiment que tu t'efforces à bien expliquer ce que tu veux, dans quel cadre on se trouve...
Rajouter du code ne sert à rien, surtout qu'ici, on ne sait pas ce qu'est objDico, ce qu'il contient...
S'il existe déjà et que tu veux afficher la date, bah tu fais
Code :
MsgBox " la date est " & dt
Mais ça je suppose que tu l'aurais trouvé tout seul !

Maintenant si ton problème est de remplir l'objDico, dis-le !!!
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h29   #7
Candidat au titre de Membre du Club
 
Homme
Technicien réseau
Inscription : décembre 2011
Messages : 91
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Technicien réseau
Secteur : Service public

Informations forums :
Inscription : décembre 2011
Messages : 91
Points : 13
Points : 13
Par défaut suite réponse

oui excuse moi de n'etre pas très clair je vais tenter de l'etre le plus possible

Donc j'ai dans une feuille appelé "Ma feuille" une liste de date

01/11/2011
11/11/2011
26/12/2011
27/12/2011
28/12/2011
29/12/2011
30/12/2011


il faut que mon dictionnary ait toutes ses dates en mémoire.

Puis je parcours le dictionnary et si la date passé en parametre fait partie d'une date du dictionnary l'afficher à l'ecran..

je sais pas si j'ai été plus explicite ...
debutVBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h52   #8
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Ok. Alors l'avantage du dictionary, c'est justement que tu n'as pas à boucler sur tous ces éléments pour savoir si une valeur en fait partie. Sinon, tu utiliserais tout simplement un tableau.

Un dictionary est une liste dynamique de couple clé/valeur. Il ne peut pas y avoir 2 fois la même clé.
Pour le remplir, en imaginant que tes dates sont en A1:A30

Code :
1
2
3
4
Dim c As Range
For Each c In Range("A1:A30") 'Je te laisse le soin de préciser la feuille
 objDico.Add c.Value, c.Value 'Ici, on met la même chose pour la clé et la valeur
Next c
Ca tu ne le fais qu'une fois, au début de ta procédure (tu peux déclarer objDico en Public par exemple).
Ensuite quand tu veux vérifier si une date dt en fait partie

Code :
If objDico.Exists(dt) Then MsgBox " la date est " & dt
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 12h05   #9
Candidat au titre de Membre du Club
 
Homme
Technicien réseau
Inscription : décembre 2011
Messages : 91
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Technicien réseau
Secteur : Service public

Informations forums :
Inscription : décembre 2011
Messages : 91
Points : 13
Points : 13
Par défaut suite réponse

Merci zebre loup,

j'ai compris grace a ton explication comment le dictionnary fonctionnait.

Merci à toi
debutVBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h28   #10
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Pourquoi la ligne suivante ne fait-elle pas l'affaire ?

Code :
If obJDico.exists(dt) Then
N'en tiens pas compte, c'était resté bloqué dans les tuyaux
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h20.


 
 
 
 
Partenaires

Hébergement Web