ouverture conditionnelle d'une feuille

  • Initiateur de la discussion Initiateur de la discussion kjin
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

kjin

XLDnaute Barbatruc
Bonjour à tous,
Quelqu'un aurait-il l'amabilité de m'éclairer sur la possibilité d'ouverture d'une feuille conditionnée par la valeur d'une cellule dans deux autres feuilles.
Si les deux valeurs sont différentes, un MsgBox doit le rappeler et la feuille rester fermée(il s'agit d'une feuille de synthèse).
Par ailleurs, comment interdire la saisie d'une valeur dans un tableau si elle est déja présente sur une autre ligne de ce même tableau.
J'ai joint un exemple un peu plus explicite.
Merci à à ce forum et à vous tous pour votre super boulot.
 

Pièces jointes

Re : ouverture conditionnelle d'une feuille

Bonsoir kjin,

Si j'ai bien compris la demande, tu trouveras ci-joint ton classeur exemple modifié comme suit :

Pour empêcher la saisie double d'un élément dans le tableau :
Code:
[SIZE=2][COLOR=GRAY][B][I]DANS LE MODULE DE CODE DE LA FEUILLE 1[/I][/B][/COLOR]

[COLOR=NAVY]Private Sub[/COLOR] Worksheet_Change([COLOR=NAVY]ByVal[/COLOR] Target [COLOR=NAVY]As[/COLOR] Range)
[COLOR=NAVY]Dim[/COLOR] Plage [COLOR=NAVY]As[/COLOR] Range
    [COLOR=NAVY]If[/COLOR] Target.Count > 1 [COLOR=NAVY]Then Exit Sub[/COLOR]   [COLOR=GREEN]'Ne gère pas la sélection de plage[/COLOR]
    [COLOR=NAVY]Set[/COLOR] Plage = Range("D6:H9")
    [COLOR=NAVY]With[/COLOR] Application
        [COLOR=NAVY]If Not[/COLOR] .Intersect(Target, Plage) [COLOR=NAVY]Is Nothing Then
            If[/COLOR] .CountIf(.Intersect(Target.EntireColumn, Plage), Target.Value) > 1 [COLOR=NAVY]Then[/COLOR]
                MsgBox "Elément déjà présent"
                .Undo
            [COLOR=NAVY]End If
        End If
    End With
End Sub[/COLOR][/SIZE]
Pour empêcher l'activation de la feuille 3 si condition non remplie :
Code:
[SIZE=2][COLOR=GRAY][B][I]DANS LE MODULE DE CODE DE LA FEUILLE 3[/I][/B][/COLOR]

[COLOR=NAVY]Private Sub[/COLOR] Worksheet_Activate()
    [COLOR=NAVY]If[/COLOR] Sheets("Feuil1").Range("C2").Value <> Sheets("Feuil2").Range("C2").Value [COLOR=NAVY]Then[/COLOR]
        Sheets("Feuil1").Activate
    [COLOR=NAVY]End If
End Sub[/COLOR][/SIZE]
Cordialement,

EDITION: Bonsoir wilfried_42, pardon je ne t'avais pas vu...
 

Pièces jointes

Dernière édition:
Bonjour Didier_mdf, bonjour le forum,
J'ai repris ta solution pour mon petit problème de double saisies dans mon tableau et là je bloque car la macro ne gère pas la sélection de plages.
En fait, je cherche à interdire la saisie d'une valeur sur une ligne de mon tableau lorsque cette valeur est déjà présente au moins une fois sur une autre ligne ailleurs dans ce même tableau.
Par contre elle peut-être saisie plusieurs fois sur une même ligne. Et là ça se complique.
Si quelqu'un peut m'aider ou au moins me mettre sur la piste

Je vous remercie
kjin
 
Re : ouverture conditionnelle d'une feuille

Bonjour kjin,

Voici le code que j'avais proposé :
Code:
[SIZE=2][COLOR=GRAY][B][I]DANS LE MODULE DE CODE DE LA FEUILLE[/I][/B][/COLOR]

[COLOR=NAVY]Private Sub[/COLOR] Worksheet_Change([COLOR=NAVY]ByVal[/COLOR] Target [COLOR=NAVY]As[/COLOR] Range)
[COLOR=GREEN]'myDearFriend!  -   www.mdf-xlpages.com[/COLOR]
[COLOR=NAVY]Dim[/COLOR] Plage [COLOR=NAVY]As[/COLOR] Range
    [COLOR=NAVY]If[/COLOR] Target.Count > 1 [COLOR=NAVY]Then Exit Sub[/COLOR]   [COLOR=GREEN]'Ne gère pas la sélection de plage[/COLOR]
    [COLOR=NAVY]Set[/COLOR] Plage = Range("D6:H9")
    [COLOR=NAVY]With[/COLOR] Application
        [COLOR=NAVY]If Not[/COLOR] .Intersect(Target, Plage) [COLOR=NAVY]Is Nothing Then
            If[/COLOR] .CountIf(.Intersect(Target.EntireColumn, Plage), Target.Value) > 1 [COLOR=NAVY]Then[/COLOR]
                MsgBox "Elément déjà présent"
                .Undo
            [COLOR=NAVY]End If
        End If
    End With
End Sub[/COLOR][/SIZE]
Je résume ce que j'ai compris :
L'utilisateur peut saisir par exemple un "X" si et seulement si, il n'y a pas un autre "X" dans la même colonne. Par contre, il peut y avoir plusieurs "X" sur la même ligne. C'est ça ? C'est pas ça ?

Maintenant, tu souhaiterais que cette macro gère la sélection de plage, OK. Mais pour quoi faire ? Dans quel cas veux-tu que la macro agisse sur une plage complète ?

Il va te falloir être plus explicite pour moi, kjin...

Cordialement,
 
Re : ouverture conditionnelle d'une feuille

Bonjour, Kjin, et vous tous.

Concernant l'interdiction de saisir deux fois la même valeur dans le même tableau, vois le fichier joint.
(Utilisation de Données, Validation)

Cordalement,

Patrick.
 

Pièces jointes

Re : ouverture conditionnelle d'une feuille

Pardon Didier_mdf, je joint le fichier qui j'espère sera plus parlant.
En fait, dans un tableau je souhaite éviter les doublons de valeurs sur plusieurs lignes, les valeurs étant affectées aléatoirement aux lignes au départ après un reset complet du tableau. Dans mon exemple, si la valeur "X" est affectée à la ligne 6, elle ne peut plus être affectée à une autre ligne; cependant, rien ne doit empêcher de saisir plusieurs fois "X" sur la ligne 6.
Mon tableau contient près de 38000 cellules
Merci pour ton aide
kjin
 

Pièces jointes

Re : ouverture conditionnelle d'une feuille

Re kjin, bonsoir Victor21,

Ok, je pense avoir compris cette fois...

Voici le code modifié en conséquence (voir fichier joint pour vérif.) :
Code:
[SIZE=2][COLOR=GRAY][B][I]DANS LE MODULE DE CODE DE LA FEUILLE[/I][/B][/COLOR]

[COLOR=NAVY]Private Sub[/COLOR] Worksheet_Change([COLOR=NAVY]ByVal[/COLOR] Target [COLOR=NAVY]As[/COLOR] Range)
[COLOR=GREEN]'myDearFriend!  -   www.mdf-xlpages.com[/COLOR]
[COLOR=NAVY]Dim[/COLOR] Plage [COLOR=NAVY]As[/COLOR] Range
[B][COLOR=NAVY]Dim[/COLOR] N [COLOR=NAVY]As Long[/COLOR][/B][COLOR=NAVY]
    If[/COLOR] Target.Count > 1 [COLOR=NAVY]Then Exit Sub[/COLOR]   [COLOR=GREEN]'Ne gère pas la sélection de plage[/COLOR]
    [COLOR=NAVY]Set[/COLOR] Plage = Range("D6:H9")
    [COLOR=NAVY]With[/COLOR] Application
        [COLOR=NAVY]If Not[/COLOR] .Intersect(Target, Plage) [COLOR=NAVY]Is Nothing Then[/COLOR]
            [B]N = .CountIf(.Intersect(Target.EntireRow, Plage), Target.Value)
            [COLOR=NAVY]If[/COLOR] .CountIf(Plage, Target.Value) > N [COLOR=NAVY]Then[/COLOR][/B]
                MsgBox "Elément déjà présent"
                .Undo
            [COLOR=NAVY]End If
        End If
    End With
End Sub[/COLOR][/SIZE]
Je n'ai pas modifié la désactivation de la macro en cas de sélection de plage.

Cordialement,
 

Pièces jointes

Re : ouverture conditionnelle d'une feuille

Bonsoir Patrick, bonsoir à tous
Je te prie de m'excuser, je n'avais pas vu ton message.
Ta proposition correspond en partie à ce que je recherche seulement je souhaite quant même avoir la possibilité de saisir une valeur plusieurs fois sur une même ligne et l'interdire sur les autres comme je l'explique dans mon fichier joint. Le problème, c'est que je ne sais pas à l'avance quelle valeur prendront les cellules
Merci encore pour tes lumières et celles des autres.
kjin
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
0
Affichages
1 K
P
Réponses
1
Affichages
891
Pacalou95
P
P
  • Question Question
Réponses
1
Affichages
3 K
Patrosso
P
B
Réponses
4
Affichages
2 K
benoitoleron
B
E
Réponses
2
Affichages
775
Evictius
E
B
Réponses
0
Affichages
2 K
Brain Box
B
Retour