Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

erreur d'execution 1004 - erreur definie par l'application ou par l'objet.

27 views
Skip to first unread message

mimine98

unread,
Feb 28, 2021, 1:23:41 PM2/28/21
to
Bonjour,

je débute sur le vba et j'avais besoin de faire macro qui sauvegarde le détail
de la facture sur un fichier historique de factures et qui en même temps efface
certaines données.
J'ai réussi à me faire aider par les tuto trouvés sur youtube mais malgré avoir
fait exactement pareil en remplaçant les bonnes cellules , j'a tout le temps ce
message d'erreur 1004 qui me fait devenir folle !
je n'arrive pas à trouver le problème .
je suis sous excel 2010 , je sais pas si cela peut être un détail utile.

Sub Archiver()
For Each Item In Sheets("Facture").Range("A25:A36")
If Item.Value = "" Then
'ne rien faire
Else
'archiver le contenu de la ligne
ligne = Sheets("Historique_facture").Range("A2").End(xlDown).Row +
1
ligne_origine = Item.Row
Sheets("Historique_facture").Range("A" & ligne).Value =
Sheets("Facture").Range("B20").Value
Sheets("Historique_facture").Range("B" & ligne).Value =
Sheets("Facture").Range("F10").Value
Sheets("Historique_facture").Range("C" & ligne).Value =
Sheets("Facture").Range("A" & ligne_origine).Value
Sheets("Historique_facture").Range("D" & ligne).Value =
Sheets("Facture").Range("B" & ligne_origine).Value
Sheets("Historique_facture").Range("E" & ligne).Value =
Sheets("Facture").Range("G" & ligne_origine).Value
Sheets("Historique_facture").Range("F" & ligne).Value =
Sheets("Facture").Range("H" & ligne_origine).Value

End If
Next Item

' on reinitialise la facture
Sheets("Facture").Range("A25:A36").ClearContents
Sheets("Facture").Range("G25:G36").ClearContents
'calcul du numero de facture suivant
Sheets("Facture").Range("B20").Value = Sheets("Facture").Range("B20").Value
+ 1

End Sub

le fichier si cela peut aider
https://cjoint.com/c/KBCsrSfORDf

Merci d'avance pour votre aide !

MichD

unread,
Feb 28, 2021, 3:08:49 PM2/28/21
to
Le 28/02/21 à 13:23, mimine98 a écrit :
Bonjour,

La seule chose à modifier dans le code de la procédure "Archiver() est
cette ligne de code que tu modifies comme celle-ci :

ligne=Sheets("Historique_facture").Range("A:A").Find("*",LookIn:=xlFormulas,
_ SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1

Ton fichier : https://www.cjoint.com/c/KBCuioyOHij

MichD

mimine98

unread,
Mar 4, 2021, 4:32:27 AM3/4/21
to
Le dimanche 28 Février 2021 à 21:08 par MichD :
> Le 28/02/21 Í  13:23, mimine98 a écrit :
>> Bonjour,
>>
>> je débute sur le vba et j'avais besoin de faire macro qui sauvegarde
>> le détail
>> de la facture sur un fichier historique de factures et qui en même temps
>> efface
>> certaines données.
>> J'ai réussi Í  me faire aider par les tuto trouvés
>> sur youtube mais malgré avoir
>> fait exactement pareil en remplaçant les bonnes cellules , j'a tout le
>> temps ce
>> message d'erreur 1004 qui me fait devenir folle !
>> je n'arrive pas Í  trouver le problème .
>> je suis sous excel 2010 , je sais pas si cela peut être un détail
>> utile.
>>
>> Sub Archiver()
>> For Each Item In Sheets("Facture").Range("A25:A36")
>> If Item.Value = "" Then
>> 'ne rien faire
>> Else
>> 'archiver le contenu de la ligne
>> ligne =
>> Sheets("Historique_facture").Range("A2").End(xlDown).Row +
>> 1
>> ligne_origine = Item.Row
>> Sheets("Historique_facture").Range("A" & ligne).Value
>> > Sheets("Facture").Range("B20").Value
>> Sheets("Historique_facture").Range("B" & ligne).Value
>> > Sheets("Facture").Range("F10").Value
>> Sheets("Historique_facture").Range("C" & ligne).Value
>> > Sheets("Facture").Range("A" &
>> ligne_origine).Value
>> Sheets("Historique_facture").Range("D" & ligne).Value
>> > Sheets("Facture").Range("B" &
>> ligne_origine).Value
>> Sheets("Historique_facture").Range("E" & ligne).Value
>> > Sheets("Facture").Range("G" &
>> ligne_origine).Value
>> Sheets("Historique_facture").Range("F" & ligne).Value
>> > Sheets("Facture").Range("H" &
>> ligne_origine).Value
>>
>> End If
>> Next Item
>>
>> ' on reinitialise la facture
>> Sheets("Facture").Range("A25:A36").ClearContents
>> Sheets("Facture").Range("G25:G36").ClearContents
>> 'calcul du numero de facture suivant
>> Sheets("Facture").Range("B20").Value =
>> Sheets("Facture").Range("B20").Value
>> + 1
>>
>> End Sub
>>
>> le fichier si cela peut aider
>> https://cjoint.com/c/KBCsrSfORDf
>>
>> Merci d'avance pour votre aide !
>>
>>
>>
> Bonjour,
>
> La seule chose Í  modifier dans le code de la procédure
> "Archiver() est
> cette ligne de code que tu modifies comme celle-ci :
>
> ligne=Sheets("Historique_facture").Range("A:A").Find("*",LookIn:=xlFormulas,
> _ SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
>
> Ton fichier : https://www.cjoint.com/c/KBCuioyOHij
>
> MichD
Bonjour

désolée pour ma réponse tardive . Mercii merci merci ! c'est génial .

juste une petite question concernant le numero de facture . j'ai essayé de
mettre le " bon " format souhaité c'est a dire 2021-01 , 2021-02 etc... mais il
semblerait qu'il est pas content avec ce format . il me note erreur 13,
incompatibilité de type.

est ce que c'est "value" qui fait erreur ?
'calcul du numero de facture suivant
Sheets("Facture").Range("B20").Value = Sheets("Facture").Range("B20").Value
+ 1

merci par avance pour votre aide et votre efficacité !

MichD

unread,
Mar 4, 2021, 6:32:57 AM3/4/21
to

>
> juste une petite question concernant le numero de facture . j'ai essayé de
> mettre le " bon " format souhaité c'est a dire 2021-01 , 2021-02 etc... mais il
> semblerait qu'il est pas content avec ce format . il me note erreur 13,
> incompatibilité de type.
>
> est ce que c'est "value" qui fait erreur ?
> 'calcul du numero de facture suivant
> Sheets("Facture").Range("B20").Value = Sheets("Facture").Range("B20").Value
> + 1
>
> merci par avance pour votre aide et votre efficacité !
>

Cette ligne de code :
Sheets("Historique_facture").Range("F" & ligne).Value =
Sheets("Facture").Range("H" & ligne_origine).Value

Cette ligne de code copie la donnée de la feuille "Facture" de la
colonne H dans la cellule F dans la facture historique.

Il y a pour sûr un problème avec la référence à ces adresses.

A ) Dans la feuille "Facture", la seule date que tu as est en F20
Cette section de la ligne de code :
Sheets("Facture").Range("H" & ligne_origine).Value
devrait être :
Sheets("Facture").Range("F20").Value

B ) Dans la feuille "Historique facture", La colonne F représente des
montants, ce n'est pas des dates. Il faudrait ajouter une colonne
"G" pour indiquer la date des factures.
Sheets("Historique_facture").Range("G" & ligne).Value
Et tu ajoutes cette ligne de code pour obtenir la format que tu
désires
Sheets("Historique_facture").Range("G" & ligne).NumberFormat="YYYY MM

En résumé, les deux dernières lignes de code devraient s'écrire comme ceci:
Sheets("Historique_facture").Range("G" & ligne).Value =
Sheets("Facture").Range("F20").Value
Sheets("Historique_facture").Range("G" & ligne).NumberFormat = "YYYY MM"

MichD

mimine98

unread,
Mar 4, 2021, 3:46:36 PM3/4/21
to
Le dimanche 28 Février 2021 à 19:23 par mimine98 :
Bonsoir,

Merci pour votre réponse. j'ai fait la modif mais je pense que j'ai du mal
m'exprimer.

le NUMERO DE FACTURE n'est pas reconnu avec le code pour incrémenter le chiffre
suivant .

le code suivant :
Sheets("Facture").Range("B20").Value = Sheets("Facture").Range("B20").Value +
1

il calcule le numéro de facture suivant si le numéro de facture est par ex 2000,
2001 etc...

Cependant je souhaite mettre la codification suivante 2021-01 , 2021-02 etc..
2021 pour l'année et 01, 02 pour le numero de facture de l'année. il semblerait
que ce code ne fonctionne pas .

je remets la macro en entier sachant que le dernier code mets la macro en erreur
( erreur 13. ) soulignement en jaune

Sub Archiver()
For Each Item In Sheets("Facture").Range("A25:A36")
If Item.Value = "" Then
'ne rien faire
Else
'archiver le contenu de la ligne
ligne = Sheets("Historique_facture").Range("A:A").Find("*",
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
ligne_origine = Item.Row
Sheets("Historique_facture").Range("A" & ligne).Value =
Sheets("Facture").Range("B20").Value
Sheets("Historique_facture").Range("B" & ligne).Value =
Sheets("Facture").Range("F10").Value
Sheets("Historique_facture").Range("C" & ligne).Value =
Sheets("Facture").Range("A" & ligne_origine).Value
Sheets("Historique_facture").Range("D" & ligne).Value =
Sheets("Facture").Range("B" & ligne_origine).Value
Sheets("Historique_facture").Range("E" & ligne).Value =
Sheets("Facture").Range("G" & ligne_origine).Value
Sheets("Historique_facture").Range("F" & ligne).Value =
Sheets("Facture").Range("F" & ligne_origine).Value
Sheets("Historique_facture").Range("G" & ligne).Value =
Sheets("Facture").Range("F20").Value
Sheets("Historique_fac ture").Range("G" & ligne).NumberFormat =
"YYYY MM"


End If
Next Item

' on reinitialise la facture
Sheets("Facture").Range("A25:A36").ClearContents
Sheets("Facture").Range("G25:G36").ClearContents
'calcul du numero de facture suivant
Sheets("Facture").Range("B20").Value = Sheets("Facture").Range("B20").Value
+ 1
End Sub

belle soirée et merci encore !



MichD

unread,
Mar 5, 2021, 6:46:57 AM3/5/21
to


Voici ta procédure : mes commentaires sont dans le code :


'------------------------------------------------
Sub Archiver()
Dim LigneData As Long, Ligne As Long
Dim C As Range
'Il ne faut pas utiliser des expressions propres au langage VBA
'comme variable... cela peut porter à confusion. Exemple : Item
For Each C In Sheets("Facture").Range("A25:A36")
If C.Value = "" Then
'ne rien faire
Else
'archiver le contenu de la ligne
'Recherche la première ligne non occupée
Ligne = Sheets("Historique_facture").Range("A:F").Find("*",
LookIn:=xlValues, _
SearchOrder:=xlByRows,
SearchDirection:=xlPrevious).Row + 1

Sheets("Historique_facture").Range("A" & Ligne).Value =
Sheets("Facture").Range("B20").Value
Sheets("Historique_facture").Range("B" & Ligne).Value =
Sheets("Facture").Range("F10").Value
LigneData = 26 'Compteur, tes données débutent en ligne 26
dans la feuille Facture
Sheets("Historique_facture").Range("C" & Ligne).Value =
Sheets("Facture").Range("A" & LigneData).Value
Sheets("Historique_facture").Range("D" & Ligne).Value =
Sheets("Facture").Range("B" & LigneData).Value
Sheets("Historique_facture").Range("E" & Ligne).Value =
Sheets("Facture").Range("G" & LigneData).Value
Sheets("Historique_facture").Range("F" & Ligne).Value =
Sheets("Facture").Range("H" & LigneData).Value
LigneData = LigneData + 1
End If
Next

' on reinitialise la facture
Sheets("Facture").Range("A25:A36").ClearContents
Sheets("Facture").Range("G25:G36").ClearContents
'calcul du numero de facture suivant
Sheets("Facture").Range("B20").Value =
Sheets("Facture").Range("B20").Value + 1

End Sub
'------------------------------------------------

MichD



MichD

unread,
Mar 5, 2021, 7:02:51 AM3/5/21
to
Ce serait mieux comme ceci...terminer le premier café de la journée!

'--------------------------------------------
Sub Archiver()
Dim Ligne As Long
Dim C As Range
'Il ne faut pas utiliser des expressions propres au langage VBA
'comme variable... cela peut porter à confusion. Exemple : Item
For Each C In Sheets("Facture").Range("A25:A36")
If C.Value = "" Then
'ne rien faire
Else
'archiver le contenu de la ligne
'Recherche la première ligne non occupée
Ligne = Sheets("Historique_facture").Range("A:F").Find("*",
LookIn:=xlValues, _
SearchOrder:=xlByRows,
SearchDirection:=xlPrevious).Row + 1
Sheets("Historique_facture").Range("A" & Ligne).Value =
Sheets("Facture").Range("B20").Value
Sheets("Historique_facture").Range("B" & Ligne).Value =
Sheets("Facture").Range("F10").Value
Sheets("Historique_facture").Range("C" & Ligne).Value =
Sheets("Facture").Range("A" & C.Row).Value
Sheets("Historique_facture").Range("D" & Ligne).Value =
Sheets("Facture").Range("B" & C.Row).Value
Sheets("Historique_facture").Range("E" & Ligne).Value =
Sheets("Facture").Range("G" & C.Row).Value
Sheets("Historique_facture").Range("F" & Ligne).Value =
Sheets("Facture").Range("H" & C.Row).Value
LigneData = LigneData + 1
End If
Next

' on reinitialise la facture
Sheets("Facture").Range("A25:A36").ClearContents
Sheets("Facture").Range("G25:G36").ClearContents
'calcul du numero de facture suivant
Sheets("Facture").Range("B20").Value =
Sheets("Facture").Range("B20").Value + 1

End Sub
'--------------------------------------------------------

MichD



mimine98

unread,
Mar 5, 2021, 9:40:34 AM3/5/21
to
Le vendredi 05 Mars 2021 à 13:02 par MichD :
> Ce serait mieux comme ceci...terminer le premier café de la
> journée!
>
> '--------------------------------------------
> Sub Archiver()
> Dim Ligne As Long
> Dim C As Range
> 'Il ne faut pas utiliser des expressions propres au langage VBA
> 'comme variable... cela peut porter Í  confusion. Exemple : Item
> For Each C In Sheets("Facture").Range("A25:A36")
> If C.Value = "" Then
> 'ne rien faire
> Else
> 'archiver le contenu de la ligne
> 'Recherche la première ligne non occupée
> Ligne =
> Sheets("Historique_facture").Range("A:F").Find("*",
> LookIn:=xlValues, _
> SearchOrder:=xlByRows,
> SearchDirection:=xlPrevious).Row + 1
> Sheets("Historique_facture").Range("A" & Ligne).Value
> Sheets("Facture").Range("B20").Value
> Sheets("Historique_facture").Range("B" & Ligne).Value
> Sheets("Facture").Range("F10").Value
> Sheets("Historique_facture").Range("C" & Ligne).Value
> Sheets("Facture").Range("A" & C.Row).Value
> Sheets("Historique_facture").Range("D" & Ligne).Value
> Sheets("Facture").Range("B" & C.Row).Value
> Sheets("Historique_facture").Range("E" & Ligne).Value
> Sheets("Facture").Range("G" & C.Row).Value
> Sheets("Historique_facture").Range("F" & Ligne).Value
> Sheets("Facture").Range("H" & C.Row).Value
> LigneData = LigneData + 1
> End If
> Next
>
> ' on reinitialise la facture
> Sheets("Facture").Range("A25:A36").ClearContents
> Sheets("Facture").Range("G25:G36").ClearContents
> 'calcul du numero de facture suivant
> Sheets("Facture").Range("B20").Value
> Sheets("Facture").Range("B20").Value + 1
>
> End Sub
> '--------------------------------------------------------
>
> MichD
Merci MichD je viens de la recopier dans mon module sur mon fichier .

cependant l'avez vous tester car j'ignore pourquoi mais cette partie dessous se
met en rouge et du coup encore un message incompréhensible pour les débutants
(lol) :

Ligne = Sheets("Historique_facture").Range("A:F").Find("*",
LookIn:=xlValues, _
SearchOrder:=xlByRows,
SearchDirection:=xlPrevious).Row + 1

peut être que c'est mon excel ? je suis sure que ça se joue à pas grand chose !
grrrrr

MichD

unread,
Mar 5, 2021, 11:00:20 AM3/5/21
to

Je te retourne le fichier afin de copier-coller correctement la
procédure. Oui, je l'ai testée.

https://www.cjoint.com/c/KCfp66kY2xj

MichD

0 new messages