Code erreur sur une macro (cause date)

Bonjour à tous,

Je suis encore bien novice en vba, et j'aurai besoin de votre aide svp...

Pr faire court, j'ai un code erreur qui s'affiche quand ma macro s'exécute, dû à ma variable "dEnr" qui est la date à laquelle le fichier a été sauvegardé pr la dernière fois...

--> j'ai une macro qui affiche la date du jour du dernier enregistrement

--> et je me sers de cette date pr faire fonctionner ma 2eme macro, or ça bogue...

Voici en PJ un fichier "essai" où vous trouverez lesdites macros... (ce fichier n'est pas du tout le véritable, ici le résultat des macros n'a pas un grand intérêt, je recherche seulement le bon déroulement des macros et les déclarations de variables... Je suis vraiment encore nule sur le sujet...!!!)

(PS: si je déclare dEnr as long, avec valeur de P1 (au lieu de O1), cela ne change rien....)

En vous remerciant d'avance pr l'intérêt que vous porterez à ma requête...

Bien cdt,

7essai-2.xlsm (25.60 Ko)

Bonjour,

Pouvez-vous préciser le processus qui vous amène au bogue ? Car chez moi quand je lance les fonctions 1 à 1 je n'ai pas de plantage particulier correspondant aux dates.

En revanche, vous faites ceci :

With Sheets("Feuil2")
                For Each cellule In Range("N10:N21")
                    If cellule.Select Then
                    Target.Offset(0, -1).Select
                    End If
                Next
End With

Quel est l'objectif ? If cellule.Select lève une erreur puisque cette instruction n'a pas de sens : vous demandez une selection, ça ne renvoie pas vrai ou faux…

Merci Saboh pour votre réponse.

Alors, la fenêtre d'erreur qui s'ouvre est celle_ci...

capture d ecran essai 2

Ma macro s'arrête après la déclaration de variables, à la ligne:

dEnr = Sheets("Feuil2").Range("O1").Value

Ensuite, le but de cette macro étant qu'une fois ma vente "x" soit passée (et enregistrée), je ne puisse plus modifier les cellules concernées en décalant la sélection à côté. Le but étant de conserver les valeurs enregistrées... (--> ces cellules ne seront plus "attrapables"!)

J'utilise le code:

With Sheets("Feuil2")
For Each cellule In Range("N10:N21")
If cellule.Select Then
Target.Offset(0, -1).Select
End If
Next
End With

en pensant que cela pouvait être bon, mais je comprends votre remarque (cela ne renvoie pas vrai ou faux)... Je ne sais pas comment l'écrire autrement...

Je pensai aussi l'écrire ainsi:

With Sheets("Feuil2")
For Each cellule In Range("N10:N21")
Target.Offset(0, -1).Select
Next
End With

mais je n'ai jamais pu tester car ma macro s'arrête avant...

Merci pr votre temps accordé...

Hum étranger, verifiez le nom de la feuille car moi je n'ai pas d'erreur sur cette ligne avec votre fichier joint.

Pour info ce n'est pas du tout comme cela qu'il faut procéder : décaler la sélection de l'utilisateur est juste confusant (pour celui qui a cliqué) et pas solide. Vous devriez utiliser Propriété Range.Locked (Excel) | Microsoft Learn

Cela bloque la cellule (modification) tout en la gardant sélectionnable/copiable etc.

Après si vous voulez une solution complète, veuillez expliquer le fonctionnement désiré car votre code n'est pas forcément très clair dans son objectif final.

Encore merci pr votre retour!

En effet, je viens de revoir mon véritable fichier, et c'est ce qui vient de me sauter aux yeux, c'est peut être bien avec le nom de la feuille que cela bloque. Je vais travailler là-dessus.

Quant à mon code pas très clair, je vous l'accorde complètement, mon fichier souche étant bien plus vaste, j'ai voulu beaucoup réduire, mais peut-être trop, mon exemple n'était pas bon, même pr moi-même!

Je vais creuser du côté de Propriété Range.Locked (Excel). Cette propriété fonctionne même si la feuille n'est pas protégée...?

Merci, bien cdt,

Je vais creuser du côté de Propriété Range.Locked (Excel). Cette propriété fonctionne même si la feuille n'est pas protégée...?

Non, bonne question. En effet il faut appeler Méthode Worksheet.Protect (Excel) | Microsoft Learn en suivant pour protéger la feuille

Sub Exemple()
  Dim maFeuille As Worksheet
  Set maFeuille = ActiveSheet

  ' verouillage
  maFeuille.Range("A1:A10").Locked = True
  maFeuille.Protect   ' "motdepasse" optionnel

  ' deverouillage
  If maFeuille.ProtectContents Then maFeuille.Unprotect ' "motdepasse" optionnel
  maFeuille.Range("A1:A10").Locked = False
End Sub

C'est parfait, je vais essayer comme ça.

Merci bcp!

Cdt,

Merci pour votre retour, content d'aider.

Bonne journée.

Rechercher des sujets similaires à "code erreur macro cause date"