message d'erreur

M

Mario

Guest
Bonsoir à tous

Après avoir insérer une formule en VBA dans un tableau Excel, une erreur est survenue lorsque l'on met la protection de la feuille.

Il s'agit de 'Erreur d'éxécution '1004';'
'Erreur définie par l'application ou par l'objet'
'Fin ou Débogage'

Sans la protection de la feuille, le programme fonctionne correctement et la formule en VBA est appliquée.
voir la macro en pj

merci
Mario. [file name=VBA_20060117213353.zip size=654]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/VBA_20060117213353.zip[/file]
 

Pièces jointes

  • VBA_20060117213353.zip
    654 bytes · Affichages: 6

pascal21

XLDnaute Barbatruc
salut
pas besoin de regarder ton fichier
si tu protège les cellules concernées par ta formule vba la macro ne peut se faire
il faut déselectionner les cellules concernées
je ne sias pas si il existe une autre parade
certainement, les ténors exceliens vont t'en dire plus

Message édité par: pascal21, à: 17/01/2006 21:46
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

Tu peux proteger ta feuille par macro comme cela tu peux rajouter le paramètre userinterfaceonly qui permet de protéger la feuille pour les users et pas pour les macros. Cela evite donc de deproteger les feuilles

J'ai du mettre un lien aujourd'hui ou hier sur ce sujet.

Bonne soirée

Message édité par: Pascal76, à: 17/01/2006 21:55
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir Mario, pascal21,

Je pense que l'utilisation de l'argument UserInterfaceOnly en verrouillant ta feuille par code VBA au lancement du classeur devrait être une solution à ton problème. Pour cela, tu enlèves ta protection de feuille manuelle et tu mets le code ci-dessous dans le module de code de ThisWorkbook :
Private Sub Workbook_Open()
        Sheets('Feuil1').Protect Password:='motdepasse', UserInterfaceOnly:=True
End Sub
Par ailleurs, sauf erreur de ma part, tu peux également te passer de ton test InChange dans ta procédure en faisant comme ça :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
      ' Si la modification concerne la colonne   10 ( col J )
      If Not Intersect(Target, Columns(10)) Is Nothing Then
            Application.EnableEvents = False
            ' alors si une date a été saisie
            If IsDate(Target) Then
                  '
                  ' on inscrit 5 une cellule à droite de Target ( Col C)
                  Target.Offset(0, -7) = 5
                  ' on inscrit   'soldé' deux cellules à droite de Target (Col L)
                  Target.Offset(0, 2) = 'soldé'
                  '
            ' si la saisie n'est pas une date ...'
            Else
                  '
                  ' message à l'utilisateur = effacement saisie + re-sélection
                  MsgBox 'la saisie ne correspond pas à une date...'
                  Target = ''
                  Target.Select
            End If
            Application.EnableEvents = True
      End If
End Sub
La propriété EnableEvents de l'objet Application définie à False permet de désactiver la gestion des évènements (et donc les traitements par procédure évènementielle) jusqu'à ce que tu rétablisses cette propriété à True (Attention toutefois de ne pas oublier ce rétablissement sous peine de rendre ton application inactive... Attention également aux éventuels plantages qui pourraient intervenir avant ce rétablissement. ).

Cordialement,

EDITION :
Oups... Bonsoir Pascal76 et bonsoir lapix ! Que de monde, que de monde... :)

Message édité par: myDearFriend!, à: 17/01/2006 22:11
 

Discussions similaires

Réponses
7
Affichages
691

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino