Problème de vie commune entre deux macros

GuillaumA

XLDnaute Occasionnel
Bonjour,
Ci-joint ma macro. Cette dernière permet de cacher des lignes en fonctions de ce que l'utilisateur tape dans deux cellules. La première I17, et la seconde I19.
La première permet, lorsqu'il y est tapé I de faire disparaître les lignes ou la valeur L est inscrite et vis et versa.
La seconde, permet de faire disparaître les lignes correspondant aux autres pays que le notre.

Mon problème est simple, les deux partie de la macro agissent sur la même feuile et bien souvent se retrouve en confrontation.
En effet si on tape la valeur I dans la cellule I17, alors les lignes pour la valeur L disparaissent. Cependant si ensuite je choisi la france par exemple dans ma deuxième cellule (I19) et que des lignes considéré comme "france" possède aussi la valeur L, ces lignes réapparaissent quand même.

Comment faire pour que les deux macros puissent vivre ensemble, sans s'annuler mutuellement ?

Cordialement,
Guillaume


A noter que cette macro se trouve en Feuil1 et joue sur le masquage/démasquage des lignes de la Feuil2.
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 

If Not Intersect(Target, Range("I17")) Is Nothing Then
With Sheets("Feuil2")
    .Rows.Hidden = False
    Select Case Range("I17")
        Case "I"
            Var = "L"
        Case "L"
            Var = "I"
    End Select
For i = 5 To .Cells(Rows.Count, 15).End(xlUp).Row
    .Rows(i).Hidden = (.Cells(i, 15) = Var Or .Cells(i, 15) = "0")
Next i
End With
End If

If Not Intersect(Target, Range("I19")) Is Nothing Then 
With Sheets("Feuil2")
    .Rows.Hidden = False
    Select Case Range("I19")
        Case "France"
            Var = "GER,POR,IRL,CR,0,"
        Case "Germany"
            Var = "FRA,POR,IRL,CR,0,"
        Case "Portugal"
            Var = "GER,FRA,IRL,CR,0,"
        Case "Ireland"
            Var = "GER,POL,FRA,CR,0,"
        Case "Czech Republic"
            Var = "GER,POL,ITA,FRA,0,"
        Case ""
            Var = "0,"
    End Select
For i = 5 To .Cells(Rows.Count, 14).End(xlUp).Row
    If InStr(Var, .Cells(i, 14) & ",") <> 0 And .Cells(i, 14) <> "" Then
         .Rows(i).Hidden = True
    End If
Next i
End With


End If
End Sub
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Problème de vie commune entre deux macros

Bonjour Guillaume,
Je ne sais pas si je pourrai t'aider(manque de temps en ce moment) mais je pense que ta demande est totalement incompréhensible pour ceux qui n'ont pas suivi tes premiers fils...;) d'oû une absence notable de réponse.
Il serai préférable de poster un fichier exemple avec quelques précisions.
Pourquoi ne pas utiliser Lien suppriméque tu as déposé, en le réactalisant ?
Bon courage.
Cordialement
 

job75

XLDnaute Barbatruc
Re : Problème de vie commune entre deux macros

Bonsoir GuillaumA, Efgé,

Pas cherché à comprendre les macros, mais peut-être cette solution.

Entre les deux blocs If/End If, remplacer :

Code:
End If

If Not Intersect(Target, Range("I19")) Is Nothing Then

par :

Code:
[COLOR="Red"]ElseIf[/COLOR] Not Intersect(Target, Range("I19")) Is Nothing Then

A+
 

Gorfael

XLDnaute Barbatruc
Re : Problème de vie commune entre deux macros

Salut GuillaumA et le forum
Pense à utiliser les bonnes balises ("#" pour le code).
Pas trop envie de me pencher sur le problème (j'avais fait une macro, mais ça ne me satisfaisait pas. Vu l'heure, faut peut-être que je ne me lance pas dans du codage ;))
Ce que je crois comprendre :
Quand modifies I17 ou I19, en fonction des 2 cellules, tu fais apparaître ou disparaître les lignes voulues.
Si c'est ça, tu ne peux traiter le cas de I17 séparément de I19 :
Tu vas boucler sur les lignes et tu vas traiter les 4 cas :
I17=Vide , I19=Vide
I17=valeur , I19=vide
I17=Vide , I19=valeur
I17=valeur , I19=valeur

Ce qui donne une macro du style :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Var1 As String, Var2 As String
Dim X As Long

If Not Intersect(Target, Union([I17], [I19])) Is Nothing Then
    With Sheets("Feuil2")
        Select Case Range("I17")
            Case "I"
                Var1 = "L"
            Case "L"
                Var1 = "I"
            Case Else
                Var1 = "0"
        End Select
        Select Case Range("I19")
            Case "France"
                Var = "GER,POR,IRL,CR,0,"
            Case "Germany"
                Var = "FRA,POR,IRL,CR,0,"
            Case "Portugal"
                Var = "GER,FRA,IRL,CR,0,"
            Case "Ireland"
                Var = "GER,POL,FRA,CR,0,"
            Case "Czech Republic"
                Var = "GER,POL,ITA,FRA,0,"
            Case ""
                Var = "0,"
        End Select
        For X = 5 To .Cells(Rows.Count, 14).End(xlUp).Row
            If "Cas ou on cache, fonction de Var1 et Var2" Then *******
                .Rows(X).Hidden = True
            Else
                .Rows(X).Hidden = False
            End If
        Next X
    End With
End If
End Sub
il reste à trouver la condition réelle de masquage de la ligne (Ligne contenant *******). Pas assez de données pour être sûr de ce qu'on veut avoir en final.

Je préfère utiliser une instruction "Like" qu'une "InStr" : tu peux utiliser des possibilités plus étendues ([A-Z], A*, *A*, etc)

J'utilise X à la place de i, Celui-ci ayant tendance à ce confondre avec 1 au cours de la nuit passée à dépanner ^^
A+
 
Dernière édition:

GuillaumA

XLDnaute Occasionnel
Re : Problème de vie commune entre deux macros

Bonjour Efgé, job75, Gorfael, le forum.
Merci pour vos réponses.


Ma faute, j'ai complètement oublié le fichier joint.
Veuillez me pardonner.

Ci-joint un exemple concret!


Ps: Je pense que tu as raison Gorfael. Qu'il faut que j'établisse les combinaisons directement. Je test ça en parallèle.

Cordialement,
Guillaume
 

Pièces jointes

  • ProblemeVieEnsemble.xls
    36 KB · Affichages: 41
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : Problème de vie commune entre deux macros

Salut GuillaumA et le forum
Juste une précision : comme ta macro et l'exemple ne font pas référence aux mêmes colonnes (14 et 15, contre H et I), je suis parti sur l'exemple.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Déclaration --------------------------
Dim X As Long
Dim F1 As Worksheet, F2 As Worksheet
'Validité du traitement ---------------
If Intersect(Target, Union([I17], [I19])) Is Nothing Then Exit Sub
'MEI ----------------------------------
Set F1 = Sheets("Feuil1")
Set F2 = Sheets("Feuil2")
'Traitement ---------------------------
    For X = 4 To F2.Cells(Rows.Count, "I").End(xlUp).Row
        If F1.[I17] = F2.Range("H" & X) Then
            Select Case F2.Range("I" & X)
                Case "ALL"
                    F2.Rows(X).Hidden = False
                Case "GER"
                    F2.Rows(X).Hidden = Not (F1.[I19] = "Germany")
                Case "POR"
                    F2.Rows(X).Hidden = Not (F1.[I19] = "Portugal")
                Case "IRL"
                    F2.Rows(X).Hidden = Not (F1.[I19] = "Ireland")
                Case "CR"
                    F2.Rows(X).Hidden = Not (F1.[I19] = "Czech Republic")
                Case "FRA"
                    F2.Rows(X).Hidden = Not (F1.[I19] = "France")
                Case Else
                    F2.Rows(X).Hidden = True
            End Select
        Else
            F2.Rows(X).Hidden = True
        End If
    Next X
End Sub
Je verrais plus un code dans ce style.
A+
 

GuillaumA

XLDnaute Occasionnel
Re : Problème de vie commune entre deux macros

Re bonjour Gorfael,
Oui j'ai changé les colonnes pour que tout tienne sur une page sans besoin de bouger l'écran =).

J'adore ta macro, j'était parti sur a peu près le même principe mais n'ayant pas des connaissances importante du code VBA, je n'aurai pu aboutir à ce que tu as fait.

Je vais de ce pas tester ta solution tout en intégrant le code des critères clés I et L.

Un grand merci à toi!
Je te tiens au courant

Cordialement,
Guillaume A.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 939
Membres
101 844
dernier inscrit
pktla