Masquer lignes selon 2 conditions par macro excel
Résolu/Fermé
PLAYA2
Messages postés
15
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
28 janvier 2013
-
8 janv. 2013 à 18:57
PLAYA2 Messages postés 15 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 28 janvier 2013 - 10 janv. 2013 à 14:08
PLAYA2 Messages postés 15 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 28 janvier 2013 - 10 janv. 2013 à 14:08
A voir également:
- Masquer des lignes excel sous condition vba
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne excel - Guide
- Liste déroulante excel - Guide
- Si et excel - Guide
- Excel trier par ordre alphabétique en gardant les lignes - Guide
18 réponses
Mike-31
Messages postés
18352
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 décembre 2024
5 110
8 janv. 2013 à 22:00
8 janv. 2013 à 22:00
Salut,
Il a raison le bos pourquoi faire simple lorsqu'il est possible de faire compliqué
Sub Masque_lignes_condition_cellule()
Dim lg As Long, r As Long
Application.ScreenUpdating = False
With ActiveSheet.UsedRange
lg = .Row + .Rows.Count - 1
End With
For r = lg To 1 Step -1
If Cells(r, "AJ") Like "X" And Cells(r, "AK") Like "0" Then
Rows(r).EntireRow.Hidden = True
End If
Next r
Application.ScreenUpdating = True
End Sub
et demain tu nous demanderas comment afficher les lignes masquées
Il a raison le bos pourquoi faire simple lorsqu'il est possible de faire compliqué
Sub Masque_lignes_condition_cellule()
Dim lg As Long, r As Long
Application.ScreenUpdating = False
With ActiveSheet.UsedRange
lg = .Row + .Rows.Count - 1
End With
For r = lg To 1 Step -1
If Cells(r, "AJ") Like "X" And Cells(r, "AK") Like "0" Then
Rows(r).EntireRow.Hidden = True
End If
Next r
Application.ScreenUpdating = True
End Sub
et demain tu nous demanderas comment afficher les lignes masquées
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
8 janv. 2013 à 19:55
8 janv. 2013 à 19:55
Pourquoi une macro alors qu'un simple filtre suffit ?
PLAYA2
Messages postés
15
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
28 janvier 2013
8 janv. 2013 à 20:03
8 janv. 2013 à 20:03
C'est ce que j'avais proposé à mon chef de service mais il veut une macro pour n'avoir qu'à cliquer sur un bouton pour masquer les lignes inutiles à la lecture...
Ce fichier est alimenté par une base de données (liaisons) et ces dernières s'actualise quotidiennement. De plus, il ne maîtrise pas excel et ne veut pas s'y mettre.
Enfin, pour ma part j'ai très envi de répondre à son attente mais surtout de m'initier aux macros...
Pouvez-vous m'aider svp ???
Ce fichier est alimenté par une base de données (liaisons) et ces dernières s'actualise quotidiennement. De plus, il ne maîtrise pas excel et ne veut pas s'y mettre.
Enfin, pour ma part j'ai très envi de répondre à son attente mais surtout de m'initier aux macros...
Pouvez-vous m'aider svp ???
PLAYA2
Messages postés
15
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
28 janvier 2013
8 janv. 2013 à 23:33
8 janv. 2013 à 23:33
un grand merci MIKE 31. T'imagines pas comme tu me fais plaisir ; je vais tester ça dès demain...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
8 janv. 2013 à 23:42
8 janv. 2013 à 23:42
Bonjour,
Puisque tu est novice et que tu te lances dans le VBA, une autre méthode documentée qui met en place un filtre automatique lors du clic droit sur la feuille et qui ré-affiche tout lors du clic droit suivant
Cela évitera peut-être (soyons prudent) la question de demain (bonjour Éric).
Copies ce code dans le module de la feuille à filtrer :
Copier, Clic droit sur l'onglet, Visualiser le code, Coller
Puisque tu est novice et que tu te lances dans le VBA, une autre méthode documentée qui met en place un filtre automatique lors du clic droit sur la feuille et qui ré-affiche tout lors du clic droit suivant
Cela évitera peut-être (soyons prudent) la question de demain (bonjour Éric).
' Module : Feuil1 ' Objet : Filtrage automatique des colonnes AJ et AK ' 08/01/13 ' ' ' Déclaration des options pour l'ensemble du module de feuille ' Une très bonne habitude à prendre, toujours commencer un module par : Option Explicit ' ' Déclaration des constantes utilisables dans l'ensemble du module ' (connues de toutes les procédures du module) Private Const refCellule1 As String = "A1" 'Référence de la 1° cellule du tableau Private Const refColonne1 As String = "AJ" 'Référence de la 1° colonne à filtrer Private Const strCritère1 As String = "X" 'Critère de filtrage de la 1° colonne Private Const refColonne2 As String = "AK" 'Référence de la 2° colonne à filtrer Private Const strCritère2 As String = "0" 'Critère de filtrage de la 2° colonne ' ' Procédures évènementielles du module de feuille ' (exécutée automatiquement lorsqu'un des évènements de la feuille se produit) ' Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) ' Mise à jour du filtre à chaque clic droit sur la feuille (sur l'évènement BeforeRightClick) ' 08/01/13 ' 'Annuler l'effet normal du clic droit (pas d'affichage du menu contextuel) Cancel = True 'Appeler la procédure de filtrage en indiquant la feuille sur laquelle appliquer le filtre Call Filtrer_Colonnes(ActiveSheet) End Sub ' Autres procédures du module ' (exécutées uniquement lorsqu'elles sont appelées) ' Private Sub Filtrer_Colonnes(ByRef wsh As Worksheet) ' Procédure de filtrage des colonnes : Met en place / Enlève le filtrage. ' Arguments : wsh [in] Feuille sur laquelle le filtre sera appliqué ' 08/01/13 ' ' Déclaration des variables utilisables dans cette procédure Dim rngTableau As Range 'Tableau contenant les données Dim intChamp1 As Integer 'Numéro du 1° champ (1° colonne à filtrer) Dim intChamp2 As Integer 'Numéro du 2° champ (2° colonne à filtrer) 'Si un filtage est déja en place... If wsh.FilterMode = True Then '... afficher toutes les données et... wsh.ShowAllData '... quitter la procédure. Exit Sub End If 'sinon on continue 'Définir la plage des cellules contenant le tableau Set rngTableau = wsh.Range(refCellule1).CurrentRegion 'Si le filtre automatique n'est pas place, l'activer. If Not wsh.AutoFilterMode Then rngTableau.AutoFilter 'Définir les numéros des champs à filtrer = numèro de la colonne de la feuille intChamp1 = wsh.Columns(refColonne1).Column intChamp2 = wsh.Columns(refColonne2).Column 'Mettre en place le filtrage des deux champs rngTableau.AutoFilter Field:=intChamp1, Criteria1:=strCritère1 rngTableau.AutoFilter Field:=intChamp2, Criteria1:=strCritère2 End Sub
Copies ce code dans le module de la feuille à filtrer :
Copier, Clic droit sur l'onglet, Visualiser le code, Coller
PLAYA2
Messages postés
15
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
28 janvier 2013
9 janv. 2013 à 18:50
9 janv. 2013 à 18:50
Merci patrice pour ces éléments.
En fait, je m'en suis sortie en évitant la saisie en VBA => j'ai triché en faisant jdes filtres que j'ai enregistrer dans ma macro, du coup le boss est content.
Bien évidemment il m' demandé une autre macro pour masquer les pages complètes (avec en-tête de collonne) => 1:133) si une ligne (129)en particulier est vide.
Là je ne peux pas utiliser les filtres? j'ai donc tenté ceci :
Rows("1:133").Select
If Cells("AK129") = 0 Then
End If
Selection.EntireRow.Hidden = True
End sub
Mais ça ne fonctionne pas, quelqu'un pourrait-il m'éclairer svp ?
Pour info, le fichier comporte plusieures pages à la suite pour lesquelles je devrais répéter la même opération mais si j'ai la bonne syntaxe pour une ligne, je devrais me débrouiller pour le reste.
D'avance merci.
ps : Encore merci MIKE 31 mais ça n'a pas fonctionné ; en effet sur la ligne
If Cells(r, "AJ") Like "X" And Cells(r, "AK") Like "0" Then
j'ai eu le message : "erreur de syntaxe" mais ça m'a quand même aidé à voir le langage à utiliser...
En fait, je m'en suis sortie en évitant la saisie en VBA => j'ai triché en faisant jdes filtres que j'ai enregistrer dans ma macro, du coup le boss est content.
Bien évidemment il m' demandé une autre macro pour masquer les pages complètes (avec en-tête de collonne) => 1:133) si une ligne (129)en particulier est vide.
Là je ne peux pas utiliser les filtres? j'ai donc tenté ceci :
Rows("1:133").Select
If Cells("AK129") = 0 Then
End If
Selection.EntireRow.Hidden = True
End sub
Mais ça ne fonctionne pas, quelqu'un pourrait-il m'éclairer svp ?
Pour info, le fichier comporte plusieures pages à la suite pour lesquelles je devrais répéter la même opération mais si j'ai la bonne syntaxe pour une ligne, je devrais me débrouiller pour le reste.
D'avance merci.
ps : Encore merci MIKE 31 mais ça n'a pas fonctionné ; en effet sur la ligne
If Cells(r, "AJ") Like "X" And Cells(r, "AK") Like "0" Then
j'ai eu le message : "erreur de syntaxe" mais ça m'a quand même aidé à voir le langage à utiliser...
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 308
9 janv. 2013 à 19:02
9 janv. 2013 à 19:02
Bonjour,
Cells attend comme argument un numéro de ligne et un numéro de colonne.
Cells("AK129") ne fonctionne pas. Utilise Cells(129,37) ou Range("AK129"), ça ira mieux.
Cordialement.
Cells attend comme argument un numéro de ligne et un numéro de colonne.
Cells("AK129") ne fonctionne pas. Utilise Cells(129,37) ou Range("AK129"), ça ira mieux.
Cordialement.
PLAYA2
Messages postés
15
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
28 janvier 2013
9 janv. 2013 à 19:16
9 janv. 2013 à 19:16
oK merci, je vais tenter ça ; pour le reste ça vous semble correct ???
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
9 janv. 2013 à 19:30
9 janv. 2013 à 19:30
Bonjour,
Pour détecter un 0 dans une cellule, il faut deux conditions :
- cellule non vide
et
- valeur = 0
car Excel considère qu'une cellule vide contient une valeur égale à 0
Ton code pour masquer les lignes 1:133 devient :
Pour détecter un 0 dans une cellule, il faut deux conditions :
- cellule non vide
et
- valeur = 0
car Excel considère qu'une cellule vide contient une valeur égale à 0
Ton code pour masquer les lignes 1:133 devient :
Sub xxx() If Cells(129, "AK").Value = 0 And Not IsEmpty(Cells(129, "AK").Value) Then Rows("1:133").Hidden = True Else Rows("1:133").Hidden = False End If End Sub
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
9 janv. 2013 à 19:33
9 janv. 2013 à 19:33
PS : Quelle version d'Excel utilises-tu ?
Il n'est pas normal que :
Il n'est pas normal que :
If Cells(r, "AJ") Like "X" And Cells(r, "AK") Like "0" Thendonne "Erreur de syntaxe"
PLAYA2
Messages postés
15
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
28 janvier 2013
9 janv. 2013 à 19:42
9 janv. 2013 à 19:42
Autant pour moi, je m'était trompée sur la version , c'est office 2002 (sur) et excel 1998(je crois)...
Désolée.
Désolée.
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
9 janv. 2013 à 19:47
9 janv. 2013 à 19:47
Avec Office 2002, ce doit être Excel 2002
Pour connaître la version :
Dans la ligne de menu, Cliquer sur le ? puis A propos de ...
Pour connaître la version :
Dans la ligne de menu, Cliquer sur le ? puis A propos de ...
PLAYA2
Messages postés
15
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
28 janvier 2013
9 janv. 2013 à 19:57
9 janv. 2013 à 19:57
Ok, merci beaucoup.
On peut-dire que t'es particulièrement patient...
Je verrai ça demain au boulot !!!
Bonne soirée
On peut-dire que t'es particulièrement patient...
Je verrai ça demain au boulot !!!
Bonne soirée
Salut patrice 33740,
Comme convenu, j'ai testé la macro :
If Cells(129, "AK").Value = 0 And Not IsEmpty(Cells(129, "AK").Value) Then
Rows("1:133").Hidden = True
Else
Rows("1:133").Hidden = False
End If
End Sub
Mais je reçois le message => erreur de compilation : Esle sans IF
La version excel est bien 2002, peut-être est-ce la raison ???
Qu'en penses-tu ???
D'avance merci.
Comme convenu, j'ai testé la macro :
If Cells(129, "AK").Value = 0 And Not IsEmpty(Cells(129, "AK").Value) Then
Rows("1:133").Hidden = True
Else
Rows("1:133").Hidden = False
End If
End Sub
Mais je reçois le message => erreur de compilation : Esle sans IF
La version excel est bien 2002, peut-être est-ce la raison ???
Qu'en penses-tu ???
D'avance merci.
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
Modifié par Patrice33740 le 10/01/2013 à 10:08
Modifié par Patrice33740 le 10/01/2013 à 10:08
Re,
C'est plutôt Else sans IF
Cette macro fonctionne, c'est donc que tu as oublié ou ajouté quelque chose
Si tu veux qu'on vérifie il faut donner le texte intégral
C'est plutôt Else sans IF
Cette macro fonctionne, c'est donc que tu as oublié ou ajouté quelque chose
Si tu veux qu'on vérifie il faut donner le texte intégral
Hello, c'est encore moi, cette fois j'ai un souci pour réafficher les lignes :
J'ai donc 2 macros sur le même fichier => la 1ère à partir d'action de filtrage :
Sub Macrolignes()
'
' Columns("AJ:AJ").Select
selection.AutoFilter
selection.AutoFilter Field:=1, Criteria1:="=A", Operator:=xlOr, _
Criteria2:="<>0"
ActiveWindow.ScrollColumn = 17
ActiveWindow.ScrollColumn = 16
ActiveWindow.ScrollColumn = 15
ActiveWindow.ScrollColumn = 14
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
End Sub
Et la seconde macro :
Sub Macropage()
'
'
If Cells(129, "AK").Value = 0 And Not IsEmpty(Cells(129, "AK").Value) Then
Rows("8:133").Hidden = True
Else
Rows("8:133").Hidden = False
End If
End Sub
Et pour démasquer, je le fais manuellment => Afficher lignes
Je rencontre le problème suivant : J'arrive à lancer les 2 macros à la suite sans problème mais je ne peux plus démasquer ; cela n'est possible qu'en lançant une seule des 2 macros.
Est-ce possible avec excel 2002 et si oui peut-on compiler ces 2 macros pour n'en faire plus qu'une ???
D'avance merci.
J'ai donc 2 macros sur le même fichier => la 1ère à partir d'action de filtrage :
Sub Macrolignes()
'
' Columns("AJ:AJ").Select
selection.AutoFilter
selection.AutoFilter Field:=1, Criteria1:="=A", Operator:=xlOr, _
Criteria2:="<>0"
ActiveWindow.ScrollColumn = 17
ActiveWindow.ScrollColumn = 16
ActiveWindow.ScrollColumn = 15
ActiveWindow.ScrollColumn = 14
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
End Sub
Et la seconde macro :
Sub Macropage()
'
'
If Cells(129, "AK").Value = 0 And Not IsEmpty(Cells(129, "AK").Value) Then
Rows("8:133").Hidden = True
Else
Rows("8:133").Hidden = False
End If
End Sub
Et pour démasquer, je le fais manuellment => Afficher lignes
Je rencontre le problème suivant : J'arrive à lancer les 2 macros à la suite sans problème mais je ne peux plus démasquer ; cela n'est possible qu'en lançant une seule des 2 macros.
Est-ce possible avec excel 2002 et si oui peut-on compiler ces 2 macros pour n'en faire plus qu'une ???
D'avance merci.
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
Modifié par Patrice33740 le 10/01/2013 à 11:46
Modifié par Patrice33740 le 10/01/2013 à 11:46
Re,
Tes macros ne correspondent pas à l'exposé du problème !
C'est certainement possible mais encore faudrait-il savoir ce que tu veux exactement ?
Expliques clairement la totalité du besoin :
- Quelles lignes faut-il masquer et sous quelles conditions
- Quelles sont les conditions du "démasquage"
- Comment la macro est-elle exécutée ? par un bouton, plusieurs bouton ou par un ou plusieurs événements ?
Patrice
Tes macros ne correspondent pas à l'exposé du problème !
C'est certainement possible mais encore faudrait-il savoir ce que tu veux exactement ?
Expliques clairement la totalité du besoin :
- Quelles lignes faut-il masquer et sous quelles conditions
- Quelles sont les conditions du "démasquage"
- Comment la macro est-elle exécutée ? par un bouton, plusieurs bouton ou par un ou plusieurs événements ?
Patrice
PLAYA2
Messages postés
15
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
28 janvier 2013
10 janv. 2013 à 12:15
10 janv. 2013 à 12:15
En fait, la demande initiale était de masquer certaines ligne à 0 (mais pas toutes commes celles des intitulés...) => macro 1, exécutée par un bouton
Puis, la seconde demande fût de masquer toutes les pages vides => macro 2, exécutée par un second bouton.
Mais il faudrait annuler l'une ou l'autre ou les deux macros selon la volonté de l'utilisateur...
L'idéal serait executer la macro 1 à l'ouverture du fichier, de lancer la macro 2 quand on le désire et d'annuler chaque opération selon son souhait.
Bien entendu, ce serait l'idéal mais lancer les 2 macros et réafficher serait très bien.
J'espère avoir répondu assez clairement.
Ps: j'ai remarqué qu'il faut impérativement lancer la macro 1 avant la 2 sinon ça ne fonctionne pas...
Puis, la seconde demande fût de masquer toutes les pages vides => macro 2, exécutée par un second bouton.
Mais il faudrait annuler l'une ou l'autre ou les deux macros selon la volonté de l'utilisateur...
L'idéal serait executer la macro 1 à l'ouverture du fichier, de lancer la macro 2 quand on le désire et d'annuler chaque opération selon son souhait.
Bien entendu, ce serait l'idéal mais lancer les 2 macros et réafficher serait très bien.
J'espère avoir répondu assez clairement.
Ps: j'ai remarqué qu'il faut impérativement lancer la macro 1 avant la 2 sinon ça ne fonctionne pas...
PLAYA2
Messages postés
15
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
28 janvier 2013
10 janv. 2013 à 12:26
10 janv. 2013 à 12:26
Re Patrice,
Finalement ne t'embêtes pas j'ai trouvé la solution en enlevant tous filtres lorsque je désire démasquer er relancer la macro désirée en fonctin du besoin.
Le seul hic est pour le lancement automatique de la macro 1 dès ouverture du fichier.
J'ai bien trouvé cette discussion sur le forum mais ça ne fonctionne pas ; peut-être est-ce-du à la version excel ???
Je continu les recherches....
Encore merci
Finalement ne t'embêtes pas j'ai trouvé la solution en enlevant tous filtres lorsque je désire démasquer er relancer la macro désirée en fonctin du besoin.
Le seul hic est pour le lancement automatique de la macro 1 dès ouverture du fichier.
J'ai bien trouvé cette discussion sur le forum mais ça ne fonctionne pas ; peut-être est-ce-du à la version excel ???
Je continu les recherches....
Encore merci
Mike-31
Messages postés
18352
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 décembre 2024
5 110
10 janv. 2013 à 13:17
10 janv. 2013 à 13:17
Re,
Je me permets de revenir dans la discussion, le problème n'est pas l'écriture d'un code mais de connaitre clairement les attentes dès le départ et accompagné d'un fichier exemple annoté sinon nous allons travailler et faire des propositions pour rien.
Je me permets de revenir dans la discussion, le problème n'est pas l'écriture d'un code mais de connaitre clairement les attentes dès le départ et accompagné d'un fichier exemple annoté sinon nous allons travailler et faire des propositions pour rien.
PLAYA2
Messages postés
15
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
28 janvier 2013
10 janv. 2013 à 14:08
10 janv. 2013 à 14:08
Salut Mike-31,
Merci beaucoup de t'intéresser "encore" à mes difficultés mais c'est ok ; je suis parvenue à atteindre tous mes objectifs.
Enfin pour le momment, vu que dès que je trouve une solution, mon boss me pose une nouvelle problématique !!!
Je ne m'en serais certainement pas sortie toute seule
MERCI encore à vous 2
A +
Merci beaucoup de t'intéresser "encore" à mes difficultés mais c'est ok ; je suis parvenue à atteindre tous mes objectifs.
Enfin pour le momment, vu que dès que je trouve une solution, mon boss me pose une nouvelle problématique !!!
Je ne m'en serais certainement pas sortie toute seule
MERCI encore à vous 2
A +