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 10/02/2012, 16h43   #1
Invité de passage
 
Homme Yves-Marie
Développeur informatique
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme Yves-Marie
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Associations - ONG

Informations forums :
Inscription : février 2012
Messages : 4
Points : 0
Points : 0
Par défaut Critères de Filtre Automatiques

Bonjour,
Nouveau sur ce Forum, je sollicite votre indulgence pour mon manque d'expérience !
J'ai un souci avec Excel 2010 au sujet du stockage des critères dans les filtres automatiques : SI je filtre une colonne sur un ou deux critère chaîne de caractère ou nombre pas de problème le premier critère est stocké dans Criteria1 sous forme de chaine et si 2ème critère il y a avec OR ou And il est stocké également sous forme de chaine dans Criteria2
Si mon filtre est dans une colonne de Dates, seul Critéria2 est utilisé sous la forme Criteria2:=Array(0, "12/12/2012") par exemple et je suis dans l'incapacité de récupérer ce "12/12/2012". L'exécution de ma macro bloque toujours sur la ligne Criteria2(x) dans laquelle, considérant que Critéria2 est un variant tableau, j'e tente de lire le 2ème élément de ce tableau.
Je voudrais comprendre pourquoi cette erreur et pourquoi dans ce cas, seul Critéria2 est mouvementé !

Merci de vos lumières
Uppsala
Uppsala est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2012, 16h05   #2
Membre du Club
 
Femme Annie MARTINEZ
Étudiant
Inscription : janvier 2012
Messages : 61
Détails du profil
Informations personnelles :
Nom : Femme Annie MARTINEZ
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 61
Points : 63
Points : 63
Salut,

tu peux poster ta macro ou les parties qui posent probleme. ce serait deja un bon debut pour mieux comprendre ton probleme.
Ozer45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2012, 10h01   #3
Invité de passage
 
Homme Yves-Marie
Développeur informatique
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme Yves-Marie
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Associations - ONG

Informations forums :
Inscription : février 2012
Messages : 4
Points : 0
Points : 0
Par défaut Voilà la Sub

Bonjour, Merci de votre réaction

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
Sub Filtractif()
Feuille = ActiveSheet.Name
Set ID = Sheets(Feuille)
If ID.AutoFilterMode Then
indice = 0
For Each f In ID.AutoFilter.Filters
indice = indice + 1
If f.On Then
Filtre1 = Left(f.Criteria1, 1) & " " & Right(f.Criteria1, Len(f.Criteria1) - 1)
AutreCrit = ""
currentFiltRange = ID.AutoFilter.Range.Address
If f.Operator Then
If f.Operator = 2 Then
Opérateur = "OU"
ElseIf f.Operator = 1 Then
Opérateur = "ET"
End If
Filtre2 = Left(f.Criteria2, 1) & " " & Right(f.Criteria2, Len(f.Criteria2) - 1)
AutreCrit = " " & Opérateur & " " & Filtre2 '& " "f.Operator &
StrRequête = StrRequête + Cells(5, indice) & " " & f.Criteria1 & AutreCrit & Chr(10)
End If
End If
Next
End If
Range("G1").Formula = StrRequête
End Sub
Mon intention est d'afficher une chaîne rappelant les critères de filtres utilisés
Entre la version 2003 et celle de 2010 Excel semble avoir changé le format de valeurs de critères
Uppsala est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2012, 16h48   #4
Membre du Club
 
Femme Annie MARTINEZ
Étudiant
Inscription : janvier 2012
Messages : 61
Détails du profil
Informations personnelles :
Nom : Femme Annie MARTINEZ
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 61
Points : 63
Points : 63
Salut,

Excuse moi pour ce long silence.

J'ai regardé ton code mais je ne sais pas ce qui pourrais clocher. J'esperes que quelqu'un d'autre sur le forum aura une reponse.

Desolé
Ozer45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2012, 11h23   #5
Invité de passage
 
Homme Yves-Marie
Développeur informatique
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme Yves-Marie
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Associations - ONG

Informations forums :
Inscription : février 2012
Messages : 4
Points : 0
Points : 0
Par défaut merci

C'est très sympa de donner un signe de vie.
Je savais bien que le code n'ajouterait pas grand choses à la compréhension du problème !
En réalité je constate une différence de comportement entre Excel 2003 et 2010
Le stockage de la valeur du filtre date, dans Excel 2010 se fait sous la forme que j'ai indiquée dans mon premier message c'est à dire Criteria2:=Array(0, "dd/mm/yyyy"). et je ne parviens pas à récupérer le deuxième élément de ce tableau..
Si j'y parvenais, je pourrais installer un test pour détecter le type de donnée de Criteria2, mais ce paramètre reste toujours vide lors du "pas à pas" en Espion.
Désespérant !
En enregistrement de macro j'obtiens :
Code :
1
2
ActiveSheet.Range("$A$5:$O$55").AutoFilter Field:=8, Operator:= _
        xlFilterValues, Criteria2:=Array(0, "10/2/2010")
Uppsala est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2012, 12h48   #6
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 775
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 775
Points : 2 095
Points : 2 095
Bonjour,

Si tu veux lire un élément particulier dans un tableau, il te suffit d'indiquer sa position ordinale (attention, ça commence à 0) :
Code :
1
2
 
MsgBox Array(0, "dd/mm/yyyy")(1)
Hervé.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2012, 13h02   #7
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 775
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 775
Points : 2 095
Points : 2 095
Re,

Un conseil, déclare tes variables en les typant, ça évite souvent de s'arracher les cheuveux lors du débogage. Il te faut indiquer en tête de module "Option Explicit" afin que si une variable n'est pas déclarée, le compilateur te l'indique (ceci peut venir d'un faute d'orthographe !!!) et pour que ceci se fasse automatiquement, "Outils" > "Options..." onglet "Editeur" cocher la case "Déclaration des variables obligatoire". Tu peux aussi indenter ton code et séparer les lignes, il en devient beaucoup plus lisible et surtout, commente-le car des mois après, si il est complexe ce sera un vrai casse tête pour le comprendre à nouveau et pire encore si c'est une autre personne qui en a l'entretien. Aussi, quand tu concatène des strings, évite les +, utilise l'esperluette (&) car ici, le compilateur c'est arrêté sur :
Code :
1
2
3
4
 
StrRequête = StrRequête + Cells(5, indice) & " " & f.Criteria1 & AutreCrit & Chr(10)
'donc, ceci convient mieux :
StrRequête = StrRequête & Cells(5, indice) & " " & f.Criteria1 & AutreCrit '& Chr(10)
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
 
Sub Filtractif()
 
    Dim ID As Worksheet
    Dim f As Filter
    Dim Filtre1 As String
    Dim Filtre2 As String
    Dim AutreCrit As String
    Dim currentFiltRange As String
    Dim Operateur As String
    Dim StrRequête As String
    Dim indice As Integer
 
    Set ID = ActiveSheet
 
    If ID.AutoFilterMode Then
 
        indice = 0
 
        For Each f In ID.AutoFilter.Filters
 
            indice = indice + 1
 
            If f.On Then
 
                Filtre1 = Left(f.Criteria1, 1) & " " & Right(f.Criteria1, Len(f.Criteria1) - 1)
                AutreCrit = ""
 
                currentFiltRange = ID.AutoFilter.Range.Address
 
                If f.Operator Then
 
                    If f.Operator = 2 Then
 
                        Operateur = "OU"
 
                    ElseIf f.Operator = 1 Then
 
                        Operateur = "ET"
 
                    End If
 
                    Filtre2 = Left(f.Criteria2, 1) & " " & Right(f.Criteria2, Len(f.Criteria2) - 1)
 
                    AutreCrit = " " & Operateur & " " & Filtre2 '& " "f.Operator &
 
                    StrRequête = StrRequête & Cells(5, indice) & " " & f.Criteria1 & AutreCrit '& Chr(10)
 
                End If
 
            End If
 
        Next
 
    End If
 
    Range("G1").Formula = StrRequête
 
End Sub
Enfin, ce ne sont que des conseils, pas des obligations

Hervé.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2012, 14h43   #8
Invité de passage
 
Homme Yves-Marie
Développeur informatique
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme Yves-Marie
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Associations - ONG

Informations forums :
Inscription : février 2012
Messages : 4
Points : 0
Points : 0
Par défaut Enfin !

Merci les amis de ces sages conseils, et surtout de me redonner le courage de chercher !
Il est vrai que je ne suis pas toujours assez rigoureux sur les déclarations de type de variable et sur les commentaires de code.
Le problème demeure car ma Sub FiltreActif() fonctionne super bien dans Excel 2003 où les Criteria1 et Critéria2 son récupérable directement en tant que chaînes de caractères, que la(es) colonne(s) filtrée(s) soit en numérique, chaîne ou en date.
Alors que dans Excel 2010 si la colonne filtrée contient des dates, Criteria1 n'apparaît jamais et Criteria2 est sous la forme Array mais reste illisible comme expliqué dans mes précédents messages.
Uppsala est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h24.


 
 
 
 
Partenaires

Hébergement Web