Cacher plusieurs ligne dans excel avec VB6

Résolu
cs_FlyingAlex Messages postés 17 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 25 novembre 2010 - 3 mars 2009 à 17:29
cs_FlyingAlex Messages postés 17 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 25 novembre 2010 - 4 mars 2009 à 14:09
Bonjour a tous.
Je cherche comment faire en sorte de cacher une ligne si la valeur de deux cellules sur Excel sont négatives. Apres avoir fais quelques recherches, je suis arrive a trouver le code pour une ligne :
Sub MasqueLigne()If Range("F3").Value < 0 And Range("I3").Value < 0 Then Rows("3:3").EntireRow.Hidden True Else: Rows("3:3").EntireRow.Hidden False
End Sub

Mais j'ai besoin de l'adapter pour plus de 400 lignes, et je ne me vois pas faire 400 copier coller en changeant F3 par F4 etc...
Je ne trouve pas comment faire en sorte qu'il fasse pareil pour chaque ligne, la ligne a cacher correspondant a celle ou est la cellule. Je pensais a une boucle, mais je ne suis pas arrive a l'adapter pour des cellules.
Merci de votre aide, et si il manque quelque chose, n'hésitez pas a me le dire, c'est mon premier post.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

5 réponses

cs_FlyingAlex Messages postés 17 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 25 novembre 2010
3 mars 2009 à 21:03
Alors ça a avancé pour moi, j'ai totalement changé le code :
Sub Tris()
Dim x As IntegerDim Cell As Range<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>




For x = 3 To 20
    If Cell(x, 6) < 0 Then
        If Cell(x, 9) < 0 Then
            Rows("x:x").EntireRow.Hidden = True
            Else: Rows("x:x").EntireRow.Hidden = False
        End If
    End If
Next x
End Sub

Le problème est que maintenant, il me fais une erreur 91 "Object variable or With block variable not set"

Quelqu'un pourrait m'aider?


 
3
dmnqxl Messages postés 1 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 3 mars 2009
3 mars 2009 à 23:13
Bonsoir,

Visiblement, vous vouliez faire appel à Cells(x,y) et non à un Cell déclaré comme Range.  
De même, il me semble que Rows désigne une collection d'objets mais ne peut être utilisé comme vous l'avez fait.
Voici le code remanié que je propose (vous pouvez bien sûr modifier la définition de la plage "Plage" comme vous le souhaitez):

Sub Tris2()
Dim x As Integer
Dim Plage As Range
Dim Row As Object


Set Plage = Range("A3:J20")


For Each Row In Plage.Rows
    If Row.Cells(6) < 0 And Row.Cells(9) < 0 Then
            Row.EntireRow.Hidden = True
        Else
            Row.EntireRow.Hidden = False
    End If
Next Row

End Sub


 
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
3 mars 2009 à 23:19
Bonsoir,

tes "Cell" ne doivent pas être des Cell, mais des Cells

et supprime donc Dim Cell As Range<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

  (qui ne sert plus)
Range est un objet.et donc Cell si déclaré comme plage
 Cells(1,2) n'en est pas un ...
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
3 mars 2009 à 23:23
Et- je me suis fait avoir (dois être fatigué !...)
Je n'aurais pas répondu si j'avais vu (comme je le vois maintenant) que tu avais "posté" ta question VBA dans  Thèmes / Visual Basic 6  !!!
Tu as eu ta réponse, mais fais attention au choix du thème, dorénavant, s'il te plait ... hein ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_FlyingAlex Messages postés 17 Date d'inscription mardi 3 mars 2009 Statut Membre Dernière intervention 25 novembre 2010
4 mars 2009 à 14:09
Merci de vos réponses et désolé pour l'avoir mis au mauvais endroit, je ne voyais pas ou le mettre d'autre.
Tout marche pour le mieux.
Bonne journée a vous.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>






 
0