XL 2016 Facturier : Retour à la ligne sur la facture

Vermithor

XLDnaute Nouveau
Bonjour à tous,

Je travaille actuellement sur une macro pour éditer des titres de recette.
Je dois facturer le temps de gardiennage de prélèvements biologiques. Ces prélèvements sont répertoriés dans la feuille "FACTURATION" en colonne 1 sous différents identifiants.
Le titre de recette que la macro doit compléter se trouve dans la feuille "TITRE".
Lorsque plusieurs prélèvements sont effectués pour un même identifiant, j'aimerais que sur mon titre de recette, la macro (qui met les informations concernant le premier prélèvement sur la ligne 30) mette à la ligne 31, puis 32, puis 33 etc. les informations des autres prélèvements ayant le même identifiant seulement si ils sont indiqués comme sortis en colonne N ou O de la feuille "FACTURATION".
Voici mon code:

VB:
Sub editionfactures()
Dim Ligne As Long
Dim chemin As String

Application.ScreenUpdating = False

'Indiquer le chemin où vont être enregistrés les titres de facturation au format PDF
chemin = Sheets("PARAMETRES").Range("A2").Value


Feuil1.Select
For Ligne = Range("A20000").End(xlUp).Row To 2 Step -1

    If Cells(Ligne, 20).Value <> "EDITER" Then
    
    
 Facture_numero = Sheets("FACTURATION").Cells(Ligne, 1)
 Facture_pv = Sheets("FACTURATION").Cells(Ligne, 11)
        
'Aller récupérer dans la base de données les éléments pour les intégrer à la facture'

'La date'
Feuil9.Range("H39").Value = Cells(Ligne, 13).Value

'Le numéro de PV
Feuil9.Range("F30").Value = Cells(Ligne, 11).Value

'la date de l'entrée du corps'
Feuil9.Range("G30").Value = Cells(Ligne, 4).Value

'Le temps de gardiennage jusqu'à destruction
 
Feuil9.Range("I30").Value = Cells(Ligne, 16).Value


'Le temps de gardiennage jusqu'à sortie
Feuil9.Range("H30").Value = Cells(Ligne, 17).Value

'Montant pour destruction
Feuil9.Range("D30").Value = Cells(Ligne, 23).Value
    
    
'Montant pour sortie
Feuil9.Range("C30").Value = Cells(Ligne, 22).Value

'Le Numéro de scellé
Feuil9.Range("B30").Value = Cells(Ligne, 7).Value

'ID Autopsie
Feuil9.Range("A10").Value = Cells(Ligne, 1).Value

'______________________________________________________________'

Feuil1.Cells(Ligne, 20).Value = "EDITER"

Sheets("TITRE").ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=chemin & Facture_numero & "_" & Facture_pv & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

 
    End If
Next Ligne

Application.ScreenUpdating = True


End Sub

Et je vous joins mon document pour une meilleure visualisation de ma demande d'aide.
Merci à vous.
 

Pièces jointes

  • BASEPOURAIDE1.xlsm
    33.2 KB · Affichages: 11

Vermithor

XLDnaute Nouveau
Bonjour @Vermithor

Je te propose ce fichier

Merci de ton retour
Bonjour,

Merci beaucoup pour ton aide !
Pour le retour à la ligne, c'est parfait, en revanche un problème intervient lorsque je veux éditer plusieurs titres de recette d'identifiants différents en même temps (a chaque fois que la mention "editer" est absente sur plusieurs identifiants).
Le titre de recette qui va être édité par la macro va rassembler les informations de plusieurs identifiants au lieu de créer des titres de recette distincts pour chaque identifiants.
Il arrive aussi que le titre ne soit tout simplement pas rempli.
Je te remets un doc en pièce jointe pour que tu puisses constater.
J'ai apporté de menues modifications pour que cela colle à ma base de données réelle, je ne pense pas avoir corrompu ton code mais ton œil expert le verra sans doute mieux que le mien.

VB:
Sub editionfactures()
Application.ScreenUpdating = False
Dim i&, Derlig&, Lig&, Chemin$, Facture_numero, Facture_pv, Facture_nom, Facture_prenom, Cptr%
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet

Set Ws1 = Worksheets("Facturation")     ' Source Feuil1
Set Ws2 = Worksheets("Titre")           ' Destination Feuil9
Set Ws3 = Worksheets("Parametres")      ' Feuille Parametres

Derlig = Ws1.Range("A" & Rows.Count).End(xlUp).Row
Chemin = Ws3.Range("A1").Value                                  ' Indiquer le chemin où vont être enregistrés les titres de facturation au format PDF
Lig = 30

For i = 2 To Derlig
    With Ws1
        If .Range("S" & i) <> "EDITER" Then
            Facture_numero = .Range("A" & i)                    ' Sert que pour le nom du PDF
            Facture_nom = .Range("B" & i)                       ' Sert que pour le nom du PDF
            Facture_prenom = .Range("C" & i)                    ' Sert que pour le nom du PDF
            Facture_pv = .Range("K" & i)                        ' Sert que pour le nom du PDF
            Ws2.Range("A10") = .Range("A" & i)                  ' ID Autopsie
            Ws2.Range("H39") = .Range("M" & i)                  ' La date
            Ws2.Range("A29") = .Range("B" & i)                  ' Le nom
            Ws2.Range("F" & Lig) = .Range("K" & i)              ' Le numéro de PV
            Ws2.Range("G" & Lig) = .Range("D" & i)              ' la date de l'entrée du corps
            Ws2.Range("I" & Lig) = .Range("P" & i)              ' Le temps de gardiennage jusqu'à destruction
            Ws2.Range("H" & Lig) = .Range("Q" & i)              ' Le temps de gardiennage jusqu'à sortie
            Ws2.Range("E" & Lig) = .Range("V" & i)              ' Montant pour destruction
            Ws2.Range("D" & Lig) = .Range("U" & i)              ' Montant pour sortie
            Ws2.Range("B" & Lig) = .Range("G" & i)              ' Le Numéro de scellé Interne
            Ws2.Range("C" & Lig) = .Range("F" & i)              ' Le Numéro de scellé OPJ/TIC
            .Range("S" & i).Value = "EDITER"
           
            If Ws2.Range("A10") = .Range("A" & i + 1) Then
                Lig = Lig + 1
            Else
                Lig = 300
                'Gestion impression PDF
                Ws2.ExportAsFixedFormat Type:=xlTypePDF, _
                Filename:=Chemin & Facture_numero & "_" & Facture_pv & "_" & Facture_nom & "_" & Facture_prenom & ".pdf", _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
               
                Ws2.Range("A10,A29,H39,B30:I35") = ""               ' Nettoyage feuille Titre
                Cptr = Cptr + 1
            End If
        End If
    End With
Next i
If Cptr = 0 Then MsgBox "Rien à faire...", vbExclamation, "C'est quoi ce binzzzz !!!": Exit Sub
MsgBox Cptr & " fichier(s) PDF crée(s)", vbInformation, "PDF ...."
End Sub

Encore merci pour ton aide.
 

Pièces jointes

  • Facturation et PDF V2.xlsm
    37.2 KB · Affichages: 8
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonjour @Vermithor

Je suis absent toute la soirée, je regarde demain.
Mais vite fait ..... quelques commentaires

Mais pas sur que tu es compris le code !!!

Mais avoir modifié ceci c'est sur que cela va moins bien fonctionner

Else
Lig = 300

Au lieu de ceci qui fonctionne !!

Else
Lig = 30
Et j'ai pas regarder le reste de bricolage !!!


Avec mon code non bricolé du post #2
Tu auras ces PDF de crées si la colonne S est vide

1700070561478.png


C'est le changement d'ID Autopsie (colonne A ) qui fait un nouveau pdf
Est bien ce que tu veux ?

Bonne lecture
 
Dernière édition:

Vermithor

XLDnaute Nouveau
Bonjour @Phil69970
1700070561478.png


C'est le changement d'ID Autopsie (colonne A ) qui fait un nouveau pdf
Est bien ce que tu veux ?

C'est tout à fait ça, un pdf pour un ID_autopsie.

Mais avoir modifié ceci c'est sur que cela va moins bien fonctionner
Désolé, c'est une erreur de ma part.
Je te remets le code
VB:
Sub editionfactures()
Application.ScreenUpdating = False
Dim i&, Derlig&, Lig&, Chemin$, Facture_numero, Facture_pv, Facture_nom, Facture_prenom, Cptr%
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet

Set Ws1 = Worksheets("Facturation")     ' Source Feuil1
Set Ws2 = Worksheets("Titre")           ' Destination Feuil9
Set Ws3 = Worksheets("Parametres")      ' Feuille Parametres

Derlig = Ws1.Range("A" & Rows.Count).End(xlUp).Row
Chemin = Ws3.Range("A1").Value                                  ' Indiquer le chemin où vont être enregistrés les titres de facturation au format PDF
Lig = 29

For i = 2 To Derlig
    With Ws1
        If .Range("S" & i) <> "EDITER" Then
            Facture_numero = .Range("A" & i)                    ' Sert que pour le nom du PDF
            Facture_nom = .Range("B" & i)                       ' Sert que pour le nom du PDF
            Facture_prenom = .Range("C" & i)                    ' Sert que pour le nom du PDF
            Facture_pv = .Range("K" & i)                        ' Sert que pour le nom du PDF
            Ws2.Range("A10") = .Range("A" & i)                  ' ID Autopsie
            Ws2.Range("H39") = .Range("M" & i)                  ' La date
            Ws2.Range("A28") = .Range("B" & i)                  ' Le nom
            Ws2.Range("F" & Lig) = .Range("K" & i)              ' Le numéro de PV
            Ws2.Range("G" & Lig) = .Range("D" & i)              ' la date de l'entrée du corps
            Ws2.Range("I" & Lig) = .Range("P" & i)              ' Le temps de gardiennage jusqu'à destruction
            Ws2.Range("H" & Lig) = .Range("Q" & i)              ' Le temps de gardiennage jusqu'à sortie
            Ws2.Range("E" & Lig) = .Range("V" & i)              ' Montant pour destruction
            Ws2.Range("D" & Lig) = .Range("U" & i)              ' Montant pour sortie
            Ws2.Range("B" & Lig) = .Range("G" & i)              ' Le Numéro de scellé Interne
            Ws2.Range("C" & Lig) = .Range("F" & i)              ' Le Numéro de scellé OPJ/TIC
            .Range("S" & i).Value = "EDITER"
            
            If Ws2.Range("A10") = .Range("A" & i + 1) Then
                Lig = Lig + 1
            Else
                Lig = 29
                'Gestion impression PDF
                Ws2.ExportAsFixedFormat Type:=xlTypePDF, _
                Filename:=Chemin & Facture_numero & "_" & Facture_pv & "_" & Facture_nom & "_" & Facture_prenom & ".pdf", _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
                
                Ws2.Range("A10,A28,H39,B30:I36") = ""               ' Nettoyage feuille Titre
                Cptr = Cptr + 1
            End If
        End If
    End With
Next i
If Cptr = 0 Then MsgBox "Rien à faire...", vbExclamation, "C'est quoi ce binzzzz !!!": Exit Sub
MsgBox Cptr & " fichier(s) PDF crée(s)", vbInformation, "PDF ...."
End Sub

et je te joins le doc mis à jour.

Merci à nouveau
 

Pièces jointes

  • Facturation et PDF V3.xlsm
    33.7 KB · Affichages: 11

Phil69970

XLDnaute Barbatruc
Bonjour @Vermithor

Remarques:
J'ai pas compris si c'est ce que tu veux donc réponds à mes questions.

1) Est ce que le fichier de mon post #2 fonctionne comme tu le veux ?
==> Si non explique ce qui ne fonctionne pas et comment cela devrait fonctionner ....
Donnes des exemples ....

2) Est ce que le fichier avec le code que tu as modifié fonctionne comme tu le veux ?
==> Si non explique ce qui ne fonctionne pas et comment cela devrait fonctionner ....
Donnes des exemples ....

Voici ce que j'obtiens avec le code modifié
1700094425892.png



3) Si on demande un fichier représentatif c'est bien pour éviter des allers retours entre le demandeur et les contributeurs

C'est quoi représentatif ?

- représentatif, même organisation des lignes et des colonnes, mêmes libellés, mêmes noms de feuilles...
- anonymisé, pas de données personnelles réelles tels nom, n° sécu, adresse ... remplacé par Nom1, Nom2 etc ....
- simplifié, une quinzaine de lignes reproduisant l'ensemble des différents cas envisageables (Avec le résultat souhaité éventuellement)

Si cela fonctionne sur le fichier fourni et pas sur le vrai fichier c'est qu'il n'est en rien représentatif ou que tu n'as pas su transposer ce qui devrait être un simple copier coller du code.
 

Phil69970

XLDnaute Barbatruc
Re

@Vermithor
Voir post précédent + si j'ai compris tu as un pb ici :

en revanche un problème intervient lorsque je veux éditer plusieurs titres de recette d'identifiants différents en même temps (a chaque fois que la mention "editer" est absente sur plusieurs identifiants).

C'est simple si la mention "EDITER" est présente il n'y a pas de PDF enregistré c'est son absence qui va permettre de faire le PDF.
Si tu veux faire le PDF il faut supprimer dans la colonne S la mention "EDITER" et le PDF sera crée

C'est sur ce principe que j'ai fait la macro ..... 🤔
 

Vermithor

XLDnaute Nouveau
1) Est ce que le fichier de mon post #2 fonctionne comme tu le veux ?
==> Si non explique ce qui ne fonctionne pas et comment cela devrait fonctionner ....
Donnes des exemples ....
Oui, excepté qu'il arrive que la macro mette sur la même titre de recettes les informations de plusieurs "ID_autopsie". Il faut qu'un titre de recette comporte que les informations d'un même ID_autopsie.
Par ailleurs, dans certains cas, l'édition en pdf est refusée et le message d'erreur "rien à faire", que tu as programmé, apparait mais je ne comprends pas pourquoi. Est-ce que tu peux m'expliquer s'il te plait ?

2) Est ce que le fichier avec le code que tu as modifié fonctionne comme tu le veux ?
==> Si non explique ce qui ne fonctionne pas et comment cela devrait fonctionner ....
Donnes des exemples ....
Oui, excepté le problème précédemment cité de mélange d'informations de plusieurs ID_autopsie sur un même titre de recette. A titre d'exemple: il arrive que sur un titre de recette 57_2023_2222_3333_2023_XX1_X2 apparaissent les informations qui devraient être contenues dans le titre 58_2023_4444_5555_2023_XX3_X4 et qui, pour le coup, n'y figurent pas.

Voici ce que j'obtiens avec le code modifié
1700094425892.png
C'est bien le résultat attendu.


3) Si on demande un fichier représentatif c'est bien pour éviter des allers retours entre le demandeur et les contributeurs

C'est quoi représentatif ?

- représentatif, même organisation des lignes et des colonnes, mêmes libellés, mêmes noms de feuilles...
- anonymisé, pas de données personnelles réelles tels nom, n° sécu, adresse ... remplacé par Nom1, Nom2 etc ....
- simplifié, une quinzaine de lignes reproduisant l'ensemble des différents cas envisageables (Avec le résultat souhaité éventuellement)

Si cela fonctionne sur le fichier fourni et pas sur le vrai fichier c'est qu'il n'est en rien représentatif ou que tu n'as pas su transposer ce qui devrait être un simple copier coller du code.
Merci beaucoup pour cette précision, j'en tiendrai compte lors de mes prochaines demandes.


C'est simple si la mention "EDITER" est présente il n'y a pas de PDF enregistré c'est son absence qui va permettre de faire le PDF.
Si tu veux faire le PDF il faut supprimer dans la colonne S la mention "EDITER" et le PDF sera crée

C'est sur ce principe que j'ai fait la macro ..... 🤔
Au temps pour moi, je me suis mal exprimé, il s'agit du problème expliqué plus haut à savoir le mélange d'information de plusieurs ID_autopsie sur un même titre de recette. La fonction de la colonne S avec la mention "EDITER" est parfaite.
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
@Vermithor

Cptr = Cptr +1
Cela sert jute pour compter le nombre de PDF

Je n'arrive pas à reproduire ce que tu dit :
à savoir le mélange d'information de plusieurs ID_autopsie sur un même titre de recette.
Mets le ou les PDF en ligne avec le fichier excel qui pose problème et explique qu'elle ligne etc.....

En clair je veux pouvoir recréer le pb pour voir ou cela bloque .
 

Vermithor

XLDnaute Nouveau
Mets le ou les PDF
et voici un exemple de PDF qui dysfonctionne (j'ai essayé de biffer au mieux les infos).
On peut voir dans la colonne "PV" que ceux-ci sont différents alors qu'ils ne devraient pas l'être (1 numéro ID_Autopsie et 1 numéro de PV par PDF). Là, dans l'exemple en pièce jointe, deux affaires se retrouvent sur le même PDF alors qu'elles devraient être sur des PDFs distincts. Et aussi il arrive que des informations soient présentes de manière anarchique (encadrés vert en bas du PDF).
 

Vermithor

XLDnaute Nouveau
@Vermithor

C'est normal car je n'ai pas prévu de pouvoir faire juste un bout de PDF

Quand j'ai fait la macro je suis parti du principe que le PDF concernait la totalité d'un même N° "ID_AUTOPSIE" et non d'un "bout" de N° "ID_AUTOPSIE"
Aaah d'acc! Malheureusement, il arrive régulièrement que seulement quelques prélèvements sur un même n° "ID_AUTOPSIE" sortent pendant que d'autres restent dans le stock.
 

Discussions similaires

Réponses
0
Affichages
356
Réponses
1
Affichages
434
Réponses
2
Affichages
322

Statistiques des forums

Discussions
315 124
Messages
2 116 460
Membres
112 748
dernier inscrit
Pboiusquet