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é régulier
 
Date d'inscription: août 2008
Messages: 18
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 :
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 :
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
Vieux 01/07/2009, 14h52   #2
Membre émérite
 
Date d'inscription: juin 2009
Localisation: Lorraine
Messages: 842
Envoyer un message via MSN à fgiambelluco
Par défaut

Bonjour
La macro masque ou affiche sytématiquement toutes les lignes
Code :
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
Vieux 01/07/2009, 14h56   #3
Membre Confirmé
 
Date d'inscription: juillet 2006
Messages: 276
Par défaut

Bonjour,

Essayez comme ca :

Code :
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
Vieux 01/07/2009, 14h59   #4
Invité régulier
 
Date d'inscription: août 2008
Messages: 18
Par défaut

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
Vieux 01/07/2009, 15h14   #5
Membre émérite
 
Date d'inscription: juin 2009
Localisation: Lorraine
Messages: 842
Envoyer un message via MSN à fgiambelluco
Par défaut

A ce moment là, je verrai un truc comme ça :
Code :
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
Vieux 01/07/2009, 15h28   #6
Invité régulier
 
Date d'inscription: août 2008
Messages: 18
Par défaut

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
Vieux 01/07/2009, 16h19   #7
Invité régulier
 
Date d'inscription: août 2008
Messages: 18
Par défaut

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
Vieux 02/07/2009, 10h31   #8
Membre émérite
 
Date d'inscription: juin 2009
Localisation: Lorraine
Messages: 842
Envoyer un message via MSN à fgiambelluco
Par défaut

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 :
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
Vieux 02/07/2009, 10h46   #9
Inactif(ve)
 
Date d'inscription: juin 2007
Localisation: Belqique
Messages: 2 074
Par défaut

Bonjour,
Une autre façon ? avec un code optimiser ?
Code :
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
NEWS EXCELF.A.Q EXCELTUTORIELS EXCELSOURCES EXCELOUTILS EXCELLIVRES EXCELOFFICE 2010

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 07h38.


Vos questions techniques : forum d'entraide Excel - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.