Erreur d'exécution 1004

Salut a toutes et tous,

J'ai écrit un code pour automatiser l'archivage et la numérotation d'une facture. J'ai été loque et h2so4 m'a aidé à réécrire le code. Je suis malheureusement encore bloqué. j'ai lancé l'exécution de la macro et la 1ere ligne de la partie du code qui doit me permettre d'archiver lés éléments de ma facture me renvoie une erreur d'exécution 1004 : erreur définie par l'application ou par l'objet". Quand je lance le débogage, la macro me signale que ligne=1048577. Or la ligne que vise mon code renvoie à la ligne 5 de ma feuille "ARCHIVESFACT":

Sheets("ARCHIVESFACT").Range("A" & ligne).Value = Sheets("FACTURE").Range("G12").Value  'N°facture

Question : qu'est ce que je dois faire pour que la ligne du code renvoie à la ligne =5 ? Merci d'avance pour vos réponses. Patmalonda

Bonsoir,

il faudrait nous montrer comment est calculé la variable Ligne.
Si c'est avec .End(xlDown), je vous conseillerais de le faire avec .End(xlUp) mais alors il faut faire la recherche en partant du bas :
Dernière ligne non vide de la colonne A : Ligne = Range("A" & Rows.Count).End(xlUp).Row

Encore une chose, vu que les lignes des feuilles dépassent les 32655, il faut typer Ligne en Long : Ligne As Long, sait on jamais...

@ bientôt

LouReeD

Bonjour LouReeD,

j'espère que ce message te trouvera en pleine forme et d’excellente humeur. Merci beaucoup pour ta réponse. j'ai essaye la ligne de code que tu m'as envoyé. Mais le débogueur s'affiche toujours. Comme je suis débutant en codage, je n'ai peut-être pas bien compris ce que tu m'as demandé de faire. Je préfère t'envoyer tout le code pour que tu puisses voir par toi même.

Sub ARCHIVER_NUMEROTERFACT()

ligne = Sheets("ARCHIVESFACT").Range("A4").End(xlDown).Row + 1

    Sheets("ARCHIVESFACT").Range("A" & ligne).Value = Sheets("FACTURE").Range("G12").Value  'N°facture
    Sheets("ARCHIVESFACT").Range("B" & ligne).Value = Sheets("FACTURE").Range("G11").Value 'Date facture
    Sheets("ARCHIVESFACT").Range("C" & ligne).Value = Sheets("FACTURE").Range("B11").Value 'Nom client
    Sheets("ARCHIVESFACT").Range("D" & ligne).Value = Sheets("FACTURE").Range("B12").Value 'Adresse client
    Sheets("ARCHIVESFACT").Range("E" & ligne).Value = Sheets("FACTURE").Range("B13").Value 'Téléphone client
    Sheets("ARCHIVESFACT").Range("F" & ligne).Value = Sheets("FACTURE").Range("B14").Value 'Email client
    Sheets("ARCHIVESFACT").Range("G" & ligne).Value = Sheets("FACTURE").Range("G18").Value 'Montant HT
    Sheets("ARCHIVESFACT").Range("H" & ligne).Value = Sheets("FACTURE").Range("F18").Value 'Tva
    Sheets("ARCHIVESFACT").Range("I" & ligne).Value = Sheets("FACTURE").Range("G37").Value 'Montant TTC

    Numérotation

    Sheets("FACTURE").Range("G11").ClearContents
    Sheets("FACTURE").Range("A18:A34").ClearContents
    Sheets("FACTURE").Range("D18:D34").ClearContents

End Sub

Sub Numérotation()

    If MsgBox("valider la facture ?", 36, "confirmation") = vbYes Then

        part1 = Year(Date)
        part2 = Format(Month(Date), "00")
        part3 = Right(Range("G12"), 4)

        Sheets("facture").Range("G12") = "FAC" & "-" & part1 & "-" & part2 & "-" & Format(Int(part3) + 1, "0000")

    End If

End Sub

J'ai en plus un autre problème. j'ai installé un complément vba - Nblettre - qui n'apparait plus dans la liste des fonctions. j'ai réinstallé le complément mais le problème persiste. Que puis-je faire ? Patmalonda

Bonsoir,

une solution :

Sub ARCHIVER_NUMEROTERFACT()
    Dim Ligne As Long, Incrément

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

    With Sheets("FACTURE")

        Sheets("ARCHIVESFACT").Range("A" & Ligne).Value = .Range("G12").Value  'N°facture
        Sheets("ARCHIVESFACT").Range("B" & Ligne).Value = .Range("G11").Value 'Date facture
        Sheets("ARCHIVESFACT").Range("C" & Ligne).Value = .Range("B11").Value 'Nom client
        Sheets("ARCHIVESFACT").Range("D" & Ligne).Value = .Range("B12").Value 'Adresse client
        Sheets("ARCHIVESFACT").Range("E" & Ligne).Value = .Range("B13").Value 'Téléphone client
        Sheets("ARCHIVESFACT").Range("F" & Ligne).Value = .Range("B14").Value 'Email client
        Sheets("ARCHIVESFACT").Range("G" & Ligne).Value = .Range("G18").Value 'Montant HT
        Sheets("ARCHIVESFACT").Range("H" & Ligne).Value = .Range("F18").Value 'Tva
        Sheets("ARCHIVESFACT").Range("I" & Ligne).Value = .Range("G37").Value 'Montant TTC

        If MsgBox("valider la facture ?", 36, "confirmation") = vbYes Then
            Incrément = CDbl(Right(.Range("G12"), 4)) + 1
            .Range("G12") = "FAC" & "-" & Year(Date) & "-" & Format(Month(Date), "00") & "-" & Format(Incrément, "0000")
        End If

        .Range("G11").ClearContents
        .Range("A18:A34").ClearContents
        .Range("D18:D34").ClearContents

    End With
End Sub

Pour le deuxième point, je ne sais point

@ bientôt

LouReeD

Salut Loureed,

Je m'excuse d’avoir mis du temps avant de te répondes mais mes amis et moi avons été pal occupés avec les impératifs de notre association. Je me suis un peu libéré de cette tâche et j'ai vu ton post. Un très grand merci pour ton aide.J'ai aussitôt testé le code et cela marche nickel. Enfin presque. Pour ce qui est du transfert des données, c'est OK mais pour l'affichage c'est autre chose. En effet pour la date, c'est un nombre qui s'affiche comme si on avait appliqué la fonctoin N; pourtant lorsque l'on regarde dans la barre des formules, c'est bien une date qui s'affiche (00/00/0000) mais dans la,cellule c'est un nombre. Idem pou la TVA: ce qui s’affiche c'est un un nombre (0,2) mais dans la barre des formules c'est bien un pourcentage(20%) que l'on voit. Que dois-je faire pour remédier à ce problème ? Patmalonda

Bonjour Patrice, LouReeD , le forum,

Essaies ainsi:

 '
 Sheets("ARCHIVESFACT").Range("B" & Ligne).Value = Format(.Range("G11").Value, "dd/mm/yy") 'Date facture
 '
 Sheets("ARCHIVESFACT").Range("H" & Ligne).Value = Format(.Range("F18").Value, "0.00%") 'Tva
 '

Cordialement,

Bonjour,
XOr bonjour,

si une date s'affiche en nombre sur la feuille Excel alors c'est tout bon, car sous Excel une date est un nombre entier dont 0 = 01/01/1900 et 1=02/01/1900 etc jusqu'à aujourd'hui où l'on est arrivé à 45186 pour le 17/09/2023 !

Pour enregistrer une date sur une feuille Excel venant de VBA il faut utiliser CDate() afin de spécifier à VBA que la donnée est une date. Le soucis avec Format(), me semble-t-il, c'est que la donnée est transformée en String, donc du texte, et cela peut causé des problèmes sur la feuille Excel.

Pour le valeurs "nombre" il faudrait, je pense, utiliser CDbl() et ce pour la même raison que le Format(). Mais cela reste à confirmer, mais si dans une cellule sans "alignement" spécifier, alors FORMAT() mettre le nombre à gauche (alphanumérique) et CDBL() le mettra à droite (Nombre).

Ensuite afin d'avoir le format de présentation voulu sur la feuille il suffit d'aller dans le menu format de la cellule pour aller cherche le format de date voulu et le format de nombre voulu, ce qui n'altère pas les données.

Un petit fichier pour les dates :

15cdate.xlsm (40.12 Ko)

@ bientôt

LouReeD

Bonjour XORSANKUKAI,

Bonjour LouReed,

Encore une fois un très grand merci pour votre aide et vos solutions. Mon problème d'affichage est résolu et en plus j'ai appris pourquoi. J'en profite pour vous soumettre un autre problème. Grâce la base de données d'archives que je vais pouvoir constituer, je voulais éditer des duplicatas i le besoin se fait sentir; J'arrive a éditer le n° de facture grâce à la fonction "liste déroulante" ainsi que la date, le nom du client, son adresse, son téléphone et son courriel à partir de la fonction "recherchev" mais je suis bloqué pour le produit (référence, désignation, unité, surface/quantité, prix unitaire) car il y a plusieurs produits. Y-a-t-il une ou des fonctions qui me permettent de régler ce problème et ce cas la(s)quelle(s) ? Ou faut-il utiliser ici un code VBA ? D'avance merci pour votre aide. Patmalonda

Rechercher des sujets similaires à "erreur execution 1004"