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 01/07/2009, 14h48   #1
Invité de passage
 
Inscription : août 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 18
Points : 3
Points : 3
Par défaut Masquer lignes suivant la couleur de la police d'une cellule avec un UserForm

Bonjour, je voudrais créer une macro qui à l'aide d'un bouton " case à cocher " cacherait certaines lignes d'une base de donné.

j'ai déja crée mon bouton " case à cocher " qui me permet dans mon cas (exemple prit pour faire des tests) de masquer et d'afficher les lignes 100 à 110 lorsque j'appuie sur mon bouton

Code :
1
2
3
4
5
6
7
Private Sub CheckBox1_Click()
If CheckBox1.Value Then
Rows("100:110").EntireRow.Hidden = True
Else
Rows("100:110").EntireRow.Hidden = False
End If
End Sub
J'ai voulu adapter ce code en voulant justement masquer uniquement les cellules dans ma colonne A ou les cellules on une police noir et laisser afficher les autres cellules ou la police n'est pas noir. La macro tourne mais ne fonctionne pas exactement comme je le souhaite.

Toutes les lignes 100 à 110 s'affiche puis se masquer instantanement et je vois pas bien en tant que débutant dans les macros d'ou cela peut bien venir.

je vous mets mon morceau de code. Je penses que c'est pas grand chose à corriger c'est pour cela que je demande votre aide

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub CheckBox1_Click()
 
Dim plage As Range
Dim cel As Range
Set plage = Application.Sheets(1).Range("A100:A110")
 
For Each cel In plage
If CheckBox1.Value Then
End If
If cel.Font.ColorIndex = 1 Then
Rows("100:110").EntireRow.Hidden = True
Else
Rows("100:110").EntireRow.Hidden = False
End If
Next
End Sub
Merci d'avance pour votre soutient
smo8000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 14h52   #2
Membre Expert
 
Homme Frédéric
Développeur informatique
Inscription : juin 2009
Messages : 944
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France, Vosges (Lorraine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2009
Messages : 944
Points : 1 249
Points : 1 249
Bonjour
La macro masque ou affiche sytématiquement toutes les lignes
Code :
1
2
3
Rows("100:110").EntireRow.Hidden = True
Else
Rows("100:110").EntireRow.Hidden = False
il faudrait utliser
Code :
Cel.EntireReow.hidden=...
fgiambelluco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 14h56   #3
Membre confirmé
 
Inscription : juillet 2006
Messages : 343
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 343
Points : 285
Points : 285
Bonjour,

Essayez comme ca :

Code :
1
2
3
4
5
6
7
For Each cel In plage
    If cel.Font.ColorIndex = 1 Then
        Rows(cel.Row).EntireRow.Hidden = True
    Else
        Rows(cel.Row).EntireRow.Hidden = False
    End If
Next
Access Newbie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 14h59   #4
Invité de passage
 
Inscription : août 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 18
Points : 3
Points : 3
Si tu parle de mon premier morceau de code : lorsque je coche la case cela masque les lignes 100 à 110 et lorsque je décoche la case, les lignes 100 à 110 se réaffichent.

C'est exactement ce que je souhaite mais je voudrais incrémenter un morceau de code qui en plus de cela masque uniquement les lignes ou la police est noir et laisse les lignes ou la police et d'une autres couleur et lorsque je décoche la case toutes les lignes se réaffichent

EDIT : Accesnewbie : je vais essayer ton code
Désolé cela ne fonctionne pas
smo8000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 15h14   #5
Membre Expert
 
Homme Frédéric
Développeur informatique
Inscription : juin 2009
Messages : 944
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France, Vosges (Lorraine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2009
Messages : 944
Points : 1 249
Points : 1 249
A ce moment là, je verrai un truc comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub CheckBox1_Click()
 
Dim plage As Range
Dim cel As Range
Set plage = Application.Sheets(1).Range("A100:A110")
 
For Each cel In plage
     If CheckBox1.Value Then
        If cel.Font.ColorIndex = 1 Then
           cel.EntireRow.Hidden = True
         End if
      Else
        Rows("100:110").EntireRow.Hidden = False
     End If
Next
End Sub
fgiambelluco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 15h28   #6
Invité de passage
 
Inscription : août 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 18
Points : 3
Points : 3
Ca allair de marcher sur ma partie test, je vais voir sur ma base mais je penses qu'il n'y aura pas de soucie

Merci beaucoup
smo8000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 16h19   #7
Invité de passage
 
Inscription : août 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 18
Points : 3
Points : 3
Citation:
Envoyé par smo8000 Voir le message
Ca allair de marcher sur ma partie test, je vais voir sur ma base mais je penses qu'il n'y aura pas de soucie

Merci beaucoup
Bon ca marche niquel je t'en remercie mais petit bémol lorsque je clique sur mon bouton pour masquer les lignes cela prend même pas 1s mais lorsque je réaffiche les lignes elles se réaffichent directement mais le sablier de la souris reste bloqué environ 3 à 4s durant lesquelles la page se réactualise.

Cela est surement du aux nombres importants d'information que j'ai dans ma base
smo8000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 10h31   #8
Membre Expert
 
Homme Frédéric
Développeur informatique
Inscription : juin 2009
Messages : 944
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France, Vosges (Lorraine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2009
Messages : 944
Points : 1 249
Points : 1 249
Je pense que c'est normal, le code est pas optimisé.
En effet si la est décochée, il faut réafficher toutes les lignes de la plage, ce n'est pas la peine de scanner chaque ligne.
Il faut inverser le test et la boucle, ce qui donnerait :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub CheckBox1_Click()
 
Dim plage As Range
Dim cel As Range
Set plage = Application.Sheets(1).Range("A100:A110")
 
If CheckBox1.Value Then
     For Each cel In plage
        If cel.Font.ColorIndex = 1 Then
           cel.EntireRow.Hidden = True
         End if
      Next
Else
      Rows("100:110").EntireRow.Hidden = False
End If
End Sub
--------------
Frédéric
http://www.access-developpement.com
fgiambelluco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 10h46   #9
Inactif
 
Inscription : juin 2007
Messages : 2 055
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 2 055
Points : 2 023
Points : 2 023
Bonjour,
Une autre façon ? avec un code optimiser ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub CheckBox1_Click()
Dim Lig As Long
    If CheckBox1.Value Then
        For Lig = 100 To 110
            If Cells(Lig, 1).Font.ColorIndex = vbBlack Then
                Rows(Lig).Hidden = True
            End If
        Next Lig
    Else
        Rows("100:110").Hidden = False
    End If
End Sub
A+
LeForestier 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 +1. Il est actuellement 20h23.


 
 
 
 
Partenaires

Hébergement Web