Mon programme se bloque : pourquoi ?

sur ce bout de programme, j'ai une erreur... et je ne la trouve pas !

pouvez-vous m'aider ?

image

J'ai bien créé un dossier dans c: au nom de GECOBAT

dans lequel j'ai créé un autre dossier appelé FACTURES

Merci de votre aide.

bonjour SimKmil,

Y-a-t-il soit des charactères spéciaux et interdits, soit des erreurs dans B12, E10 ou F10

Merci, je vérifie.

Eh oui, en effet, en B12, j'avais la date avec la formule AUJOURHUI() et cela écrivait 14/3/2024 et l'erreur venait de là.

J'ai essayé de mettre un autre format à la date (14 mars 2024) mais ça ne fonctionne toujours pas.

Alors j'ai supprimé ce morceau de code et ça fonctionne.

Pourtant j'aimais de pouvoir sauvegarder avec la date, car il s'agit ici d'une facture que je sauvegarde et je voulais avoir "date-nom-prénom" comme nom de fichier dans le dossier "FACTURES"

Merci de votre aide, si vous voyez une autre possibilité d'ajouter la date, je suis preneur.

Merci et bonne soirée

Et ... encore moi !!

dans le même programme, j'ai toute une partie de mon code qui ne donne aucun résultat - mais aucune erreur signalée; simplement il n'écrit pas ce que je lui demande.

voici le boutde code

'----------------------------------------------------------------
' Inscription automatique des factures dans le journal des ventes
'----------------------------------------------------------------

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

Sheets("JournaldesVentes").Range("A" & lig).Value = Sheets("Facture").Range("B12").Value 'date
Sheets("JournaldesVentes").Range("B" & lig).Value = Sheets("Facture").Range("B12").Value 'date
Sheets("JournaldesVentes").Range("C" & lig).Value = Sheets("Facture").Range("B10").Value 'n° facture

Sheets("JournaldesVentes").Range("D" & lig).Value = Sheets("Facture").Range("E10").Value & " " & Sheets("Facture").Range("F10").Value 'Client

Sheets("JournaldesVentes").Range("E" & lig).Value = Sheets("Facture").Range("G37").Value 'Total TVAC

'-----------------------------------------------------------------------------------
'archiver les factures dans l'historique factures et incrémenter le numéro de facture
'-----------------------------------------------------------------------------------

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

Sheets("Historique_facture").Range("A" & ligne).Value = Sheets("Facture").Range("B10").Value 'numero facture
Sheets("Historique_facture").Range("B" & ligne).Value = Sheets("Facture").Range("B12").Value 'date

Sheets("Historique_facture").Range("C" & ligne).Value = Sheets("Facture").Range("E10").Value 'nom
Sheets("Historique_facture").Range("D" & ligne).Value = Sheets("Facture").Range("F10").Value 'prénom

Sheets("Historique_facture").Range("E" & ligne).Value = Sheets("Facture").Range("E11").Value 'adresse
Sheets("Historique_facture").Range("F" & ligne).Value = Sheets("Facture").Range("E12").Value 'code postal

Sheets("Historique_facture").Range("G" & ligne).Value = Sheets("Facture").Range("F12").Value 'localité
Sheets("Historique_facture").Range("H" & ligne).Value = Sheets("Facture").Range("E13").Value 'téléphone
Sheets("Historique_facture").Range("I" & ligne).Value = Sheets("Facture").Range("G35").Value 'total HT
Sheets("Historique_facture").Range("J" & ligne).Value = Sheets("Facture").Range("G37").Value 'total ttc
Sheets("Historique_facture").Range("K" & ligne).Value = Sheets("Facture").Range("B35").Value + Sheets("Facture").Range("B36").Value + Sheets("Facture").Range("B37").Value + Sheets("Facture").Range("B38").Value 'total acomptes

la partie "inscription automatique des factures dansle journal des ventesfonctionne très bien, mais l'autre partie - historique factures - ne fonctionne pas. Purquoi ??

merci encore si vous pouvez m'aider.

Bonsoir,
BsAlv bonsoir,

pour récupérer la date dans le nom de votre fichier vous pouvez utiliser la fonction FORMAT qui transforme une donnée en TEXTE mis sous forme :
"LouReeD - " & Format(Range("B12"), "dd-mm-yyyy")

=> LouReeD - 14-03-2024 ce qui devrait être accepté pour un nom de fichier.

Pour l'autre problème une partie de code sortie de son contexte n'est pas vraiment utile pour comprendre les problèmes.
Pouvez-vous fournir votre fichier ?

@ bientôt

LouReeD

voilà le fichier complet.

Merci de votre aide

Bonsoir,

à vérifier : Votre tableau comporte un gros trou ! Du coup la première cellule vide que vous cherchez est très loin vers le bas ! Les données que vous pensez qui ne s'inscrivent pas doivent être celles qui sont tout en bas !

Sinon j'ai quelque peu modifier votre code en ajoutant des With pour regrouper proprement des instructions, puis je vous ai mis un code de remplissage de votre tableau structuré de la feuille Historique_facture :

Sub Facture_suivante()
    'Déclaration des variables
    Dim NomDossier As String
    Dim NomFichier As String
    Dim ligne As Integer
    Dim lig As Integer

    '----------------------------------------------------------------
    ' Inscription automatique des factures dans le journal des ventes
    '----------------------------------------------------------------
    With Sheets("JournaldesVentes")
        lig = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Range("A" & lig).Value = Sheets("Facture").Range("B12").Value 'date
        .Range("B" & lig).Value = Sheets("Facture").Range("B12").Value 'date
        .Range("C" & lig).Value = Sheets("Facture").Range("B10").Value 'n° facture
        .Range("D" & lig).Value = Sheets("Facture").Range("E10").Value & " " & Sheets("Facture").Range("F10").Value 'Client
        .Range("E" & lig).Value = Sheets("Facture").Range("G37").Value 'Total TVAC
    End With
    '------------------------------------------------------------------------------------
    'archiver les factures dans l'historique factures et incrémenter le numéro de facture
    '------------------------------------------------------------------------------------
    ' le tableau sur cette feuille est un tableau structuré, donc pas besoin de calculer la première ligne vide
    ' il suffit de dire à VBA d'ajouter une ligne à ce tableau
'    ligne = Sheets("Historique_facture").Range("A" & Rows.Count).End(xlUp).Row + 1
'    With Sheets("Historique_facture")
'        .Range("A" & ligne).Value = Sheets("Facture").Range("B10").Value 'numero facture
'        .Range("B" & ligne).Value = Sheets("Facture").Range("B12").Value 'date
'        .Range("C" & ligne).Value = Sheets("Facture").Range("E10").Value 'nom
'        .Range("D" & ligne).Value = Sheets("Facture").Range("F10").Value 'prénom
'        .Range("E" & ligne).Value = Sheets("Facture").Range("E11").Value 'adresse
'        .Range("F" & ligne).Value = Sheets("Facture").Range("E12").Value 'code postal
'        .Range("G" & ligne).Value = Sheets("Facture").Range("F12").Value 'localité
'        .Range("H" & ligne).Value = Sheets("Facture").Range("E13").Value 'téléphone
'        .Range("I" & ligne).Value = Sheets("Facture").Range("G35").Value 'total HT
'        .Range("J" & ligne).Value = Sheets("Facture").Range("G37").Value 'total ttc
'        .Range("K" & ligne).Value = Sheets("Facture").Range("B35").Value + Sheets("Facture").Range("B36").Value + Sheets("Facture").Range("B37").Value + Sheets("Facture").Range("B38").Value 'total acomptes
'    End With
    ' on dimensionne une variable Tableau structuré
    Dim MonTab As ListObject
    ' on dimensionne une variable Ligne de tableau structuré
    Dim lRow As ListRow
    Dim Temp
    ' on attribue à la variable tableau le premier tableau de la feuille "Suvi_CNX", comme cela vous pouvez sous Excel donner le nom que vous voulez au tableau
    Set MonTab = Sheets("Historique_facture").ListObjects(1)
    ' avec ce tableau
    With MonTab
        ' on attribue à la variable ligne, la ligne "nouvelle ligne" que l'on crée, pas de chiffre entre parenthèse = une ligne en bas du tableau
        Set lRow = .ListRows.Add()
        ' avec cette ligne
        With lRow
            ' on lui attribue en colonne 1 le numéro de facture
            .Range.Cells(1).Value = Sheets("Facture").Range("B10").Value ' je met Now afin d'avoir la date et l'heure pour augmenter la précision
            .Range.Cells(2).Value = Sheets("Facture").Range("B12").Value ' ici c'est le nom inscrit dans Excel ou la suite Office, le mieux est d'utiliser le nom de session de l'ordinateur je crois que c'est : Environ("UserName"), donc : .Range.Cells(2).Value = Environ("UserName")
            .Range.Cells(3).Value = Sheets("Facture").Range("E10").Value
            .Range.Cells(4).Value = Sheets("Facture").Range("F10").Value
            .Range.Cells(5).Value = Sheets("Facture").Range("E11").Value
            .Range.Cells(6).Value = Sheets("Facture").Range("E12").Value
            .Range.Cells(7).Value = Sheets("Facture").Range("F12").Value
            .Range.Cells(8).Value = Sheets("Facture").Range("E13").Value
            .Range.Cells(9).Value = Sheets("Facture").Range("G35").Value
            .Range.Cells(10).Value = Sheets("Facture").Range("G37").Value
            Temp = CDbl(Sheets("Facture").Range("B35").Value) + CDbl(Sheets("Facture").Range("B36").Value) + _
                   CDbl(Sheets("Facture").Range("B37").Value) + CDbl(Sheets("Facture").Range("B38").Value)
            .Range.Cells(11).Value = Temp
        ' on a fini de jouer avec la ligne
        End With
    ' on a fini de jouer avec le tableau
    End With
    '---------------------------------------------------------------------------------------------------------
    'Procédure permettant de réaliser un fichier de sauvegarde
    '---------------------------------------------------------
        'Affectation des variables
        NomDossier = "C:\GECOBAT\FACTURES\"
        'Désactiver les messages d'alerte
        Application.DisplayAlerts = False
        'On crée le nom du fichier de sauvegarde (Date+Nom)
        NomFichier = Format(Sheets("B12"), "YYYY-MM-DD") & "_" & Sheets("Facture").Range("E10").Value & "_" & Sheets("Facture").Range("F10").Value & ".xlsm"
        'on sauvegarde le fichier de backup
        ActiveWorkbook.SaveCopyAs NomDossier & NomFichier
        'on affiche le message de confirmation
        MsgBox "Votre fichier de sauvegarde intitulé : " & NomFichier & vbNewLine & "dans le dossier suivant : " & NomDossier, vbOKOnly + vbInformation, "CONFIRMATION"
    '-------------------------------------------
        'Effacement des données
    '-------------------------------------------
    With Sheets("Facture")
        .Range("A16:F19").ClearContents 'vider le corps de facture
        .Range("A20:B20").ClearContents 'vider le corps de facture
        .Range("E10").ClearContents     'vider le nom
        .Range("B35:B38").ClearContents  'vider les acomptes
        .Range("B10").Value = .Range("B10").Value + 1 'incrémenter le numéro de facture
        .Range("F22:F34").ClearContents 'vider le corps de facture
    End With
End Sub

J'ai également testé le fait d'ajouter la date au nom lors de l'enregistrement du fichier.

@ bientôt

LouReeD

Rechercher des sujets similaires à "mon programme bloque pourquoi"