Utilisation de la méthode Intersect

Résolu/Fermé
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 - Modifié par Mytå le 1/08/2014 à 18:04
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 - 3 août 2014 à 14:41
Bonjour,
Je cherche à empêcher des saisies dans un planning, les week end (chaque fois que sur la ligne 3 il y a Sam ou Dim, la colonne doit rester vierge).

J'ai trouvé sur le net plusieurs possibilités pour bloquer les saisies, mais quand j'essaie de les appliquer, j'ai ce message qui apparait puis la boîte de dialogue Références - VBAProject qui s'ouvre et comme je ne sais que faire, j'annule et la plus rien ne se passe. je peux saisir ce que je veux aucun message ou autre interdiction.

Pour l'exemple, voici le dernier code essayé
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("a1:a20")) Is Nothing Then Range("b1").Select
End Sub
Est-ce quelqu'un peut m'aider svp.
Merci

8 réponses

Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 15
1 août 2014 à 17:54
Je viens de trouver : le code doit être placé dans la feuille concernée.
Il me reste à trouver le code pour interdire l'écriture dans toutes les colonnes dont la ligne 3 correspond à Sam ou dim...
0
Mytå Messages postés 2973 Date d'inscription mardi 20 janvier 2009 Statut Contributeur Dernière intervention 20 décembre 2016 942
1 août 2014 à 18:02
Salut le Forum

Voir le lien : VBA - Utilisation de la méthode Intersect

Mytå
0
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 15
1 août 2014 à 18:31
Merci Mytå,
Je mets cette page dans ma besace, elle est fort utile.
mais dans mon cas :
Ce n'est pas quand on clique sur la date, mais partout où la date d'entête correspond à Sam ou dim.

Merci quand même
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
1 août 2014 à 18:36
Bonjour,

si tu pouvais déposer un extrait de ton fichier sur cjoint.com et coller ici le lien fourni.
eric
0
Mytå Messages postés 2973 Date d'inscription mardi 20 janvier 2009 Statut Contributeur Dernière intervention 20 décembre 2016 942
Modifié par Mytå le 1/08/2014 à 18:43
Re le Forum

Essaye comme ceci :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Cells(3, Target.Column) = "Sam" Or Cells(3, Target.Column) = "Dim" Then
MsgBox "Saisie interdite ! "
Range("A1").Activate
End If
End Sub

Mytå
0
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 15
1 août 2014 à 18:53
Bonsoir Eriiic,
Ravie de m'aider de nouveau.
Comme demandé :
https://www.cjoint.com/?DHbsYeP6qDi
0
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 15
1 août 2014 à 19:15
Merci Mytå,
Mais cela ne fonctionne pas : si j'écris dans une cellule de la colonne "Sam", il ne se passe rien (j'ai bien décalé ma ligne de date en 3 - pas comme dans mon fichier).
0

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

Posez votre question
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
1 août 2014 à 20:24
Regarde si ça va :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim c As Range
    If Target.Row <= 2 Then Exit Sub
    If Not Application.Intersect(Target, Range("A:AE")) Is Nothing Then
        If Weekday(Cells(1, Target.Column), vbMonday) > 5 Then
            MsgBox " Non, c'est le WE"
        Else
            MsgBox "Click on " & Target.Address _
                   & vbLf & "Ok, c'est un " & Format(Cells(1, Target.Column), "dddd")
        End If
    End If
End Sub 

eric
0
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 15
Modifié par Mouftie le 2/08/2014 à 13:47
Bonjour Eriiic,
Merci, mais ça ne fonctionne pas comme je voudrais :
En effet, si on écrit qqc le vendredi et que l'on glisse jusqu'au vendredi suivant (par exemple) on se retrouve avec des saisies le samedi et le dimanche.
il faudrait effacer la saisie de la colonne ou les colonnes considérée(s) .
j'ai essayé :
If Weekday(Cells(1, Target.Column), vbMonday) > 5 Then  
c = Target.Address
c.ClearContents
mais ça ne fonctionne pas

Merci
0
Iama Messages postés 319 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 27 mars 2020 14
2 août 2014 à 14:45
Piste en passant
En verrouillant les cellules concerné, je pense que tu pourrais résoudre une bonne partie du problème. (saisie et cellule glissée)
0
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 15
2 août 2014 à 15:17
Oui, Iama, j'y ai pensé, mais chaque mois créé, génère des week end dans des colonnes différentes et en plus ça empêche le glisser sur plus de 5 jours, ce qui n'est pas recherché.
Merci
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
2 août 2014 à 19:12
Bonjour,

si on écrit qqc le vendredi et que l'on glisse jusqu'au vendredi suivant
Comment on peut deviner si tu ne le dis pas ?
En plus tu proposais SelectionChange qui n'a rien à voir avec ce que tu veux.
La prochaine fois dis en détail ce que tu veux, sans proposer de fausses pistes.

A tester, en espérant que tu aies tout dit :
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim pl As Range, c As Range
    Static noEvents As Boolean
    If noEvents Then Exit Sub
    Set pl = Intersect(Intersect(Target, [A:AE]), [3:65000])
    For Each c In pl
        If Weekday(Cells(1, c.Column), vbMonday) > 5 Then
            noEvents = True
            c.Value = Empty
            noEvents = False
        End If
    Next c
End Sub

https://www.cjoint.com/?DHctkvT312Z
J'ai mis le gris des we en MFC comme ça change chaque mois.
eric
0
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 15
2 août 2014 à 19:40
Bonsoir Eriiic,
C'est exactement ce que je voulais ; je croyais l'avoir dit correctement : "Il me reste à trouver le code pour interdire l'écriture dans toutes les colonnes dont la ligne 3 correspond à Sam ou dim..." (je suis désolée de t'avoir fait perdre du temps).

Je suis complètement novice avec les évènements SelectionChange ou Change ? je ne fais pas bien la différence...
C'est comme "Static noEvents As Boolean" quand j'ai fait F1 sur Static, je n'ai aucune réponse de l'aide.

En tout cas un grand merci
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
2 août 2014 à 21:52
SelectionChange : évènement qui se déclenche quand on sélectionne une cellule.
Change : évènement qui se déclenche quand on change une cellule.
D'où leur nom.

une variable Static garde sa valeur entre deux appels.
eric
0
Mouftie Messages postés 215 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 6 septembre 2020 15
3 août 2014 à 14:41
Merci bcp pour ces explications.
A bientôt ? ;>
0