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
- Dépassement de capacité vba ✓ - Forum Excel
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
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....