Aidez moi SVP problème en vba :- (

Résolu
usdy Messages postés 258 Statut Membre -  
usdy Messages postés 258 Statut Membre -
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
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  2. usdy Messages postés 258 Statut Membre 6
     
    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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. usdy Messages postés 258 Statut Membre 6
       
      est ce que c'est nomal qu'en ne trouvant rien il bug ?
      0
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. usdy Messages postés 258 Statut Membre 6
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. usdy Messages postés 258 Statut Membre 6
       
      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
      1. lermite222 Messages postés 9042 Statut Contributeur 1 199 > usdy Messages postés 258 Statut Membre
         
        Tu a lu l'EDIT de mon poste précédant ?
        0
      2. usdy Messages postés 258 Statut Membre 6 > lermite222 Messages postés 9042 Statut Contributeur
         
        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
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    mais le progamme se termine passer par les autres valeurs de prod
    Et en français ?
    Montre la fonction ce serra plus clair.
    0
    1. usdy Messages postés 258 Statut Membre 6
       
      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
      1. lermite222 Messages postés 9042 Statut Contributeur 1 199 > usdy Messages postés 258 Statut Membre
         
        Ton code ?
        0
      2. usdy Messages postés 258 Statut Membre 6 > lermite222 Messages postés 9042 Statut Contributeur
         
        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
  8. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. usdy Messages postés 258 Statut Membre 6
       
      j'ai finalement réussi à régler mon problème.
      merci pour ton aide
      0