Utilisation Filtres par VBA

Bonjour a tous

je developpe une macro pour supprimer une ligne existante dans deux onglets différents

dans un premier onglet je choisit ma ligne (une opération) a supprimer et ma macro va supprimer la ligne correspondante dans l'onglet de destination si elle existe, (ainsi que dans la feuille source par la suite)

j' ai pensé que le meilleur moyen pour savoir si une ligne identique existait dans l'onglet de destination était d'utilisé les filtres avec comme critères pour chaque colonnes de la feuille source.

j'applique donc mon filtre sur plusieurs colonnes successivement en utilisant :

  For i = 3 To dercol 'commence à la troisième colonne pour ne pas faire de tri sur la date => problème
            ActiveSheet.Range(plage).AutoFilter Field:=i, Criteria1:=Sheets(index_sheet_active).Cells(ligne, i)  
            Next

tout se passe bien jusqu'au moment ou j'applique le filtre sur la colonne d'un montant sachant que toutes les autres colonnes sont considérées comme des chaines de caractères

et donc ma macro n'arrive pas a supprimer la ligne correspondante car elle ne la trouve pas au finale....

si vous avez une idée de pourquoi cela ne fonctionne pas ....

merci

Fred

ps : vous avec un fichier test épuré en pièce jointe

10test-forum.xlsm (103.67 Ko)

Bonjour

Un essai, d'une autre façon.

Cela te convient-il ?

16test-forum.xlsm (108.50 Ko)

Bonjour gmb

Merci pour cette solution....

j'avais déjà commencé a travaillé aussi dans ce sens mais je trouve cela beaucoup plus long surtout pour un tableau contenant a terme plus d'une centaine de ligne....mais c'est une solution qui marche

mais tu n'as pas d'idée pourquoi le filtre ne marche pas avec la valeur numérique ????

Merci

Fred

Bonjour

Bonjour gmb

Oui je sais je ne travaille pas vite

Une autre méthode

Bonjour banzai

Merci pour ta proposition

j'ai mis du temps a comprendre ton code ....

même si cela utilise des colonnes temporaires.....

A choisir entre le code de banzai et celui de gmb je préfère celui de Banzai car plus rapide en execution.... (du moins c'est ce que je crois)

merci a vous deux

Fred

Bonjour

Juste une idée (qui fonctionne) pour les filtres numériques

Fonctionne aussi avec les chiffres avec virgule

C'est un peu (beaucoup) compliqué mais .... pas mieux

            For i = 3 To dercol 'commence à la troisième colonne pour ne pas faire de tri sur la date => problème
              If Not IsEmpty(Sheets(index_sheet_active).Cells(ligne, i)) And IsNumeric(Sheets(index_sheet_active).Cells(ligne, i)) Then
                ActiveSheet.Range(plage).AutoFilter Field:=i, Criteria1:=">=" & Replace(Sheets(index_sheet_active).Cells(ligne, i), ",", "."), _
                                                              Operator:=xlAnd, _
                                                              Criteria2:="<=" & Replace(Sheets(index_sheet_active).Cells(ligne, i), ",", ".")   'i+1 car on a supprimer la colonne A de la feuille X par rapport a la feuille compte
              Else
                ActiveSheet.Range(plage).AutoFilter Field:=i, Criteria1:=Sheets(index_sheet_active).Cells(ligne, i)  'i+1 car on a supprimer la colonne A de la feuille X par rapport a la feuille compte
              End If
            Next

Merci Banzai pour ta réponse sur le sujet inital a savoir le problème du filtre sur des nombres numériques....

Il est vrai que cette histoire de séparateur différent entre les anglais et les français (virgule et point) pose et posera toujours problème.....

pour autant je n'aurais pas pensé a faire deux critères un ">=" et l'autre "<=" pour au final obtenir que les valeurs egales.....

mais sais tu pourquoi cela ne fonctionne pas en mettant tout simplement "=" ????? chose que j'ai essayé pour voir

Fred

Bonjour

fred2406 a écrit :

sais tu pourquoi cela ne fonctionne pas en mettant tout simplement "=" ?????

Non j'avais testé aussi et cela ne fonctionnait pas

Quelqu'un en passant par ici aura surement l'explication

Wait & see

Rechercher des sujets similaires à "utilisation filtres vba"