Aide en VBA

Super !! C'est parfait

Encore une fois merci infiniment pour ton aide, ton temps, et tes commentaires c'est vraiment très clair.

Content que cela puisse t'aider ...

Merci ... pour tes remerciements ...

Bonjour James

Je suis à nouveau de retour sur le forum, on me demande encore de rajouter des conditions au fichier ...

Malheureusement je ne sais pas comment exprimer cette demande sous VBA

En fait, en plus de toutes les conditions déjà existantes dans le fichier il faudrait rajouter la suivante :

  • Si la cellule A18 est cochée et que n'importe qu'elle autre cellule est également cochée (parmi: A17 à A23, D19 à D23 et H21 à H23) alors il faut afficher toutes les lignes et ne rien masquer. Cette condition est-elle réalisable ?
  • Cette condition devra s'appliquer pour toutes les cellules surlignées en jaune, mais si tu fais le premier exemple je pense que j'arriverai à faire les suivants

Je te dis un grand merci d'avance.

Je remets le fichier en pièce jointe.

Je te souhaite également une bonne année 2018 à bientôt

Bonjour,

Très Bonne Année à toi aussi ...

Si je comprends bien ... ton patron a déjà des voeux ... mais, c'est à toi ... de les exaucer ...

Dès que j'ai un petit moment ... je replonge dans ton fichier et ta macro ...

Bonjour,

Très Bonne Année à toi aussi ...

Si je comprends bien ... ton patron a déjà des voeux ... mais, c'est à toi ... de les exaucer ...

On dirait bien ça n'arrête jamais.

Oh bon d'accord. Mais aide moi un tout petit peu

Comment dire dans VBA :

- Si la cellule A18 est cochée et que n'importe qu'elle autre cellule est également cochée (parmi: A17 à A23, D19 à D23 et H21 à H23) ?

Je pense pouvoir me débrouiller à partir de ça

Re,

Si tu n'as besoin que de la logique d'une macro ...

Ci-dessous, j'ai essayé de te préparer un code commenté ... le plus clair possible ...

Sub TestCondition()
Dim compte As Long
' Si la cellule A 18 est cochée
If LCase(Range("A18").Value) = "x" Then
  tot = 1
' Faire le décompte de cellules cochées
' dans les trois plages déterminées
  With Application.WorksheetFunction
      compte = .CountIf(Range("A17:A23"), "x") + _
               .CountIf(Range("D19:D23"), "x") + _
               .CountIf(Range("H21:H23"), "x")
  End With
End If
' Recalculer le nouveau total
  tot = tot + compte
' Si ce nombre est égal ou supérieur à 2,
' la condition est remplie
If tot >= 2 Then MsgBox " La condition est remplie"
End Sub

En espérant que cela t'aide ...

Re,

Si tu n'as besoin que de la logique d'une macro ...

Ci-dessous, j'ai essayé de te préparer un code commenté ... le plus clair possible ...

Sub TestCondition()
Dim compte As Long
' Si la cellule A 18 est cochée
If LCase(Range("A18").Value) = "x" Then
  tot = 1
' Faire le décompte de cellules cochées
' dans les trois plages déterminées
  With Application.WorksheetFunction
      compte = .CountIf(Range("A17:A23"), "x") + _
               .CountIf(Range("D19:D23"), "x") + _
               .CountIf(Range("H21:H23"), "x")
  End With
End If
' Recalculer le nouveau total
  tot = tot + compte
' Si ce nombre est égal ou supérieur à 2,
' la condition est remplie
If tot >= 2 Then MsgBox " La condition est remplie"
End Sub

En espérant que cela t'aide ...

Bonjour

Merci pour ton aide mais ça ne fonctionne pas... J'ai ça qui s'affiche

excel1

Comment faire ?? Je ne suis vraiment pas douée

Merci d'avance

Bonjour,

Désolé ... j'ai oublié de déclarer une variable ...

Sub TestCondition()
Dim compte As Long
Dim tot As Long
' Si la cellule A 18 est cochée
If LCase(Range("A18").Value) = "x" Then
  tot = 1
' Faire le décompte de cellules cochées
' dans les trois plages déterminées
  With Application.WorksheetFunction
      compte = .CountIf(Range("A17:A23"), "x") + _
               .CountIf(Range("D19:D23"), "x") + _
               .CountIf(Range("H21:H23"), "x")
  End With
End If
' Recalculer le nouveau total
  tot = tot + compte
' Si ce nombre est égal ou supérieur à 2,
' la condition est remplie
If tot >= 2 Then MsgBox " La condition est remplie"
End Sub

Attention ... cette macro est une macro standard ... qu'il faut placer dans Module1 ... et pas dans la Feuille ...

En espérant que cela te permette de faire tes tests ...

Bonjour,

Désolé ... j'ai oublié de déclarer une variable ...

Sub TestCondition()
Dim compte As Long
Dim tot As Long
' Si la cellule A 18 est cochée
If LCase(Range("A18").Value) = "x" Then
  tot = 1
' Faire le décompte de cellules cochées
' dans les trois plages déterminées
  With Application.WorksheetFunction
      compte = .CountIf(Range("A17:A23"), "x") + _
               .CountIf(Range("D19:D23"), "x") + _
               .CountIf(Range("H21:H23"), "x")
  End With
End If
' Recalculer le nouveau total
  tot = tot + compte
' Si ce nombre est égal ou supérieur à 2,
' la condition est remplie
If tot >= 2 Then MsgBox " La condition est remplie"
End Sub

Attention ... cette macro est une macro standard ... qu'il faut placer dans Module1 ... et pas dans la Feuille ...

En espérant que cela te permette de faire tes tests ...

Merci, du coup le message d'erreur ne s'affiche plus.

Mais il ne se passe rien c'est comme si ça ne prenait pas en compte cette partie de la macro...

J'abandonne.....

Je te remercie pour tout c'est déjà bien

Re,

C'est normal qu'il ne se passe rien ... puisqu'il s'agit d'une macro standard ... et pas d'une macro évènementielle ...

Une macro standard a besoin d'être lancée ... dans le Menu ou avec les deux touches Alt F8

Désolé d'apprendre que tu as décidé d'abandonner ...

Re,

C'est normal qu'il ne se passe rien ... puisqu'il s'agit d'une macro standard ... et pas d'une macro évènementielle ...

Une macro standard a besoin d'être lancée ... dans le Menu ou avec les deux touches Alt F8

Désolé d'apprendre que tu as décidé d'abandonner ...

Ah d'accord......

Ben tu vois je ne sais même pas ce que c'est qu'une macro standard ou événementielle

C'est vraiment trop compliqué et j'y comprends absolument rien (sauf tes explications) mais je n'arrive pas à trouver d'infos sur internet avec des explications sur le langage utilisé etc et même les tutos..... j'en trouve aucun qui corresponde à mon cas et je ne pense pas être capable à apprendre VBA toute seule! C'est pas évident

Ben tu vois je ne sais même pas ce que c'est qu'une macro standard ou évènementielle

Re,

En quelques mots ... au sujet des macros ...deux types:

1. Macro standard ... placée dans un Module standard ... que l'on lance avec Alt F8

2. Macro évènementielle ...placée dans le module de la feuille ... qui possède la particularité étonnante de ' se lancer toute seule ' justement au moment où l'utilisateur fait une certaine action ( l'évènement qui déclenche la macro ...)

En espérant que l'explication soit assez claire ...

Bonjour,

J'avais le même soucis que vous avec VBA.

C'est hier que je me suis mis a lire ce cours https://www.excel-pratique.com/fr/vba.php ,

et j'avoue que c'est mieux qu'un instructeur en classe. Merci à ceux qui ont fait ces tutos. J'ai des tonnes de livres en VBA même en vidéo mais ce cours , c'est simplement magique.

Il commence au niveau zéro. Je compte meme l'imprimer des que j'ai l'occasion.

Bonne chance!

Re,

En ce qui concerne le fait d'apprendre VBA ...

Sébastien a réalisé un Superbe travail ... qui devrait t'aider beaucoup ...

En haut de cette même page, tu peux cliquer sur le deuxième onglet COURS VBA ...

excel pratique

Merci

Je vais regarder, j'espère améliorer mon niveau et acquérir des nouvelles compétences avec ça

Merci aussi pour ton explication James.

Mais du coup n'est-il pas possible de transformer la macro standard en événementielle ? c'est ce que je recherche en fait

Merci

Je vais regarder, j'espère améliorer mon niveau et acquérir des nouvelles compétences avec ça

Merci aussi pour ton explication James.

Mais du coup n'est-il pas possible de transformer la macro standard en événementielle ? c'est ce que je recherche en fait

Re,

De rien ...

Effectivement ... il est possible de transformer la macro standard en en macro évènementielle ...

Je te ferai simplement remarquer qu'avant de le faire ... il faut la tester ... pour être sûr

1. qu'elle fonctionne ...

2. qu'elle produit bien le résultat que tu attends ...

Merci

Je vais regarder, j'espère améliorer mon niveau et acquérir des nouvelles compétences avec ça

Merci aussi pour ton explication James.

Mais du coup n'est-il pas possible de transformer la macro standard en événementielle ? c'est ce que je recherche en fait

Re,

De rien ...

Effectivement ... il est possible de transformer la macro standard en en macro évènementielle ...

Je te ferai simplement remarquer qu'avant de le faire ... il faut la tester ... pour être sûr

1. qu'elle fonctionne ...

2. qu'elle produit bien le résultat que tu attends ...

Merci

Donc ça fonctionne et du coup ça produit bien le résultat voulu !!

J'espère que le tout fonctionnera bien.

Je colle la macro à la suite :

Sub TestCondition()

Dim compte As Long

Dim tot As Long

' Si la cellule A 18 est cochée

If LCase(Range("A$18").Value) = "x" Then

tot = 1

' Faire le décompte de cellules cochées

' dans les trois plages déterminées

With Application.WorksheetFunction

compte = .CountIf(Range("A17:A23"), "x") + _

.CountIf(Range("D17:D23"), "x") + _

.CountIf(Range("H21:H23"), "x")

End With

End If

' Recalculer le nouveau total

tot = tot + compte

' Si ce nombre est égal ou supérieur à 2,

' la condition est remplie

If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

If LCase(Range("A$19").Value) = "x" Then

tot = 1

' Faire le décompte de cellules cochées

' dans les trois plages déterminées

With Application.WorksheetFunction

compte = .CountIf(Range("A17:A23"), "x") + _

.CountIf(Range("D17:D23"), "x") + _

.CountIf(Range("H21:H23"), "x")

End With

End If

' Recalculer le nouveau total

tot = tot + compte

' Si ce nombre est égal ou supérieur à 2,

' la condition est remplie

If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

If LCase(Range("D$19").Value) = "x" Then

tot = 1

' Faire le décompte de cellules cochées

' dans les trois plages déterminées

With Application.WorksheetFunction

compte = .CountIf(Range("A17:A23"), "x") + _

.CountIf(Range("D17:D23"), "x") + _

.CountIf(Range("H21:H23"), "x")

End With

End If

' Recalculer le nouveau total

tot = tot + compte

' Si ce nombre est égal ou supérieur à 2,

' la condition est remplie

If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

If LCase(Range("D$20").Value) = "x" Then

tot = 1

' Faire le décompte de cellules cochées

' dans les trois plages déterminées

With Application.WorksheetFunction

compte = .CountIf(Range("A17:A23"), "x") + _

.CountIf(Range("D17:D23"), "x") + _

.CountIf(Range("H21:H23"), "x")

End With

End If

' Recalculer le nouveau total

tot = tot + compte

' Si ce nombre est égal ou supérieur à 2,

' la condition est remplie

If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

If LCase(Range("H$21").Value) = "x" Then

tot = 1

' Faire le décompte de cellules cochées

' dans les trois plages déterminées

With Application.WorksheetFunction

compte = .CountIf(Range("A17:A23"), "x") + _

.CountIf(Range("D17:D23"), "x") + _

.CountIf(Range("H21:H23"), "x")

End With

End If

' Recalculer le nouveau total

tot = tot + compte

' Si ce nombre est égal ou supérieur à 2,

' la condition est remplie

If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

End Sub

Est-ce que tu peux la transformer en macro événement du coup ?

Merci

Re,

Je comprends qu'à partir de l'exemple initial ... tu as transformé la macro pour y intégrer tous tes cas ...

Tout d'abord ... toutes mes félicitations ...

Sub TestConditions()
Dim compte As Long
Dim tot As Long

    ' Si la cellule A 18 est cochée
    If LCase(Range("A$18").Value) = "x" Then
    tot = 1
      ' Faire le décompte de cellules cochées
      ' dans les trois plages déterminées
      With Application.WorksheetFunction
        compte = .CountIf(Range("A17:A23"), "x") + _
                 .CountIf(Range("D17:D23"), "x") + _
                 .CountIf(Range("H21:H23"), "x")
      End With
    End If
    ' Recalculer le nouveau total
    tot = tot + compte
    ' Si ce nombre est égal ou supérieur à 2,
    ' la condition est remplie
    If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

    If LCase(Range("A$19").Value) = "x" Then
    tot = 1
        ' Faire le décompte de cellules cochées
        ' dans les trois plages déterminées
        With Application.WorksheetFunction
        compte = .CountIf(Range("A17:A23"), "x") + _
                 .CountIf(Range("D17:D23"), "x") + _
                 .CountIf(Range("H21:H23"), "x")
        End With
    End If
    ' Recalculer le nouveau total
    tot = tot + compte
    ' Si ce nombre est égal ou supérieur à 2,
    ' la condition est remplie
    If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

    If LCase(Range("D$19").Value) = "x" Then
    tot = 1
        ' Faire le décompte de cellules cochées
        ' dans les trois plages déterminées
        With Application.WorksheetFunction
        compte = .CountIf(Range("A17:A23"), "x") + _
                 .CountIf(Range("D17:D23"), "x") + _
                 .CountIf(Range("H21:H23"), "x")
        End With
    End If
    ' Recalculer le nouveau total
    tot = tot + compte
    ' Si ce nombre est égal ou supérieur à 2,
    ' la condition est remplie
    If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

    If LCase(Range("D$20").Value) = "x" Then
    tot = 1
      ' Faire le décompte de cellules cochées
      ' dans les trois plages déterminées
      With Application.WorksheetFunction
      compte = .CountIf(Range("A17:A23"), "x") + _
      .CountIf(Range("D17:D23"), "x") + _
      .CountIf(Range("H21:H23"), "x")
      End With
    End If
    ' Recalculer le nouveau total
    tot = tot + compte
    ' Si ce nombre est égal ou supérieur à 2,
    ' la condition est remplie
    If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

    If LCase(Range("H$21").Value) = "x" Then
    tot = 1
      ' Faire le décompte de cellules cochées
      ' dans les trois plages déterminées
      With Application.WorksheetFunction
        compte = .CountIf(Range("A17:A23"), "x") + _
                 .CountIf(Range("D17:D23"), "x") + _
                 .CountIf(Range("H21:H23"), "x")
      End With
    End If
    ' Recalculer le nouveau total
    tot = tot + compte
    ' Si ce nombre est égal ou supérieur à 2,
    ' la condition est remplie
    If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False
End Sub

A ce stade, deux possibilités :

1. Utiliser ton code existant et ajouter simplement l'évènement qui déclenche ta macro ...

ou

2. Transformer la macro standard en macro évènementielle ...

Dans les deux cas, tu dois décider quel est l'évènement qui doit déclencher cette macro ...

Re,

Je comprends qu'à partir de l'exemple initial ... tu as transformé la macro pour y intégrer tous tes cas ...

Tout d'abord ... toutes mes félicitations ...

Sub TestConditions()
Dim compte As Long
Dim tot As Long

    ' Si la cellule A 18 est cochée
    If LCase(Range("A$18").Value) = "x" Then
    tot = 1
      ' Faire le décompte de cellules cochées
      ' dans les trois plages déterminées
      With Application.WorksheetFunction
        compte = .CountIf(Range("A17:A23"), "x") + _
                 .CountIf(Range("D17:D23"), "x") + _
                 .CountIf(Range("H21:H23"), "x")
      End With
    End If
    ' Recalculer le nouveau total
    tot = tot + compte
    ' Si ce nombre est égal ou supérieur à 2,
    ' la condition est remplie
    If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

    If LCase(Range("A$19").Value) = "x" Then
    tot = 1
        ' Faire le décompte de cellules cochées
        ' dans les trois plages déterminées
        With Application.WorksheetFunction
        compte = .CountIf(Range("A17:A23"), "x") + _
                 .CountIf(Range("D17:D23"), "x") + _
                 .CountIf(Range("H21:H23"), "x")
        End With
    End If
    ' Recalculer le nouveau total
    tot = tot + compte
    ' Si ce nombre est égal ou supérieur à 2,
    ' la condition est remplie
    If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

    If LCase(Range("D$19").Value) = "x" Then
    tot = 1
        ' Faire le décompte de cellules cochées
        ' dans les trois plages déterminées
        With Application.WorksheetFunction
        compte = .CountIf(Range("A17:A23"), "x") + _
                 .CountIf(Range("D17:D23"), "x") + _
                 .CountIf(Range("H21:H23"), "x")
        End With
    End If
    ' Recalculer le nouveau total
    tot = tot + compte
    ' Si ce nombre est égal ou supérieur à 2,
    ' la condition est remplie
    If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

    If LCase(Range("D$20").Value) = "x" Then
    tot = 1
      ' Faire le décompte de cellules cochées
      ' dans les trois plages déterminées
      With Application.WorksheetFunction
      compte = .CountIf(Range("A17:A23"), "x") + _
      .CountIf(Range("D17:D23"), "x") + _
      .CountIf(Range("H21:H23"), "x")
      End With
    End If
    ' Recalculer le nouveau total
    tot = tot + compte
    ' Si ce nombre est égal ou supérieur à 2,
    ' la condition est remplie
    If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

    If LCase(Range("H$21").Value) = "x" Then
    tot = 1
      ' Faire le décompte de cellules cochées
      ' dans les trois plages déterminées
      With Application.WorksheetFunction
        compte = .CountIf(Range("A17:A23"), "x") + _
                 .CountIf(Range("D17:D23"), "x") + _
                 .CountIf(Range("H21:H23"), "x")
      End With
    End If
    ' Recalculer le nouveau total
    tot = tot + compte
    ' Si ce nombre est égal ou supérieur à 2,
    ' la condition est remplie
    If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False
End Sub

A ce stade, deux possibilités :

1. Utiliser ton code existant et ajouter simplement l'évènement qui déclenche ta macro ...

ou

2. Transformer la macro standard en macro évènementielle ...

Dans les deux cas, tu dois décider quel est l'évènement qui doit déclencher cette macro ...

Mercii en effet je l'ai adaptée merci beaucoup en tout cas je n'aurai jamais réussi sans ton aide !

Franchement je ne sais pas quelle option choisir entre tes deux propositions, car je n'arrive pas à voir les différences entre ces deux propositions.

Dans tous les cas, l'événement qui déclenche la macro est toujours ce fameux "X". Là, la macro se déclenche s'il y a un "X" dans l'une des cases en jaune (c'est à dire A18, A19, D19, D20 ou H21). Si l'une des cases est cochée et qu'une autre case (peut importe laquelle) est également cochée toutes les lignes doivent être affichées.

Du coup, je ne sais pas quelle proposition est la plus adaptée peux tu choisir à ma place ?

Voici la macro entière pour info:

Option Explicit

Private Sub Worksheet_Activate()

Range("A18,A19,D19,D20,H21").Value = "o"

Rows("79:215").EntireRow.Hidden = False

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

' Le marquage avec un X doit afficher certaines lignes et en cacher d'autres.

' Lorsque le X n'est pas cochée toutes les lignes doivent s'afficher.

If Target.CountLarge > 1 Then Exit Sub

If Intersect(Target, Range("A18,A19,D19,D20,H21")) Is Nothing Then Exit Sub

Select Case Target.Address

Case "$A$18"

If LCase(Target.Value) = "x" Then

' Cacher

Rows("138:168").EntireRow.Hidden = False

' Afficher

Rows("79:169").EntireRow.Hidden = True

Rows("191:215").EntireRow.Hidden = True

Else

' Tout Afficher

Rows("79:215").EntireRow.Hidden = False

End If

Case "$A$19"

If LCase(Target.Value) = "x" Then

' Cacher

Rows("138:168").EntireRow.Hidden = False

' Afficher

Rows("79:169").EntireRow.Hidden = True

Rows("191:215").EntireRow.Hidden = True

Else

' Tout Afficher

Rows("79:215").EntireRow.Hidden = False

End If

Case "$D$19"

If LCase(Target.Value) = "x" Then

' Cacher

Rows("191:215").EntireRow.Hidden = False

' Afficher

Rows("79:190").EntireRow.Hidden = True

Else

' Tout Afficher

Rows("79:215").EntireRow.Hidden = False

End If

Case "$D$20"

If LCase(Target.Value) = "x" Then

' Cacher

Rows("138:169").EntireRow.Hidden = False

' Afficher

Rows("79:137").EntireRow.Hidden = True

Rows("170:215").EntireRow.Hidden = True

Else

' Tout Afficher

Rows("79:215").EntireRow.Hidden = False

End If

Case "$H$21"

If LCase(Target.Value) = "x" Then

' Cacher

Rows("138:215").EntireRow.Hidden = True

Else

' Tout Afficher

Rows("79:215").EntireRow.Hidden = False

End If

End Select

End Sub

Sub TestCondition()

Dim compte As Long

Dim tot As Long

' Si la cellule A 18 est cochée

If LCase(Range("A$18").Value) = "x" Then

tot = 1

' Faire le décompte de cellules cochées

' dans les trois plages déterminées

With Application.WorksheetFunction

compte = .CountIf(Range("A17:A23"), "x") + _

.CountIf(Range("D17:D23"), "x") + _

.CountIf(Range("H21:H23"), "x")

End With

End If

' Recalculer le nouveau total

tot = tot + compte

' Si ce nombre est égal ou supérieur à 2,

' la condition est remplie

If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

If LCase(Range("A$19").Value) = "x" Then

tot = 1

' Faire le décompte de cellules cochées

' dans les trois plages déterminées

With Application.WorksheetFunction

compte = .CountIf(Range("A17:A23"), "x") + _

.CountIf(Range("D17:D23"), "x") + _

.CountIf(Range("H21:H23"), "x")

End With

End If

' Recalculer le nouveau total

tot = tot + compte

' Si ce nombre est égal ou supérieur à 2,

' la condition est remplie

If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

If LCase(Range("D$19").Value) = "x" Then

tot = 1

' Faire le décompte de cellules cochées

' dans les trois plages déterminées

With Application.WorksheetFunction

compte = .CountIf(Range("A17:A23"), "x") + _

.CountIf(Range("D17:D23"), "x") + _

.CountIf(Range("H21:H23"), "x")

End With

End If

' Recalculer le nouveau total

tot = tot + compte

' Si ce nombre est égal ou supérieur à 2,

' la condition est remplie

If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

If LCase(Range("D$20").Value) = "x" Then

tot = 1

' Faire le décompte de cellules cochées

' dans les trois plages déterminées

With Application.WorksheetFunction

compte = .CountIf(Range("A17:A23"), "x") + _

.CountIf(Range("D17:D23"), "x") + _

.CountIf(Range("H21:H23"), "x")

End With

End If

' Recalculer le nouveau total

tot = tot + compte

' Si ce nombre est égal ou supérieur à 2,

' la condition est remplie

If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

If LCase(Range("H$21").Value) = "x" Then

tot = 1

' Faire le décompte de cellules cochées

' dans les trois plages déterminées

With Application.WorksheetFunction

compte = .CountIf(Range("A17:A23"), "x") + _

.CountIf(Range("D17:D23"), "x") + _

.CountIf(Range("H21:H23"), "x")

End With

End If

' Recalculer le nouveau total

tot = tot + compte

' Si ce nombre est égal ou supérieur à 2,

' la condition est remplie

If tot >= 2 Then Rows("79:215").EntireRow.Hidden = False

End Sub

Re,

Je te recommande d'avoir dans le module de ta Feuille

Option Explicit

Private Sub Worksheet_Activate()
Range("A18,A19,D19,D20,H21").Value = "o"
Rows("79:215").EntireRow.Hidden = False
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
' Le marquage avec un X doit afficher certaines lignes et en cacher d'autres.
' Lorsque le X n'est pas cochée toutes les lignes doivent s'afficher.
If Target.CountLarge > 1 Then Exit Sub
If Intersect(Target, Range("A18,A19,D19,D20,H21")) Is Nothing Then Exit Sub
' Lancer la macro qui teste toutes les conditions
Application.Run ("TestConditions")
End Sub

et le code de ta macro TestConditions dans le Module 1 ...

Dis-moi ...si tout fonctionne comme tu le voulais ...

Re,

Je te recommande d'avoir dans le module de ta Feuille

Option Explicit

Private Sub Worksheet_Activate()
Range("A18,A19,D19,D20,H21").Value = "o"
Rows("79:215").EntireRow.Hidden = False
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
' Le marquage avec un X doit afficher certaines lignes et en cacher d'autres.
' Lorsque le X n'est pas cochée toutes les lignes doivent s'afficher.
If Target.CountLarge > 1 Then Exit Sub
If Intersect(Target, Range("A18,A19,D19,D20,H21")) Is Nothing Then Exit Sub
' Lancer la macro qui teste toutes les conditions
Application.Run ("TestConditions")
End Sub

et le code de ta macro TestConditions dans le Module 1 ...

Dis-moi ...si tout fonctionne comme tu le voulais ...

Ça a fonctionné puis j'ai eu un message d'erreur qui est apparu:

excel1

et depuis ça ne fonctionne plus.

Faut-il que je supprime "This Workbook" ?

Re,

Dans l'ordre :

1. Dans ThisWorkbook ... rien du tout ... donc tout effacer ...

2. Dans Feuille 1 ... les deux macros événementielles

3. Dans Module 1 ... la macro TestConditions ... bien vérifier l'orthographe ...

Rechercher des sujets similaires à "aide vba"