Validation non désirées

  • Initiateur de la discussion Initiateur de la discussion ipotez
  • 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 !

ipotez

XLDnaute Occasionnel
Re Bonjour

Un membre bien sympathique m'a crée un code vba pour gérer des salles informatiques : 2 salles ne peuvent pas être disponibles pour la même date.

J'ai donc sur certaines colonnes des listes déroulantes qui me permettent de choisir les salles.

Sauf qu'il se passe un truc de ouf, quand je sélectionne une plage de cellule, toutes les cellules passent en liste déroulantes ?!?

Je vous mets le code, si vous y comprenez quelque chose ça me sauverait 😎
merci d'avance

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
   [A1].Select
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Set champ = _
      Range("d4:d34,f4:f34,k4:k34,M4:M34,R4:R34,T4:T34,y4:y34,aa4:aa34,af4:af34,ah4:ah34,am4:am34,ao4:ao34")
    PremSem = Array("1er SemestreDD", "1er SemestreCF", "1er SemestreAM", _
       "1er SemestreFL", "1er SemestreRV", "1er SemestreYB", _
       "1er SemestreOccas1", "1er SemestreOccas2", "1er SemestreOccas3", "1er SemestreOccas4", "1er SemestreOccas5")
    DeuxSem = Array("2nd SemestreDD", "2nd SemestreCF", "2nd SemestreAM", _
       "2nd SemestreFL", "2nd SemestreRV", "2nd SemestreYB", _
       "2nd SemestreOccas1", "2nd SemestreOccas2", "2nd SemestreOccas3", "2nd SemestreOccas4", "2nd SemestreOccas5")
    '---
    p = Application.Match(Sh.Name, PremSem, 0)
    If Not IsError(p) And Not Intersect(champ, Target) Is Nothing Then
      temp = ""
      ligne = Target.Row
      col = Target.Column
      For Each c In [SALLES]
        témoin = False
        For Each s In PremSem
          If c = Sheets(s).Cells(ligne, col) Then témoin = True
        Next s
        If Not témoin Then temp = temp & c.Value & ","
       Next c
       Target.Validation.Delete
       ActiveSheet.Unprotect Password:=""
       Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
       ActiveSheet.Protect Password:=""
     End If
    '---
    p = Application.Match(Sh.Name, DeuxSem, 0)
    If Not IsError(p) And Not Intersect(champ, Target) Is Nothing Then
      temp = ""
      ligne = Target.Row
      col = Target.Column
      For Each c In [SALLES]
        témoin = False
        For Each s In DeuxSem
          If c = Sheets(s).Cells(ligne, col) Then témoin = True
        Next s
        If Not témoin Then temp = temp & c.Value & ","
       Next c
       Target.Validation.Delete
       Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
     End If
End Sub
 
Dernière édition:
Re : Validation non désirées

Bonsoir,

Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Set champ = _
      Range("d4:d34,d4:d34,k4:k34,M4:M34,R4:R34,T4:T34,y4:y34,aa4:aa34,af4:af34,ah4:ah34,am4:am34,ao4:ao34")
    PremSem = Array("1er SemestreDD", "1er SemestreCF", "1er SemestreAM", _
       "1er SemestreFL", "1er SemestreRV", "1er SemestreYB", _
       "1er SemestreOccas")
    DeuxSem = Array("2nd SemestreDD", "2nd SemestreCF", "2nd SemestreAM", _
       "2nd SemestreFL", "2nd SemestreRV", "2nd SemestreYB", _
       "2nd SemestreOccas")
    '---
    p = Application.Match(Sh.Name, PremSem, 0)
    If Not IsError(p) And Not Intersect(champ, Target) Is Nothing And Target.Count = 1 Then
      temp = ""
      ligne = Target.Row
      col = Target.Column
      For Each c In [SALLES]
        témoin = False
        For Each s In PremSem
          If c = Sheets(s).Cells(ligne, col) Then témoin = True
        Next s
        If Not témoin Then temp = temp & c.Value & ","
       Next c
       Target.Validation.Delete
       ActiveSheet.Unprotect Password:=""
       Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
       ActiveSheet.Protect Password:=""
     End If
    '---
    p = Application.Match(Sh.Name, DeuxSem, 0)
    If Not IsError(p) And Not Intersect(champ, Target) Is Nothing Then
      temp = ""
      ligne = Target.Row
      col = Target.Column
      For Each c In [SALLES]
        témoin = False
        For Each s In DeuxSem
          If c = Sheets(s).Cells(ligne, col) Then témoin = True
        Next s
        If Not témoin Then temp = temp & c.Value & ","
       Next c
       Target.Validation.Delete
       Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
     End If
End Sub

http://boisgontierjacques.free.fr/fichiers/DonneesValidation/Calendrier Salles.xls

JB
 
Re : Validation non désirées

ça a fonctionné sur la feuille 1er semestreDD mais le problème se repose sur les autres feuilles.
Je ne comprends pas du tout.

De surcroit lorsque je protège les feuilles suivantes j'ai une erreur d'execution 1004 qui apparait sur
Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)

désolé
 
Dernière édition:
Re : Validation non désirées

c mieux, plus de pb de validation 😀

mais j'ai toujours l'erreur 1004 sur les feuilles second trimestre, dès que je protège la feuille et que je choisis une liste déroulante bing erreur 😕

la ligne incriminée => Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
 
Re : Validation non désirées

Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Set champ = _
      Range("d4:d34,d4:d34,k4:k34,M4:M34,R4:R34,T4:T34,y4:y34,aa4:aa34,af4:af34,ah4:ah34,am4:am34,ao4:ao34")
    PremSem = Array("1er SemestreDD", "1er SemestreCF", "1er SemestreAM", _
       "1er SemestreFL", "1er SemestreRV", "1er SemestreYB", _
       "1er SemestreOccas")
    DeuxSem = Array("2nd SemestreDD", "2nd SemestreCF", "2nd SemestreAM", _
       "2nd SemestreFL", "2nd SemestreRV", "2nd SemestreYB", _
       "2nd SemestreOccas")
    '---
    p = Application.Match(Sh.Name, PremSem, 0)
    If Not IsError(p) And Not Intersect(champ, Target) Is Nothing And Target.Count = 1 Then
      temp = ""
      ligne = Target.Row
      col = Target.Column
      For Each c In [SALLES]
        témoin = False
        For Each s In PremSem
          If c = Sheets(s).Cells(ligne, col) Then témoin = True
        Next s
        If Not témoin Then temp = temp & c.Value & ","
       Next c
       Target.Validation.Delete
       ActiveSheet.Unprotect Password:=""
       Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
       ActiveSheet.Protect Password:=""
     End If
    '---
    p = Application.Match(Sh.Name, DeuxSem, 0)
    If Not IsError(p) And Not Intersect(champ, Target) Is Nothing And Target.Count = 1 Then
      temp = ""
      ligne = Target.Row
      col = Target.Column
      For Each c In [SALLES]
        témoin = False
        For Each s In DeuxSem
          If c = Sheets(s).Cells(ligne, col) Then témoin = True
        Next s
        If Not témoin Then temp = temp & c.Value & ","
       Next c
       Target.Validation.Delete
       ActiveSheet.Unprotect Password:=""
       Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
       ActiveSheet.Protect Password:=""
     End If
End Sub
 
Re : Validation non désirées

oops, j'ai envoyé sans voir ta réponse JB, a priori ça marche😀😀😀

je test l'ensemble, en espérant que tout roule désormais.
Je le confirmerai très vite.

Je vais le nettoyer de toute info perso et le mettrai a dispo pour les membre si vous le souhaitez.

merci
Damien
 
- 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

Retour