Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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: 42

Discussions similaires

Réponses
6
Affichages
487
Réponses
3
Affichages
299
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…