VBA : exécuter la validation de cellule

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

chris

XLDnaute Barbatruc
Bonjour

J'ai créé un code pour améliorer la gestion des tableaux dans le cas d'une protection de la feuille.

Le principe est de tester lors d'une saisie dans un onglet protégé, si la cellule concernée est juste sous un tableau, quel qu'il soit, et le cas échéant de mettre la valeur saisie de côté, déprotéger l'onglet puis remettre la valeur saisie, ce qui allonge bien le tableau, et de rétablir la protection.

Mon souci est que si une validation existe sur une ou n colonnes du tableau, elle ne s'exécute pas.

Je cherche donc un moyen de déclencher la validation sans avoir à analyser cas par cas ses restrictions et les recontrôler dans le code.
J'ai trouvé une solution qui ne me plait pas : sendkey F2 puis enter
Outre que je ne suis pas fan des senkey, cela ne marche que si on saisit dans une seule cellule mais en cas de saisie simultanée dans plusieurs cellules, ce sendkey déclenche l'impression au lieu de la validation.

Si les XLDiens VBistes pouvaient me donner une solution... Merci
 
Bonjour

J'ai enfin trouvé le temps de me repencher sur ce problème.

Je précise que le code de job75 marche très bien dans la plupart des cas mais dans le cas qui m'occupait, les validations ne sont pas définies en dehors des tableaux d'autant qu'il y a dans certains cas des tableaux les uns sous les autres avec des règles différentes.

Les échanges avec Job75 tant sur le forum qu'en MP ont bien fait avancé mon schmilblick.

Ci-joint un classeur avec les principe retenus et le code.
A priori il fonctionne et peut donc rendre service à ceux qui utilisent les tableaux et la protection.

Si certains ont des remarques ou envie de l'améliorer...
Bonjour Chris

J'ai récupéré et adapté ton code à mon besoin (donc je l'ai très simplifié)
Voici ce que j'ai gardé
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Dim Target2, RRow As Range
Dim TblMois As ListObject        'Tableau
Dim Y                       'stockage temporaire saise

Set TblMois = Sh.ListObjects(1)
If Sh.ProtectContents = False Then Exit Sub

    'Position de la saisie
If Target.Row = TblMois.DataBodyRange.Rows.Count + TblMois.HeaderRowRange.Row Then
  'If Target.Cells(1, 1).Value = "" Then Exit Sub
    
    If Not (Intersect(Sh.Range(Sh.Cells(1, Target.Column), Sh.Cells(Sh.Cells.Rows.Count, Target.Column)), TblMois.Range) Is Nothing) Then
      Application.ScreenUpdating = False
      Sh.Unprotect 'Password:=Monpass
      Y = Target.Value
      'Application.EnableEvents = false
            
        For Each RRow In Target.Rows 'Ajout d'une ligne dans le tableau
          TblMois.ListRows.Add
        Next
        
        Set Target2 = Target.Offset(-Target.Rows.Count, 0) 'Nouvelle position de la saisie
        Target2 = Y
        Target.Offset(0, 1).Select
        'Sh.Protect UserInterfaceOnly:=True, Password:=Monpass
        Sh.Protect
        'Application.EnableEvents = True
        Application.ScreenUpdating = True
            
      End If
End If

End Sub

Par contre j'ai un peu de mal à comprendre la syntaxe de la ligne suivante :
If Not (Intersect(Sh.Range(Sh.Cells(1, Target.Column), Sh.Cells(Sh.Cells.Rows.Count, Target.Column)), TblMois.Range) Is Nothing) Then

Merci d'avance pour tes explications
 
- 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
4
Affichages
378
Retour