Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 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
 
Bonjour CortoXls, le forum,
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
Cette instruction est équivalente à :
VB:
If Not (Intersect(Target(1).EntireColumn, TblMois.Range) Is Nothing) Then
A+
 
- 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
381
Réponses
6
Affichages
159
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…