Macros qui s'emballent
Bonjour chers experts VBA,
Bon, j’ai voulu simplifier la tâche aux utilisateurs de ce formulaire. Au lieu de double cliquer dans les cellules Date et Arrivée-départ, les utilisateurs n’ont qu’à cliquer dans la cellule et l’userform apparaît.
Tout fonctionnait très bien avant ces modifications ou si je ne protège pas le fichier!
Dès que je protège le fichier, j’ai ce premier bogue qui survient :
Erreur d’exécution ‘1004’
Impossible de définir la propriété NumberFormat de la classe Range.
Ce qui me renvoi à l’userform HrsMins en surlignant en jaune : Selection.NumberFormat = "[hh]:mm"
Alors, j’applique un Unprotect et protect comme me la suggéré monsieur LouReed (mais je ne suis pas trop certain si c’est Ok – ce que je sais c’est que l’erreur ‘1004’ est corrigée.
Mais c’est la que ça se gâte. Si je protège le fichier et applique le Unprotect-protect, j’ai trois bogues qui surviennent :
1. lorsque j’ai terminé d’inscrire de l’info dans la section Information supplémentaires, et que je fais Enter, c’est la cellule H7 avec l’userform calendrier qui s’active. Alors, je ferme l’userform!
2. lorsque je clique sur le bouton Envoyez votre demande, l’userforme Calendrier s’active. Alors je ferme l’userform. Je reçois les confirmations d’envoi, mais fichier d'envoi est incomplet.
3. Ensuite je reçois un autre message d’erreur ‘1004’ (la cellule ou le graphique est protégé et en lecture seule) quand je clique sur Continuer par exemple. À déblocage, cela m’envoi à Range("G20:H32").Value = "" du module 1. Ce qui est la section Information supplémentaires.
Bref, je ne m’en sors pas.
Merci pour l’intérêt que vous portez aux problèmes de ce fichier.
Bonsoir,
c'est monsieur Loureed qui vous parle
Vu sur le net, je n'ai pas essayé :
Autre solution à mon avis meilleure
Worksheets("PM_Tasks").Protect userinterfaceonly:=True, Password:="mot de passe"
permet de laisser la protection mais d'autoriser la macro à faire ce qu'elle doit faire
Peut-être que cela pourra résoudre votre problème.
Chez moi j'ai un soucis de "bibliothèque" avec votre fichier du coup il ne tourne pas...
@ bientôt
LouReeD
Bonjour,
Moi je n'ai pas WinZip et je n'ai pas l'intention de me faire suer avec cette daube qui fait couiner mon antivirus.
Prière d'utiliser une compression classique ou un hébergeur type cjoint
Nota : Et s'il y a un mot de passe, le fournir...
A+
Bonjour
merci pour vos interventions. c'est très enrichissant.
Voici le lien pour monsieur Galopin.
Bonjour monsieur LouReed
et j'intègre ça comment dans le code?
Dois-je remplacer
Private Sub Worksheet_SelectionChange(ByVal Target As Range)par
'Worksheets("PM_Tasks").Protect userinterfaceonly:=True, Password:="mot de passe"le code actuel:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
adresse = Target.Address
'ActiveSheet.Unprotect ("mlbp")
For i = 18 To 32
If adresse = "$A$" & i Then
Calendrier.Show
Cancel = True
Exit For
ElseIf adresse = "$B$" & i Or adresse = "$C$" & i Or adresse = "$D$" & i Then
HrsMins.Show
Cancel = True
Exit For
End If
Next
If adresse = "$H$7" Then
Calendrier.Show
Cancel = True
End If
'ActiveSheet.Protect ("mlbp")
End Subbonjour,
Faire un double clic sur ThisWorkbook (dans la fenêtre VBAProject)
Coller cette macro dans le module qui apparait :
Private Sub Workbook_Open()
Worksheets("PM_Tasks").Protect UserInterfaceOnly:=True, Password:="mlbp"
End SubFermer le classeur. Lors de la prochaine ouverture les macros pourront s'exécuter sans déprotection.
Nota : Lors de la phase de bricolage dans tes macros une erreur d'exécution peut provoquer une perte de mémoire momentanée d'Excel qui oublie que le UserInterfaceOnly est True. C'est rare mais si on provoque vraiment beaucoup d'erreur d'éxécution, des débordements de pile ou des erreurs de compilation, ça peut arriver...
Dans ce cas il suffit d'aller dans ThisWorbook cliquer dans la macro et d'appuyer sur la touche F5 et tout se rétabli.
Personnellement j'utilise exclusivement cette méthode qui peut s'appliquer à toutes les feuilles du classeur sans problème. Dans ce cas remplacer par cette macro :
Private Sub Workbook_Open()
Dim i%
For i = 1 To Worksheets.Count
Worksheets(i).Protect UserInterfaceOnly:=True, Password:="mlbp"
Next
End SubA+
Wow, vous êtes des génies!
merci beaucoup.
Le seul bogue restant est le #1 de mon poste original:
- 1. lorsque j’ai terminé d’inscrire de l’info dans la section Information supplémentaires, et que je fais Enter, c’est la cellule H7 avec l’userform calendrier qui s’active.
Généralement, les utilisateurs finiront de remplir cette section du formulaire. Or il serait préférable que l'userforme de la cellule H7 ne s'active pas après avoir fait Enter dans la section Information supp. afin qu'il puisse passer à la dernière étape Envoyez votre demande.
Pour éviter ce problème, j'ai laissé la cellule H32 non protégée afin que le curseur bascule vers la H32 plutôt que la H7, mais de tout évidence cela ne fonctionne pas!
Merci encore de votre aide indispensable.
Bonsoir,
c'est l'inconvénient de ce genre de formulaire bâtis sur des feuilles : On ne contrôle pas grand chose.
Les userforms sont bien plus riches en moyens de contrôle... Pour le coup il va falloir utiliser l'artillerie lourde :
Tu peux contourner le problème en modifiant ta macro de la manière suivante :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
adresse = Target.Address
Application.ScreenUpdating = False
Application.MoveAfterReturn = True
For i = 18 To 32
If adresse = "$A$" & i Then
Calendrier.Show
Cancel = True
Exit For
ElseIf adresse = "$B$" & i Or adresse = "$C$" & i Or adresse = "$D$" & i Then
HrsMins.Show
Cancel = True
Exit For
End If
Next
If adresse = "$H$7" And [H7] = "" Then
Calendrier.Show
Cancel = True
End If
If adresse = "$G$20" Then
Application.MoveAfterReturn = False
End If
End Sub... et en rajoutant cette macro :
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Address = "$G$20" Then [G15].Activate
ActiveWindow.ScrollRow = 1
End SubA+
Super monsieur Galopin01, tout fonctionne bien.
Un site indispensable et des personnes exceptionnelles.
Merci