Aidez moi SVP problème en vba :- (

Résolu/Fermé
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 - 7 janv. 2009 à 10:01
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 - 7 janv. 2009 à 15:46
Bonjour,

j'ai un souci dans mon programme qui bloque toute ma macro. Je fais un filtre comme celui qui suit :

Selection.AutoFilter Field:=15, Criteria1:=prod

mais il n'existe pas de ligne correspondant aux critères recherchés, donc il me met une erreur du type : autofilter method of Range Class failed.
Est ce que quelqu'un pourrait m'aider en me disant comment faire pour que ça fonctionne.

merci d'avance

7 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 janv. 2009 à 10:30
Bonjour,
La numérotation des filtre commence à 1 à partir de la première colonne où il y à un filtre.
Exemple
Il y à un filtre automatique dans les colonnes D,E,F,G
pour valider le filtre colonne F c'est Selection.AutoFilter Field:=3, Criteria1:="Prod"
A+
0
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 6
7 janv. 2009 à 10:40
mon filtre commence à la lettre A et je souhaite la colonne O, c'est pour cette raison que j'ai fait un filtre à 15, mais le problème c'est que dans la colonne 15, il ne trouve pas le nom prod et donc le filtre ne retient aucune ligne, du coup je ne sais pas si je peux filtrer sur une valeur inexistante.
merci pour ton aide
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 janv. 2009 à 11:04
Attention à la case, le filtre y est sensible.
Et il est tout à fait normal que si tu met un critére qui n'existe pas il ne met aucune ligne, un peu de réflexion Svp.
A+
0
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 6
7 janv. 2009 à 11:06
est ce que c'est nomal qu'en ne trouvant rien il bug ?
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 janv. 2009 à 11:17
Oui, un autofilter se base sur des données qui se trouve dans sa liste de référence (le comboBox)
Pour éviter tu met
    On Error Resume Next

Juste au dessus de la ligne de l'autofilter.
et
    If Err then exit sub

Juste en dessous de la ligne de l'autofilter
0
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 6
7 janv. 2009 à 11:23
le problème est que je mets mon filtre dans une boucle for car "prod" est une variable qui prend une valeur différente à chaque tour de boucle, donc si je fais un exit sub quand le filtre est nul alors la boucle for n'ira pas jusqu'au bout.
Qu'en penses-tu ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 janv. 2009 à 11:31
Alors tu ne met pas le If Err
en dessous de Next tu met
On Error Goto 0
EDIT:
Mais je ne vois pas l'utilité d'une boucle sur le filtre, tu n'aurras pas le temps de les voir sauf le dernier ??
0
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 6
7 janv. 2009 à 11:38
j'ai essayé de mettre :
On Error Resume Next
avant le filtre et :
On Error GoTo 0
après le next mais vu que le filtre nul est rencontré au premier tour de boucle, je n'ai lpus de bug mais le progamme se termine passer par les autres valeurs de prod.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018
7 janv. 2009 à 11:49
Tu a lu l'EDIT de mon poste précédant ?
0
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 6 > lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020
7 janv. 2009 à 12:01
dans ma boucle for, pour chaque produit, je stocke la somme de la colonne P dans une variable, c'est pour cela que j'ai besoin d'une boucle for qui parcourt toute les valeurs de prod.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 janv. 2009 à 12:14
mais le progamme se termine passer par les autres valeurs de prod
Et en français ?
Montre la fonction ce serra plus clair.
0
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 6
7 janv. 2009 à 12:17
dsl j'avais oublié de mettre sans : ce qui donne en français le programme se termine sans passé par les autres valeurs de prod
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018
7 janv. 2009 à 12:21
Ton code ?
0
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 6 > lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020
7 janv. 2009 à 14:01
voici mon code :
Public Sub macr()
fin = 3357
finbis = 928
'on désactive les filtres s'il y en avait et on se positionne sur la ligne des titres
Worksheets("feuilleA").Select
Worksheets("feuilleA").AutoFilterMode = False
Worksheets("feuilleA").Range("A" & C1).Select

'on désactive les filtres s'il y en avait et on se positionne sur la ligne des titres
Worksheets("feuilleB").Select
Worksheets("feuilleB").AutoFilterMode = False
Worksheets("feuilleB").Range("A" & C2).Select

Worksheets("land").Activate
For Each i In [f6:f40]
'Si on arrive à la dernière ligne du tableau

If (i.Value Like "FIN") Then
'on stocke cette dernière ligne dans une variable
lignefin = i.Row - 1
End If
Next

'Déclaration d'un bloc qui prend tous les noms des pays
Set plage = Worksheets("land").Range("F6:F" & lignefin)
'On utilise une variable "i" qui parcourt tous les pays
For Each i In plage
country = i.Value 'la variable country prend le pays de la ligne courante

'on filtre pour n'obtenir que les lignes contenant le pays stocké dans country
Worksheets("feuilleA").AutoFilterMode = False
Worksheets("feuilleA").Select
Selection.AutoFilter Field:=25, Criteria1:=country

'dans feuilleB
Worksheets("feuilleB").AutoFilterMode = False
Worksheets("feuilleB").Select
Selection.AutoFilter Field:=25, Criteria1:=country
End If

If (Worksheets("feuilleA").Range("g2").Value <> 0) And (Worksheets("feuilleB").Range("g2").Value <> 0) Then
remplissage 'fonction qui permet de remplir des autres feuilles
If (country = "France") Then
verif
End If
End If
Next
End Sub
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 janv. 2009 à 15:29
Je ne sais pas la tester vu que je n'ai pas le classeur en entier.
Mais j'ai détecté plusieur anomalies... j'ai mis des commentaires et des modif dans la macro
Public Sub macr()
    fin = 3357
    finbis = 928
    'on désactive les filtres s'il y en avait et on se positionne sur la ligne des titres
    Sheets("feuilleA").Select
    Sheets("feuilleA").AutoFilterMode = False
    Sheets("feuilleA").Range("A" & C1).Select
    
    'on désactive les filtres s'il y en avait et on se positionne sur la ligne des titres
    Sheets("feuilleB").Select
    Sheets("feuilleB").AutoFilterMode = False
    Sheets("feuilleB").Range("A" & C2).Select
'? Comprend pas, Range("A" & C2) est égal a Range("A0")?
'Que doit-il y avoir dedans ?

    Sheets("land").Activate
'    For Each i In [f6:f40]
'    'Si on arrive à la dernière ligne du tableau
'        If (i.Value Like "FIN") Then
'        'on stocke cette dernière ligne dans une variable
'            lignefin = i.Row - 1
'        End If
'    Next
'Peu être remplacer par...
lignefin = Sheets("land").Range("F65536").End(xlUp).Row
    
    'Déclaration d'un bloc qui prend tous les noms des pays
    Set plage = Sheets("land").Range("F6:F" & lignefin)
    'On utilise une variable "i" qui parcourt tous les pays
    For Each i In plage
        country = i.Value 'la variable country prend le pays de la ligne courante
        
        'on filtre pour n'obtenir que les lignes contenant le pays stocké dans country
        Sheets("feuilleA").AutoFilterMode = False
        Sheets("feuilleA").Select
        Selection.AutoFilter Field:=25, Criteria1:=country
        
        'dans feuilleB
        Sheets("feuilleB").AutoFilterMode = False
        Sheets("feuilleB").Select
        Selection.AutoFilter Field:=25, Criteria1:=country
'End If   Pas de If ?
    
        If (Sheets("feuilleA").Range("g2").Value <> 0) And (Sheets("feuilleB").Range("g2").Value <> 0) Then
            remplissage 'fonction qui permet de remplir des autres feuilles
            If (country = "France") Then
                verif
            End If
        End If
    Next
End Sub

En indentant ton code c'est plus façile pour détecter quand il y a des erreurs dals les If, For etc..
Sais-tu comment faire un deboguage ?
Tu dit..


0
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 6
7 janv. 2009 à 15:46
j'ai finalement réussi à régler mon problème.
merci pour ton aide
0