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 02/11/2011, 14h10   #1
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
Par défaut Valeur dans une liste correspondant aux cases cochées

Bonjour à tous!
Dans une optique d'amélioration de mon fichier Excel j'ai créé un nouveau bouton: "Verfication2"

Quand je clique sur ce bouton, je souhaiterai qu'il s'affiche dans la liste (Cf: UserformVerificacion2) Les numéros de proyecto (colonne D) correspondant aux lignes dont la valeur liées aux "colonnes cochées" prennent des valeurs particulières ("no disponible", "no conseguido" par exemple) entre deux dates particulières.

Pour plus de clarté j'ai mis les explications directement dans l'UserFormVerificacion2 ci-joint.

Quelqu'un serait il capable de me fournir le code correspondant aux colonne H et P apres je pense que mon faible niveau en VBA me permettra d'adapter le code à toute la feuille.

Merci d'avance pour votre aide Cordialement.

Bruno
Fichiers attachés
Type de fichier : zip Verification test 0001.zip (71,8 Ko, 3 affichages)
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/11/2011, 15h36   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 905
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 905
Points : 7 199
Points : 7 199
Bonjour,

Ci dessous une solution

L'affichage s'effectue sur l’évènement Clic d'un bouton (Ajout dans la userform)

L'idée est d'utiliser la propriété Tag des Checkbox pour nous informer sur la colonne et de la valeur à rechercher
Ici la checkbox1 (Order Entry Form) a comme tag => H/No disponible
La boucle sur les controls checkbox traite cette information et sort si cela ne correspond pas a la recherche

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
Private Sub CommandButton1_Click()
 
Dim i As Long
Dim Sh As Worksheet
Dim Chk As MSForms.Control
Dim str() As String
 
Set Sh = ThisWorkbook.Worksheets("OEP CONTROL")
 
'Vide la listBox
ListBox1.Clear
 
'Test si saisie des dates
If TextBox1.Text = "" Or TextBox2.Text = "" Then Exit Sub
 
'Boucle sur les lignes de données (de la ligne 11 à la dernière ligne utilisée)
For i = 11 To Sh.Range("A" & Sh.Rows.Count).End(xlUp).Row
 
    'Test le bornage de date
 
    If Sh.Range("A" & i).Value >= CDate(TextBox1.Text) And Sh.Range("A" & i).Value <= CDate(TextBox2.Text) Then
 
        'Boucle sur les Checkboxs
        For Each Chk In Me.Controls
 
            If TypeOf Chk Is MSForms.CheckBox Then
                If Chk.Value = True And Chk.Tag <> "" Then
                    str = Split(Chk.Tag, "/") 
                    'str(0)=>lettre de la colonne
                    'str(1)=>Valeur a rechercher 
                    If UCase(Sh.Range(str(0) & i).Value) <> UCase(str(1)) Then GoTo Suivant
                End If
            End If
 
        Next
 
        'Ajoute la référence si ok
        ListBox1.AddItem Sh.Range("D" & i).Value
 
    End If
 
Suivant:
 
Next i
 
 
End Sub
Verification test.zip
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/11/2011, 16h22   #3
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
Re bonjour,

Merci pour ton aide, mais j'ai un petit souci.

Quand j'essaye de l'adapter à mon cas, si je rentre deux dates, il me sort tous les "numéro de Proyecto" compris entre ces deux dates. (Donc ne différencie pas la valeur de la cellule colonne H.

Je n'ai jamais utilisé l'option tag.

Voila ce que j'ai fait:
- Créer un comandbutton1
- copier ta macro dans l'UserformVerification2
Modifier le tag de la check box par "H/No Disponible"

Voila j'essaye de bidouiller mais je ne vois pas d'ou viens le problème.

Encore merci,

Bruno
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 16h46   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 905
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 905
Points : 7 199
Points : 7 199
As tu essayé de lancer le fichier que j'ai joint dans mon précédent Post?

Dans ce fichier, on affiche uniquement les référence colonne H correspondant au bornage de date


NB : j'ai appliqué une correction sur le code. regardes aussi si cela ne vient pas de la.
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 08h40   #5
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
Merci de ton aide, la fonction est bien réalisée si je coche "Order entry Form"

En revanche 2 problemes s'offrent à moi:

- Si je ne coche aucune cases, tous les "Nº de Proyecto" compris entre les deux dates s'affichent.
- De même lorsque je coche une autre case que "Order entry Form", tous les "Nº de Proyecto" compris entre les deux dates s'affichent.

Par ailleurs, a partir du fichier que tu m'as envoyer, te serai t-il possible de me coder cette fonction pour une deuxieme colonne (la P par exemple qui réalise la meme fonction mais avec "No Conseguido").

Encore Merci !

Cdt, Bruno
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 09h51   #6
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 905
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 905
Points : 7 199
Points : 7 199
Citation:
- Si je ne coche aucune cases, tous les "Nº de Proyecto" compris entre les deux dates s'affichent.
ci dessous l'ajout d'une variable bol qui passe à true si au moins une checkbox active correspond à la recherche

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
Private Sub CommandButton1_Click()
 
Dim i As Long
Dim Sh As Worksheet
Dim Chk As MSForms.Control
Dim str() As String
Dim Bol As Boolean
 
Set Sh = ThisWorkbook.Worksheets("OEP CONTROL")
 
'Vide la listBox
ListBox1.Clear
 
'Test si saisie des dates
If TextBox1.Text = "" Or TextBox2.Text = "" Then Exit Sub
 
'Boucle sur les lignes de données (de la ligne 11 à la dernière ligne utilisée)
For i = 11 To Sh.Range("A" & Sh.Rows.Count).End(xlUp).Row
    Bol = False
    'Test le bornage de date
 
    If Sh.Range("A" & i).Value >= CDate(TextBox1.Text) And Sh.Range("A" & i).Value <= CDate(TextBox2.Text) Then
 
        'Boucle sur les Checkboxs
        For Each Chk In Me.Controls
 
            If TypeOf Chk Is MSForms.CheckBox Then
                If Chk.Value = True And Chk.Tag <> "" Then
                    str = Split(Chk.Tag, "/")
                    If UCase(Sh.Range(str(0) & i).Value) <> UCase(str(1)) Then
                        GoTo Suivant
                    Else
                        Bol = True
                    End If
                End If
            End If
 
        Next
 
        'Ajoute la référence si ok
        If Bol = True Then 
             ListBox1.AddItem Sh.Range("D" & i).Value & " / " & Sh.Range("P" & i).Value
 
        end if
    End If
 
Suivant:
 
Next i
 
 
End Sub
Citation:
- De même lorsque je coche une autre case que "Order entry Form", tous les "Nº de Proyecto" compris entre les deux dates s'affichent.
Seules les checkbox "Order Entry Form" et "Crédito" on un Tag. Il te faut les renseigner.
Ce problème se résout tout de même avec le code ci dessus

Citation:
Par ailleurs, a partir du fichier que tu m'as envoyer, te serai t-il possible de me coder cette fonction pour une deuxieme colonne (la P par exemple qui réalise la meme fonction mais avec "No Conseguido").
Ajout de la colonne P dans la listebox1 à la suite de la colonne D
Code :
ListBox1.AddItem Sh.Range("D" & i).Value & " / " & Sh.Range("P" & i).Value
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/11/2011, 12h04   #7
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
C'est presque parfait par rapport à ce que j'ai besoin.

Avec cette technique de tag, est il possible d'avoir un "ou" et pas un "et" ?

Je m'explique. Je souhaite que:
Le Nº de Proyecto s'affiche dans la ListBox1 quand:

la Checkbox "Credito" et la Checkbox "Order entry Form" sont toutes deux cochées et que :

au moins une des conditions suivante soit remplie:

-La colonne H a pour valeur "No disponible" (Precedement tagué H/No Disponible)

Ou

-La colonne P a pour valeur "No conseguido" (Precedement tagué P/No Conseguido)



Par ailleurs, est il possible d'avoir plusieurs tag pour une cellule.

C-a-d que le Nº de Proyecto s'affiche dans la listbox1 pour plusieurs valeurs de saisie
Exemple: Affichage du Nº de Proyecto dans la ListBox1 si on trouve la valeur "No Conseguido" dans la colonne H ou la valeur "Problema" dans cette même colonne H.


Merci beaucoup de prendre le temps de m'aider!

Bruno
brunounours est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 21h19   #8
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 905
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 905
Points : 7 199
Points : 7 199
Le code ci dessous fonctionne en OU.

Citation:
Par ailleurs, est il possible d'avoir plusieurs tag pour une cellule.
J'ai aussi modifier le code pour avoir un tag multi critères. Chaque critère étant séparés par un "-"

Code :
H/No Disponible-Disponible

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
Private Sub CommandButton1_Click()
 
Dim i As Long
Dim Sh As Worksheet
Dim Chk As MSForms.Control
 
Dim Bol As Boolean
 
Dim iTag As Byte
Dim str() As String
Dim strFiltre() As String
 
Set Sh = ThisWorkbook.Worksheets("OEP CONTROL")
 
'Vide la listBox
ListBox1.Clear
 
'Test si saisie des dates
If TextBox1.Text = "" Or TextBox2.Text = "" Then Exit Sub
 
'Boucle sur les lignes de données (de la ligne 11 à la dernière ligne utilisée)
For i = 11 To Sh.Range("A" & Sh.Rows.Count).End(xlUp).Row
 
    'Test le bornage de date
 
    If Sh.Range("A" & i).Value >= CDate(TextBox1.Text) And Sh.Range("A" & i).Value <= CDate(TextBox2.Text) Then
 
        'Boucle sur les Checkboxs
        For Each Chk In Me.Controls
 
            If TypeOf Chk Is MSForms.CheckBox Then
                Bol = False
                If Chk.Value = True And Chk.Tag <> "" Then
                    str = Split(Chk.Tag, "/")
                    strFiltre = Split(str(1), "-")
                    For iTag = 0 To UBound(strFiltre)
                        If UCase(Sh.Range(str(0) & i).Value) <> UCase(strFiltre(iTag)) And Bol = False Then
                            Bol = True
                            GoTo Trouve
                        End If
                    Next iTag
                End If
 
            End If
 
        Next
Trouve:
        'Ajoute la référence si ok
        If Bol = True Then ListBox1.AddItem Sh.Range("D" & i).Value
 
    End If
 
Suivant:
 
Next i
 
 
End Sub
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/11/2011, 18h13   #9
Nouveau Membre du Club
 
Homme Bruno
Étudiant
Inscription : novembre 2011
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Bruno
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 53
Points : 26
Points : 26
En changeant

Code :
If UCase(Sh.Range(str(0) & i).Value) <> UCase(strFiltre(iTag)) And Bol = False Then
par
Code :
If UCase(Sh.Range(str(0) & i).Value) = UCase(strFiltre(iTag)) And Bol = False Then

Ca marche très bien!! Merci infiniement pour ton aide!

Bruno
brunounours 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 12h47.


 
 
 
 
Partenaires

Hébergement Web