Problème de macro avec zone d'impression

erikess

XLDnaute Junior
Bonsoir,

J'ai un souci de zone d'impression sur un fichier excel comprenant une macro de relances autos sur plusieurs clients à la suite.
Un peu d'explication :
Mon classeur comprend 5 feuilles, 2 s'éditent :
1 lettre qui s'édite avec la macro (onglet A)
1 relevé de compte client qui s'édite avec la macro (B)
puis :
1 liste de client à traiter (C)
1 liste d'adresses de clients (D)
1 base extraite des comptes clients (E)
CDE ne s'éditent pas

La macro démarre avec le bouton bleu de l'onglet A auquel est attaché la macro

Le fonctionnement de la macro est le suivant :
En fonction du n° de client sélectionné dans C, la macro va prendre les données correspondantes de l'onglet E pour les mettre en B. Cela par un filtre avancé.

Mon problème c'est l'impression de l'onglet B, je ne parviens pas à ce que la macro délimite correctement la zone d'impression juste avant d'éditer l'onglet B (et ensuite supprimer les lignes correspondantes pour faire place nette pour le prochain client).

Pourriez-vous m'aider svp ? Je met le fichier en pièce jointe !

Un grand merci d'avance

Erikess
 

Pièces jointes

  • Relances auto test.xlsm
    129.1 KB · Affichages: 50

vgendron

XLDnaute Barbatruc
Re : Problème de macro avec zone d'impression

Hello

avant d'aller déjeuner..
ci joint une propostion de code allégé ;-)

Code:
Sub test7()
'
' test7 Macro
'
    'pour chaque client de la liste nommée "ClientATraiter" dans la feuille liste
    For Each client In Range("ClientATraiter")
        MsgBox client
        
        'recopie du client en B14 de la feuille "relance"
        Sheets("relance").Range("B14") = client
        
        fin = Sheets("Relevé").Range("A:A").Count
        nb = Sheets("Relevé").Range("A" & fin).End(xlUp).Row
        'on applique le filtre elaboré et on colle directement le résultat dans la feuille "compte"
        Sheets("relevé").Range("A2:J" & nb).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets _
        ("relance").Range("B13:B14"), CopyToRange:=Sheets("compte").Range("A2:J2"), Unique:=False
        
        'définition de la zone d'impression
        Max = Sheets("compte").Range("A" & fin).End(xlUp).Row
        Sheets("compte").PageSetup.PrintArea = "$A$1:$J$" & Max
        
        'impression
        Sheets("compte").Select
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
        
        'penser à faire un clear de la feuille compte
        Range("$A$1:$J$" & Max).Clear
    Next client
End Sub

1) dans ta feuille "liste", il faut nommer la zone A1:A7 comme étant "ClientATraiter"
ensuite; suis pas allé jusqu'à tester l'impression..
 

Pièces jointes

  • Relances auto test (1).xlsm
    114.6 KB · Affichages: 48

vgendron

XLDnaute Barbatruc
Re : Problème de macro avec zone d'impression

Avec une modif pour retrouver la formule somme en J1 de la feuille compte
et demander confirmation de l'impression
Code:
Sub test7()
'
' test7 Macro
'
    'pour chaque client de la liste nommée "ClientATraiter" dans la feuille liste
    For Each client In Range("ClientATraiter")
        MsgBox client
        
        'recopie du client en B14 de la feuille "relance"
        Sheets("relance").Range("B14") = client
        
        fin = Sheets("Relevé").Range("A:A").Count
        nb = Sheets("Relevé").Range("A" & fin).End(xlUp).Row
        'on applique le filtre elaboré et on colle directement le résultat dans la feuille "compte"
        Sheets("relevé").Range("A2:J" & nb).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets _
        ("relance").Range("B13:B14"), CopyToRange:=Sheets("compte").Range("A2:J2"), Unique:=False
        
        'définition de la zone d'impression
        Max = Sheets("compte").Range("A" & fin).End(xlUp).Row
        Sheets("compte").PageSetup.PrintArea = "$A$1:$J$" & Max
        
        formule = "=somme(J3:J" & Max & ")"
        Sheets("compte").Range("J1").FormulaLocal = formule
        
        'impression
        impression = MsgBox("Souhaitez vous imprimer?", vbYesNo)
        If impression = vbYes Then
            Sheets("compte").Select
            ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
            IgnorePrintAreas:=False
        End If
        
        'penser à faire un clear de la feuille compte
        Range("$A$1:$J$" & Max).Clear
    Next client
End Sub
 
Dernière édition:

PMO2

XLDnaute Accro
Re : Problème de macro avec zone d'impression

Bonjour,

Une piste avec le code suivant (la cellule A1 de la feuille liste doit être renseignée sinon la macro cesse son exécution)
Code:
Sub test7()
Application.ScreenUpdating = False
Do
  If Sheets("liste").Range("A1") = "" Then
    Application.ScreenUpdating = True
    MsgBox "Il n'y a rien dans la cellule A1 de la feuille ''liste''"
    Exit Sub
  End If
  '---
  Sheets("liste").Range("A1").Copy Destination:=Sheets("relance").Range("B14")
  Sheets("relevé").Range("A2:J856").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets _
    ("relance").Range("B13:B14"), CopyToRange:=Sheets("compte").Range("A2"), Unique:=False
  '---
'  Sheets("relance").PrintPreview  'pour l'aperçu d'impression
  Sheets("relance").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
  '---
  Sheets("compte").PageSetup.PrintArea = Sheets("compte").[a1].CurrentRegion.Address
'  Sheets("compte").PrintPreview  'pour l'aperçu d'impression
  Sheets("compte").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
  '---
  Sheets("compte").Range("a2:a" & Sheets("compte").Range("a2").End(xlDown).Row & "").EntireRow.Delete
  Sheets("liste").[a1].Delete Shift:=xlUp
  Application.CutCopyMode = False
Loop
End Sub
 

Pièces jointes

  • Relances auto test_pmo.xlsm
    103.3 KB · Affichages: 41

Discussions similaires

Réponses
6
Affichages
447
Réponses
3
Affichages
274
Réponses
7
Affichages
479
Compte Supprimé 979
C

Statistiques des forums

Discussions
311 709
Messages
2 081 756
Membres
101 812
dernier inscrit
trufu