VBA : subtilité inconnue et incompréhensible
Résolu
zaXoular
-
lermite222 Messages postés 9042 Statut Contributeur -
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour à tous !
J'essaye de développer une petit base de donnée en VBA sous Excel 2010 et je suis confronté au problème suivant :
Dans l'une des feuilles j'ai attribué à une cellule le nom : MDP
Lorsque que j'exécute le code suivant, tout fonctionne parfaitement :
Par contre, ce même code dans un Private Sub Worksheet_Activate(), me donne une erreur 1004 de type : la méthode range de l'objet _worsheet a échouer....
La macro bloque sur le range("MDP"). J'ai bien vérifier que l'étendue du nom était bien sur l'ensemble du classeur.
Je suis débutant en VBA et je ne comprend pas la subtilité entre les deux cas. Cela fait deux jours que j'écume les forum et que je reste sans réponse.
Je suis donc preneur de toutes information utiles pour mieux comprendre ce qui m'arrive :-)
Merci d'avance !
J'essaye de développer une petit base de donnée en VBA sous Excel 2010 et je suis confronté au problème suivant :
Dans l'une des feuilles j'ai attribué à une cellule le nom : MDP
Lorsque que j'exécute le code suivant, tout fonctionne parfaitement :
Private Sub Workbook_Open()
MsgBox "bonjour, le mot de passe est : " & Range("MDP").Value
ActiveSheet.Unprotect (Range("MDP").Value)
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("Feuil1").Select
ActiveSheet.Protect Password:=Range("MDP").Value
End Sub
Par contre, ce même code dans un Private Sub Worksheet_Activate(), me donne une erreur 1004 de type : la méthode range de l'objet _worsheet a échouer....
Private Sub Worksheet_Activate()
MsgBox "bonjour, le mot de passe est : " & Range("MDP").Value
ActiveSheet.Unprotect (Range("MDP").Value)
End Sub
La macro bloque sur le range("MDP"). J'ai bien vérifier que l'étendue du nom était bien sur l'ensemble du classeur.
Je suis débutant en VBA et je ne comprend pas la subtilité entre les deux cas. Cela fait deux jours que j'écume les forum et que je reste sans réponse.
Je suis donc preneur de toutes information utiles pour mieux comprendre ce qui m'arrive :-)
Merci d'avance !
A voir également:
- VBA : subtilité inconnue et incompréhensible
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
2 réponses
Bonjour,
Les transferts entre feuille ne sont pas si évident, essaye avec..
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Les transferts entre feuille ne sont pas si évident, essaye avec..
Private Sub Worksheet_Activate()
dim MotPasse as variant
MotPasse = Sheets("LeNomDeLaFeuille").Range("MDP").Value
MsgBox "bonjour, le mot de passe est : " & MotPasse
ActiveSheet.Unprotect (MotPasse )
End Sub
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Re,
Tu confond variable globale et Nom de plage.
Une plage de cellule n'est accessible que dans la feuille où elle est située.
Sauf si tu nomme le chemin complet de la plage, c'est ce que je t'ai montrer.
Une Variable globale c'est dans un module général et doit être déclarée.
Public MaVariable As String
A+
EDIT :
Exemple :
Dans un module général tu met
et dans le Open..
et dans les Activate des feuilles,
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Tu confond variable globale et Nom de plage.
Une plage de cellule n'est accessible que dans la feuille où elle est située.
Sauf si tu nomme le chemin complet de la plage, c'est ce que je t'ai montrer.
Une Variable globale c'est dans un module général et doit être déclarée.
Public MaVariable As String
A+
EDIT :
Exemple :
Dans un module général tu met
Public MotDePasse As String
et dans le Open..
Private Sub Workbook_Open()
MotDePasse = Range("MDP").Value
MsgBox "bonjour, le mot de passe est : " & MotDePasse
ActiveSheet.Unprotect MotDePasse
End Sub
et dans les Activate des feuilles,
Private Sub Worksheet_Activate()
MsgBox "bonjour, le mot de passe est : " & MotDePasse
ActiveSheet.Unprotect MotDePasse
End Sub
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Effectivement j'ai du faire comme ça pour m'en sortir,
par contre je n'ai toujours pas compris pourquoi à l'intérieur d'une worksheets on ne peut pas pointer directement sur une variable déclarer au niveau global dans le classeur.
Je suppose que c'est là une preuve des subtilités du language VBA et des logiciels microsoft.
Encore Merci de votre aide....