Erreur 1004 Définie par l'application ou par l'objet

Fermé
Noem_3469 Messages postés 4 Date d'inscription vendredi 31 mars 2023 Statut Membre Dernière intervention 1 avril 2023 - Modifié le 31 mars 2023 à 11:16
yg_be Messages postés 23306 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 novembre 2024 - 19 avril 2023 à 22:09

Bonjour à tous ! 

Dans le cadre d'un suivi de traçabilité dans mon entreprise, je souhaiterais utiliser Excel VBA, je n'ai que quelques notions. Plusieurs fichiers semblables doivent être développés, et j'ai la même erreur qui s'affiche sur tous au bout de quelques jours.

Le but est d'afficher un formulaire à l'ouverture du fichier que les opérateurs rempliraient, qui s'enregistrerait tout seul, puis qui se fermerait. Egalement, le fichier ne doit pas pouvoir être modifiable afin d'éviter les erreurs de maladresses qui pourraient effacer des données.

Le fichier fonctionne pendant plusieurs jours, puis soudainement le message "Erreur 1004 Définie par l'application ou par l'objet" apparaît, sans que rien n'ai été modifié dans le code ni dans le tableur, les opérateurs n'ont pas encore accès au fichier.

Lorsque j'appuie sur "Débogage", celui-ci me renvoie à la troisième ligne ici, mais à d'autres lignes sur d'autres fichiers : 
 

Private Sub CommandButton1_Click()
derligne = Sheets("Feuil1").Range("A456541").End(xlUp).Row + 1
Sheets("Feuil1").Cells(derligne, 1) = UserForm1.ComboBox1
Sheets("Feuil1").Cells(derligne, 2) = UserForm1.TextBox1
Sheets("Feuil1").Cells(derligne, 3) = UserForm1.TextBox2
Sheets("Feuil1").Cells(derligne, 4) = UserForm1.TextBox3
Sheets("Feuil1").Cells(derligne, 5) = UserForm1.ComboBox2
Sheets("Feuil1").Cells(derligne, 6) = UserForm1.TextBox4
Sheets("Feuil1").Cells(derligne, 7) = UserForm1.TextBox5
Sheets("Feuil1").Cells(derligne, 8) = UserForm1.TextBox6
Sheets("Feuil1").Cells(derligne, 9) = UserForm1.TextBox7
Sheets("Feuil1").Cells(derligne, 10) = UserForm1.TextBox8
Unload UserForm1

ActiveWorkbook.Save
Application.Quit

End Sub

A quoi cette erreur est-elle due et comment puis-je la régler s'il vous plait ??

Merci ! 

A voir également:

5 réponses

Niamorii Messages postés 44 Date d'inscription samedi 23 mai 2020 Statut Membre Dernière intervention 1 avril 2023
31 mars 2023 à 12:01

Bonjour,

L'erreur 1004 est une erreur assez générique dans Excel VBA, et elle peut être causée par diverses raisons. Dans votre cas, il semble que l'erreur se trouve dans cette ligne :
 

derligne = Sheets("Feuil1").Range("A456541").End(xlUp).Row + 1

L'erreur peut être due à une mauvaise référence de cellule. Vous avez utilisé la référence "A456541", qui n'est pas une référence de cellule valide. Le numéro de ligne maximal dans Excel est 1048576. Vous devriez utiliser une référence de cellule valide, par exemple "A1048576" pour trouver la dernière ligne non vide :
 

derligne = Sheets("Feuil1").Range("A1048576").End(xlUp).Row + 1

En changeant cette ligne, l'erreur devrait disparaître.
Dites-moi si cela fonctionne.

Cordialement


0
Noem_3469 Messages postés 4 Date d'inscription vendredi 31 mars 2023 Statut Membre Dernière intervention 1 avril 2023
31 mars 2023 à 13:59

Bonjour Niamorii ! 

Je vous remercie de votre réponse. Après modification, le même message d'erreur s'affiche, et le débogage m'indique toujours la ligne.

Sheets("Feuil1").Cells(derligne, 1) = UserForm1.ComboBox1

 "cells(derligne, 1)" indique bien la dernière ligne vide, et "userform1.combobox1" m'indique bien l'option sélectionnée...

Ce code fonctionnait bien pendant quelques jours, puis cette erreur apparaît, je ne comprends pas à quoi cela peut être dû.

Cordialement,

0
NonoM45 Messages postés 502 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 2 novembre 2024
Modifié le 31 mars 2023 à 15:21

Bonjour le fil

Non @Niamorii, la référence de cellule est bien valide !

456.541 < 1.048.576

Donc @Noem_3469 si c'est bien cette ligne qui pose problème

Sheets("Feuil1").Cells(derligne, 1) = UserForm1.ComboBox1

Soit la feuille nommée "Feuil1" n'existe pas, soit c'est le Combobox1
Si les deux sont Ok, essayer alors

Sheets("Feuil1").Cells(derligne, 1).Value = UserForm1.ComboBox1.Value

Au lieu de référencer uniquement  2 objets

A+

0
Noem_3469 Messages postés 4 Date d'inscription vendredi 31 mars 2023 Statut Membre Dernière intervention 1 avril 2023
31 mars 2023 à 16:02

Bonjour NonoM45,

Je vous remercie pour votre proposition de solution ! Malheureusement j'ai toujours la même erreur qui s'affiche, et toujours à la même ligne...

J'ai vérifié, "Feuil1" existe bien, "ComboBox1" aussi. Ce que je ne comprends pas, c'est que le code fonctionne bien plusieurs fois, puis il bug... 

Cordialement,

0
NonoM45 Messages postés 502 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 2 novembre 2024
Modifié le 1 avril 2023 à 04:45

Bonjour,

"Ce que je ne comprends pas, c'est que le code fonctionne bien plusieurs fois, puis il bug... "
Si vous ne nous dites pas tout aussi...

Alors essayez plutôt ceci

derligne = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1

A+

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Noem_3469 Messages postés 4 Date d'inscription vendredi 31 mars 2023 Statut Membre Dernière intervention 1 avril 2023
1 avril 2023 à 14:55

Bonjour,

Désolée je n'ai pas été très claire aha ! 

J'ai essayé votre code, qui n'a pas fonctionné non plus, ... Du coup j'ai essayé en enlevant le code correspondant à protéger les données déjà entrées, et cela fonctionne. Je pense que le problème venait de là, si éventuellement vous pouviez m'aider ^^'

Le but étant de bloquer la modification des données déjà entrées (les opérateurs entrent leur données du jour dans le formulaire, puis ils ne doivent pas pouvoir les modifier), j'ai trouvé le code suivant, que j'ai entré dans "Feuil1" : 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Selection, Range("A1:P30")) Is Nothing Then
If Target <> "" Then
ActiveSheet.Unprotect Password:="open"
Target.Locked = True
ActiveSheet.Protect Password:="open"
End If
End If
End Sub

Concrètement, toute la feuille est à protéger.

En enlevant ce code, et en enlevant la protection de la feuille, le code entrant les données du formulaire fonctionne.

Avez-vous une idée de ce qui peut bloquer ?

Merci encore à vous !

0
Utilisateur anonyme
2 avril 2023 à 09:11

Bonjour

je n'ai pas la solution à votre problème, cependant, je tiens à rétablir une vérité

Désolée je n'ai pas été très claire aha !

Vous avez été parfaitement claire dès votre premier message, deux fois en plus

et j'ai la même erreur qui s'affiche sur tous au bout de quelques jours.

Puis

Le fichier fonctionne pendant plusieurs jours, puis soudainement le message "Erreur 1004 Définie par l'application ou par l'objet" apparaît, sans que rien n'ai été modifié dans le code ni dans le tableur,

C'est donc NonoM45 qui n'a pas lu correctement.

-1
NonoM45 Messages postés 502 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 2 novembre 2024 > Utilisateur anonyme
19 avril 2023 à 19:28

Bonjour Wish à 2 balles, tu veux rétablir quelle vérité sérieux... MDR

La preuve avec la réponse suivante de Noem_349

Je ne vois pas ce que je n'ai pas lu ou compris correctement, j'aimerai bien que tu m'expliques... si tu en es capable

0
Utilisateur anonyme > NonoM45 Messages postés 502 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 2 novembre 2024
19 avril 2023 à 21:55

Le premier avril, tu as écrit

"Ce que je ne comprends pas, c'est que le code fonctionne bien plusieurs fois, puis il bug... "
Si vous ne nous dites pas tout aussi...

Or, elle avait bien décrit ce comportement dès son premier message par les 2 phrases que j'ai citées, ce qui implique que tu ne l'avais pas bien lu.

Effectivement Noem_349 a cru ne pas avoir été assez précise suite à ton reproche injustifié.

0
yg_be Messages postés 23306 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 novembre 2024 1 550 > Utilisateur anonyme
19 avril 2023 à 22:09

Il s'agit d'un forum de collaboration où chacun contribue pour arriver à une solution. 

Il est normal qu'il y ait des malentendus, peu importe qui en est responsable.  Personne n'est ici pour montrer qu'il a raison et pour avoir le dernier mot.

Il me semble totalement stérile de débarquer dans une discussion sereine pour arbitrer et distribuer des bons et des mauvais points.  Cela ne peut que créer des tensions.

1
yg_be Messages postés 23306 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 novembre 2024 1 550
2 avril 2023 à 11:04

bonjour,

Le code ne peut sans doute pas fonctionner si la feuille est protégée.  La logique du code qui fait la protection me semble très bizarre.  Un code "trouvé" ne fait pas toujours ce qu'on imagine.

1