Macro à corriger

Manu40300

XLDnaute Nouveau
Bonjour à tous,

Je suis en train de faire une macro et je n'ai plus qu'une chose à modifier mais étant totalement novice, j'aurai besoin d'aide. Le problème à rectifier est la partie en rouge, le reste de la macro fonctionne correctement et permet simplement de masquer diverses lignes de la feuille suivant les valeurs de certaines cellule.

Concernant la partie en rouge, Je ne sais pas si j'ai utilisé les bonnes fonctions alors voici ce que je veux que ma macro fasse exactement:
Si en cellule B18, je rentre 1
Je me retrouve en H18, jusque la ça va.
Par la suite, je voudrais que le programme vérifie que la valeur sur la colonne B pour chacune des lignes 31 à 35 est égale à la valeur de la cellule H18 multiplié par 2. Ainsi les lignes ne respectant pas la condition se masquent.

Merci pour votre aide.

Manu

Option Explicit


Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Union(Range("B10"), Range("B14"), Range("B18"), Range("B20"))) Is Nothing Then ' Condition pour que cela ne se déclenche pas si changement autre cellule
Select Case Target.Address
Case Is = Range("B10").Address
Select Case Target.Value
Case "1"
Rows("36:37").EntireRow.Hidden = True
Range("H10").Select
Case "2"
Rows("36:37").EntireRow.Hidden = False
Range("B12").Select
End Select
Case Is = Range("B14").Address
Select Case Target.Value
Case "1"
Rows("38:38").EntireRow.Hidden = True
Range("B15").Select
Case "2"
Rows("38:38").EntireRow.Hidden = False
Range("B15").Select
End Select
Case Is = Range("B18").Address
Select Case Target.Value
Case "1"
Range("H18").Select
Dim ligne As Integer
For ligne = 31 To 35
If Cells(ligne, 2) <> Cells(18, 8).Value * 0.2 Then
Rows(ligne & ":" & ligne).EntireRow.Hidden = True
Range("B20").Select
End If
Next

Case "2"
Rows("36:37").EntireRow.Hidden = False
Range("B12").Select
End Select
Case "2"
Range("31:35").EntireRow.Hidden = False
Range("B20").Select
End Select

Case Is = Range("B20").Address
Select Case Target.Value
Case "1"
Rows("30:30").EntireRow.Hidden = True
Range("H20").Select
Case "2"
Rows("30:30").EntireRow.Hidden = False
Range("B22").Select
End Select
End Select
End If
End Sub


Private Sub CommandButton1_Click()
Rows("20:40").EntireRow.Hidden = False
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro à corriger

Bonsoir Manu, bonsoir le forum,

Ci-dessous ton code à peine remanié avec des commentaires. L'utilisation de l'identation aide parfois à déceler des problèmes de codes...
Code:
Option Explicit

Sub Worksheet_Change(ByVal Target As Range)
Dim ligne As Integer

If Application.Intersect(Target, Union(Range("B10"), Range("B14"), Range("B18"), Range("B20"))) Is Nothing Then Exit Sub
Select Case Target.Address(0, 0)
    Case "B10"
        Select Case Target.Value
            Case "1"
                Rows("36:37").EntireRow.Hidden = True
                Range("H10").Select
            Case "2"
                Rows("36:37").EntireRow.Hidden = False
                Range("B12").Select
        End Select
    
    Case "B14"
        Select Case Target.Value
            Case "1"
                Rows("38:38").EntireRow.Hidden = True
                Range("B15").Select
            Case "2"
                Rows("38:38").EntireRow.Hidden = False
                Range("B15").Select
        End Select
    
    Case "B18"
        Select Case Target.Value
            Case "1"
                Range("H18").Select 'ici tu sélectionnes H18
                For ligne = 31 To 35
                    If Cells(ligne, 2).Value <> Cells(18, 8).Value * 0.2 Then
                        Rows(ligne).Hidden = True
                        Range("B20").Select 'ici tu sélectionnes B20. Est-ce logique ?
                    End If
                Next
            Case "2"
                Rows("36:37").EntireRow.Hidden = False
                Range("B12").Select
        End Select
'Cette partie en doublon fait planter ton code à cause du End Select en trop
'vérifie son utilité
'        Case "2"
'            Range("31:35").EntireRow.Hidden = False
'            Range("B20").Select
'        End Select

    Case "B20"
        Select Case Target.Value
            Case "1"
                Rows("30:30").EntireRow.Hidden = True
                Range("H20").Select
            Case "2"
                Rows("30:30").EntireRow.Hidden = False
                Range("B22").Select
        End Select
End Select
End Sub
 

tototiti2008

XLDnaute Barbatruc
Re : Macro à corriger

Bonsoir hervé, Bonsoir Robert, Bonsoir Manu,

là je "Pige" pas ??

L'indentation, c'est le fait de décaler le début des lignes (avec des tabulations) pour voir se dessiner les groupes de lignes de façon plus clair, et ça aide en effet à déceler (trouver) les erreurs
Code pas indenté
Case Is = Range("B20").Address
Select Case Target.Value
Case "1"
Rows("30:30").EntireRow.Hidden = True
Range("H20").Select
Case "2"
Rows("30:30").EntireRow.Hidden = False
Range("B22").Select
End Select
End Select

Code indenté
Code:
Select Case Target.Address(0, 0)
    Case "B10"
        Select Case Target.Value
            Case "1"
                Rows("36:37").EntireRow.Hidden = True
                Range("H10").Select
            Case "2"
                Rows("36:37").EntireRow.Hidden = False
                Range("B12").Select
        End Select
    
    Case "B14"
        Select Case Target.Value
            Case "1"
                Rows("38:38").EntireRow.Hidden = True
                Range("B15").Select
            Case "2"
                Rows("38:38").EntireRow.Hidden = False
                Range("B15").Select
        End Select
 
Dernière édition:

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Macro à corriger

Slt Toto....
Ok , mais pour le "Pauvre" hère du forum qui s'imitie chez nous ... peut être dur à ingurgiter ??? Non ?
le temps qu'il pige "code identé" ou pas , comme je disais "décalé" ....le gars prend une cuite !!! ahhahaaah !!!
et se dit ca ira mieux demain !!!!!
 

Jacou

XLDnaute Impliqué
Re : Macro à corriger

Bonsoir à tous,
dans l'énoncé du besoin, chaque cellule de B31 à B35 doit être égale à H18 * 2 et dans le code on multiplie H18 par 0,2; ce n'est pas tout à fait pareil!

ceci dit il est sûr que l'on suit plus facilement la logique en utilisant des décalages, mais les commentaires c'est pas mal non plus pour s'y retrouver.

Bonne soirée à tous
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Macro à corriger

Je voulais simplement signaler , qu'a mes débuts d'excel-vba , seul avec un bouquin en 1998 puis le forum en 2005 ....... beaucoup de choses ont évolué .... et on a vieilli !!!!!!!!!
Je fais de la formation Excel et malgrè mes connaissances vieilles de 14ans , je m'apercois que j'ai encore beaucoup de lacunes à la vue de beaucoup d'expert dans ce forum .... qui pour ma part , reste le MEILLEUR de TOUS !!!!
Alors bonne continuation à tous sur ce forum .... la progression est assurée si vous vous en donnez les moyens ( dommage que l'on ne peut pas mettre des anciens pseudos en copie ..)
Bonne nuit de reflexion et sérénité
 

Eric C

XLDnaute Barbatruc
Re : Macro à corriger

Bonsoir le forum
Bonsoir aux intervenants

Oh que oui le niveau "Vbaistique" des intervenants a évolué et l'on peut remarquer que toute les demandes ont souvent toujours une réponse. Grand MERKI à tous(tes) les contributeurs(ses) de la programmation XL qui prennent sur leur précieux temps afin de vous apporter une soluce.
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Macro à corriger

Bonsoir à tous,

Oh que oui le niveau "Vbaistique" des intervenants a évolué
Personnellement, mon niveau VBA a beaucoup évolué grâce au forum, et c'est sans doute le cas de tous ceux qui interviennent, mais dire que le niveau est plus haut qu'avant, j'ai des doutes, au vu des réalisations de certains anciens (voire regrettés) du forum, ou de sites extérieurs qui datent déjà pas mal, on ne nous a pas attendu pour apprendre à programmer ;)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 955
Membres
103 989
dernier inscrit
jralonso