Microsoft 365 Besoin aide : Erreur code macro . Problème est résolu

heart clean

XLDnaute Nouveau
Bonjour à tous,

J'ai besoin d'aide pour résoudre un problème dans mon code de macro. J'ai un tableau dans la feuille "Régularisation" où je compare les valeurs de la colonne H à partir de la ligne 7. Si la cellule est égale à "Paiement", je souhaite ouvrir une attestation au format PDF. Si la cellule est égale à "Remboursement" ou à "En ordre", je ne veux rien faire et aucun PDF ne doit s'ouvrir.

Si quelqu'un parmi vous pourrait m'aider à corriger ce code de macro, je vous serais très reconnaissant. Veuillez trouver ci-dessous le code actuel :

Private Sub CommandButton1_Click()
Dim dl As Integer

If Me.ComboBox3.Value <> "" And Me.Txt_description.Value <> "" And Me.Txt_payé.Value <> "" And Me.Txt_listing.Value <> "" Then
Sheets("Régularisation").ListObjects(1).ListRows.Add
dl = Sheets("Régularisation").Range("c9999").End(xlUp).Row

'Ajouter dans le tableau
Sheets("Régularisation").Range("C" & dl) = Me.ComboBox3.Value
Sheets("Régularisation").Range("D" & dl) = Me.Txt_description.Value
Sheets("Régularisation").Range("E" & dl) = CDec(Me.Txt_payé.Value)
Sheets("Régularisation").Range("F" & dl) = CInt(Me.Txt_listing.Value)

Dim chemin As String
Dim nomFichier As String

' Définir le chemin et le nom de fichier
chemin = "C:\Users\Utilisateur\Desktop\Attestation\" ' Chemin où le PDF sera enregistré
nomFichier = Me.Txt_description.Value & ".pdf" ' Nom du fichier PDF

' Vérifier la valeur de la cellule H7 et les suivantes dans la feuille "Régularisation"
Dim derniereligne As Long
derniereligne = Sheets("Régularisation").Cells(Rows.Count, "H").End(xlUp).Row

Dim i As Long

Dim plage As Range
Dim paiementTrouve As Boolean
Dim remboursementTrouve As Boolean
Dim enOrdreTrouve As Boolean

paiementTrouve = False
remboursementTrouve = False
enOrdreTrouve = False

For i = 7 To derniereligne
If Sheets("Régularisation").Range("H" & i).Value = "Paiement" Then
Sheets("Attestation").Activate
Set plage = Range("B4:B46")
plage.Worksheet.PageSetup.Zoom = 80
plage.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin & nomFichier, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False
Shell "explorer.exe """ & chemin & nomFichier & """"
paiementTrouve = True
Exit For
ElseIf Sheets("Régularisation").Range("H" & i).Value = "Remboursement" Then
remboursementTrouve = True
ElseIf Sheets("Régularisation").Range("H" & i).Value = "En ordre" Then
enOrdreTrouve = True
End If
Next i

If remboursementTrouve Then
MsgBox "Attention, vous avez le remboursement. Aucun PDF ne sera ouvert."
ElseIf enOrdreTrouve Then
MsgBox "Parfait, tout est en ordre."
ElseIf Not paiementTrouve Then
MsgBox "Aucun paiement trouvé. Aucun PDF ne sera ouvert."
End If
End If

Sheets("Employés").Range("d19") = Sheets("Employés").Range("d19")
ThisWorkbook.Save
Unload Add_employé
End Sub


Je vous remercie d'avance pour votre aide précieuse !
 

cp4

XLDnaute Barbatruc
Bonsoir,

Je ne saurai pas solutionner ton problème sans fichier. J'ai quand même apporté une petite contribution quant à l'ajout d'une ligne de donnée à ton tableau structuré.
VB:
Option Explicit

Private Sub CommandButton1_Click()
'Déclaration des variable----------------------------------------------------------------------------------
   Dim dl As ListRow, chemin As String, nomFichier As String, derniereligne As Long, i As Long
   Dim plage As Range, paiementTrouve As Boolean, remboursementTrouve As Boolean, enOrdreTrouve As Boolean
   '---------ma contribution juste ajout ligne de données au tableau structuré----------------------------------------------------
   If Me.ComboBox3.Value <> "" And Me.Txt_description.Value <> "" And Me.Txt_payé.Value <> "" And Me.Txt_listing.Value <> "" Then
      Set dl = Sheets("Régularisation").ListObjects(1).ListRows.Add
      'Ajouter dans le tableau
      dl.Range.Cells(3) = Me.ComboBox3.Value
      dl.Range.Cells(4) = Me.Txt_description.Value
      dl.Range.Cells(5) = CDec(Me.Txt_payé.Value)
      dl.Range.Cells(6) = CInt(Me.Txt_listing.Value)
'-------------------------------------------------------------------------------------------------------------------------------------
      ' Définir le chemin et le nom de fichier
      chemin = "C:\Users\Utilisateur\Desktop\Attestation\"   ' Chemin où le PDF sera enregistré
      nomFichier = Me.Txt_description.Value & ".pdf"   ' Nom du fichier PDF

      ' Vérifier la valeur de la cellule H7 et les suivantes dans la feuille "Régularisation"
      derniereligne = Sheets("Régularisation").Cells(Rows.Count, "H").End(xlUp).Row

      paiementTrouve = False
      remboursementTrouve = False
      enOrdreTrouve = False

      For i = 7 To derniereligne
         If Sheets("Régularisation").Range("H" & i).Value = "Paiement" Then
            Sheets("Attestation").Activate
            Set plage = Range("B4:B46")
            plage.Worksheet.PageSetup.Zoom = 80
            plage.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin & nomFichier, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False
            Shell "explorer.exe """ & chemin & nomFichier & """"
            paiementTrouve = True
            Exit For
         ElseIf Sheets("Régularisation").Range("H" & i).Value = "Remboursement" Then
            remboursementTrouve = True
         ElseIf Sheets("Régularisation").Range("H" & i).Value = "En ordre" Then
            enOrdreTrouve = True
         End If
      Next i

      If remboursementTrouve Then
         MsgBox "Attention, vous avez le remboursement. Aucun PDF ne sera ouvert."
      ElseIf enOrdreTrouve Then
         MsgBox "Parfait, tout est en ordre."
      ElseIf Not paiementTrouve Then
         MsgBox "Aucun paiement trouvé. Aucun PDF ne sera ouvert."
      End If
   End If

   Sheets("Employés").Range("d19") = Sheets("Employés").Range("d19")
   ThisWorkbook.Save
   Unload Add_employé
End Sub
pour une édition correcte d'un code utiliser balise </>
 

heart clean

XLDnaute Nouveau
Bonsoir,

Je ne saurai pas solutionner ton problème sans fichier. J'ai quand même apporté une petite contribution quant à l'ajout d'une ligne de donnée à ton tableau structuré.
VB:
Option Explicit

Private Sub CommandButton1_Click()
'Déclaration des variable----------------------------------------------------------------------------------
   Dim dl As ListRow, chemin As String, nomFichier As String, derniereligne As Long, i As Long
   Dim plage As Range, paiementTrouve As Boolean, remboursementTrouve As Boolean, enOrdreTrouve As Boolean
   '---------ma contribution juste ajout ligne de données au tableau structuré----------------------------------------------------
   If Me.ComboBox3.Value <> "" And Me.Txt_description.Value <> "" And Me.Txt_payé.Value <> "" And Me.Txt_listing.Value <> "" Then
      Set dl = Sheets("Régularisation").ListObjects(1).ListRows.Add
      'Ajouter dans le tableau
      dl.Range.Cells(3) = Me.ComboBox3.Value
      dl.Range.Cells(4) = Me.Txt_description.Value
      dl.Range.Cells(5) = CDec(Me.Txt_payé.Value)
      dl.Range.Cells(6) = CInt(Me.Txt_listing.Value)
'-------------------------------------------------------------------------------------------------------------------------------------
      ' Définir le chemin et le nom de fichier
      chemin = "C:\Users\Utilisateur\Desktop\Attestation\"   ' Chemin où le PDF sera enregistré
      nomFichier = Me.Txt_description.Value & ".pdf"   ' Nom du fichier PDF

      ' Vérifier la valeur de la cellule H7 et les suivantes dans la feuille "Régularisation"
      derniereligne = Sheets("Régularisation").Cells(Rows.Count, "H").End(xlUp).Row

      paiementTrouve = False
      remboursementTrouve = False
      enOrdreTrouve = False

      For i = 7 To derniereligne
         If Sheets("Régularisation").Range("H" & i).Value = "Paiement" Then
            Sheets("Attestation").Activate
            Set plage = Range("B4:B46")
            plage.Worksheet.PageSetup.Zoom = 80
            plage.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin & nomFichier, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False
            Shell "explorer.exe """ & chemin & nomFichier & """"
            paiementTrouve = True
            Exit For
         ElseIf Sheets("Régularisation").Range("H" & i).Value = "Remboursement" Then
            remboursementTrouve = True
         ElseIf Sheets("Régularisation").Range("H" & i).Value = "En ordre" Then
            enOrdreTrouve = True
         End If
      Next i

      If remboursementTrouve Then
         MsgBox "Attention, vous avez le remboursement. Aucun PDF ne sera ouvert."
      ElseIf enOrdreTrouve Then
         MsgBox "Parfait, tout est en ordre."
      ElseIf Not paiementTrouve Then
         MsgBox "Aucun paiement trouvé. Aucun PDF ne sera ouvert."
      End If
   End If

   Sheets("Employés").Range("d19") = Sheets("Employés").Range("d19")
   ThisWorkbook.Save
   Unload Add_employé
End Sub
pour une édition correcte d'un code utiliser balise </>
Un grand merci pour votre réponse ! Je suis reconnaissante de l'aide que vous avez apportée en fournissant le code. Cependant, j'ai encore quelques problèmes avec mon code. Pour que vous puissiez mieux comprendre mon travail, je vais vous envoyer mon fichier. J'apprécierais beaucoup si vous pouviez l'examiner et me fournir des conseils supplémentaires. Votre aide est précieuse. Merci encore !
 

Pièces jointes

  • Régularisation.xlsm
    46.1 KB · Affichages: 6

cp4

XLDnaute Barbatruc
Bonjour,

Je n'ai pas bien compris tes attentes par rapport au pdf, avec ton code ci-dessous, à chaque fois que tu ajoutes un paiement, tu parcours toute la colonne H et tu crées ou non un pdf. Or les précédents ajouts ont été traités.
Plus d'explications merci.
VB:
For i = 7 To derniereligne
         If Sheets("Régularisation").Range("H" & i).Value = "Paiement" Then
            Sheets("Attestation").Activate
            Set plage = Range("B4:B46")
            plage.Worksheet.PageSetup.Zoom = 80
            plage.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin & nomFichier, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False
            Shell "explorer.exe """ & chemin & nomFichier & """"
            paiementTrouve = True
            Exit For
         ElseIf Sheets("Régularisation").Range("H" & i).Value = "Remboursement" Then
            remboursementTrouve = True
         ElseIf Sheets("Régularisation").Range("H" & i).Value = "En ordre" Then
            enOrdreTrouve = True
         End If
      Next i
 

heart clean

XLDnaute Nouveau
Bonjour,

Je n'ai pas bien compris tes attentes par rapport au pdf, avec ton code ci-dessous, à chaque fois que tu ajoutes un paiement, tu parcours toute la colonne H et tu crées ou non un pdf. Or les précédents ajouts ont été traités.
Plus d'explications merci.
VB:
For i = 7 To derniereligne
         If Sheets("Régularisation").Range("H" & i).Value = "Paiement" Then
            Sheets("Attestation").Activate
            Set plage = Range("B4:B46")
            plage.Worksheet.PageSetup.Zoom = 80
            plage.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin & nomFichier, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False
            Shell "explorer.exe """ & chemin & nomFichier & """"
            paiementTrouve = True
            Exit For
         ElseIf Sheets("Régularisation").Range("H" & i).Value = "Remboursement" Then
            remboursementTrouve = True
         ElseIf Sheets("Régularisation").Range("H" & i).Value = "En ordre" Then
            enOrdreTrouve = True
         End If
      Next i
Bonjour,
Je m'excuse si mon explication n'était pas claire.
En faite lorsque je clique sur le bouton "Add", un formulaire d'ajout s'affiche où je saisis les informations relatives à un employé, notamment son salaire payé et son salaire en listing. Une fois que j'ai complété le formulaire, ces informations sont enregistrées dans un tableau et une régularisation est calculée automatiquement.

Le calcul de régularisation se base sur la différence entre le salaire en listing et le salaire payé. Si la régularisation est inférieure à zéro, cela signifie qu'un remboursement est nécessaire, et dans ce cas, aucune action supplémentaire n'est requise. Si la régularisation est égale à zéro, cela signifie que tout est en ordre et aucune action n'est entreprise.

Cependant, si la régularisation est supérieure à zéro, j'ai ajouté une condition spécifique dans le code. Cette condition permet d'ouvrir automatiquement une attestation au format PDF. L'attestation contient des informations pertinentes liées à l'employé et à la régularisation.
 

cp4

XLDnaute Barbatruc
Bonjour,
Je m'excuse si mon explication n'était pas claire.
En faite lorsque je clique sur le bouton "Add", un formulaire d'ajout s'affiche où je saisis les informations relatives à un employé, notamment son salaire payé et son salaire en listing. Une fois que j'ai complété le formulaire, ces informations sont enregistrées dans un tableau et une régularisation est calculée automatiquement.

Le calcul de régularisation se base sur la différence entre le salaire en listing et le salaire payé. Si la régularisation est inférieure à zéro, cela signifie qu'un remboursement est nécessaire, et dans ce cas, aucune action supplémentaire n'est requise. Si la régularisation est égale à zéro, cela signifie que tout est en ordre et aucune action n'est entreprise.

Cependant, si la régularisation est supérieure à zéro, j'ai ajouté une condition spécifique dans le code. Cette condition permet d'ouvrir automatiquement une attestation au format PDF. L'attestation contient des informations pertinentes liées à l'employé et à la régularisation.
En récapitulatif: lors de l'ajout, un calcul est fait et par rapport au résultat un pdf est créé.
Parce que dans ton code, à chaque ajout une vérification se fait pour toutes les lignes inutilement à mon avis.
Je dois sortir, je reviendrai plus tard.
 

heart clean

XLDnaute Nouveau
Sans réponse à mon précédent post, ton fichier en retour selon ma compréhension.
Je vous présente mes excuses pour ne pas avoir répondu à votre dernier message. Je tiens à vous remercier sincèrement pour votre aide précieuse. Le code fonctionne parfaitement maintenant. Encore une fois, merci infiniment pour votre aide. Votre contribution a été essentielle pour résoudre mon problème. Un grand merci
 

Statistiques des forums

Discussions
313 193
Messages
2 096 080
Membres
106 490
dernier inscrit
fabintou