IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Impression d'une zone dans un tableau et masquer une zone


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut Impression d'une zone dans un tableau et masquer une zone
    Bonjour,

    dans ma feuille j'ai deux tableaux comme suite:

    Tableau 1:

    A1:AM188


    Tableau 2:

    F193:AD218

    je veux créer une macro pour:

    l'impression de début de tableau 1 jusqu'au la dernière ligne qui est remplie donc pas tout le tableau

    tout le tableau 2

    Merci d'avance

  2. #2
    Membre actif
    Inscrit en
    Février 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 208
    Points : 246
    Points
    246
    Par défaut
    bonjour

    essaye ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
        'Tableau1
        NumPremièreLigne = 1
        NumDernièreLigne = Range("A1").End(xlDown).Row
        Range("A" & NumPremièreLigne & ":AM" & NumDernièreLigne).Select
        ActiveSheet.PageSetup.PrintArea = Selection.Address
        ActiveSheet.PrintPreview
        'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
        'Tableau2
        Range("F193:AD218").Select
        ActiveSheet.PageSetup.PrintArea = Selection.Address
        ActiveSheet.PrintPreview
        'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    End Sub
    j'ai volontairement neutralisé le processus d'impression ('ActiveWindow.SelectedSheets.PrintOut ...) car avant d'imprimer, il faudra que tu règles les marges de ta feuille, ...
    Par contre tu as un aperçu avant impression.

    à plus

  3. #3
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Pour imprimer sur l'imprimante définie par défaut, il faut :
    1. définir la zone d'impression
    2. lancer l'impression

    Ce qui donnerait pour ton premier tableau 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Sheets("TaFeuille")
        .PageSetup.PrintArea = "$A$1:$AM$" & Range("AM189").End(xlUp).Row
        .PrintOut Copies:=1, Collate:=True
    End With
    et pour le tableau 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Sheets(3)
        .PageSetup.PrintArea = "$F$193:$AD$218"
        .PrintOut Copies:=1, Collate:=True
    End With
    Si tu veux lancer les impressions sur une autre imprimante que celle définie par défaut, un ptit truc tout simple, tu actionnes l'enregistreur de macro, tu lances une impression en modifiant tous les paramètres que tu veux, tu arrêtes l'enregistreur de macro et tu pourras voir dans cette nouvelle macro enregistrée les paramètres nom de l'imprimante, format de feuille, mise en page, etc...
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Le Pierre Voir le message
    bonjour

    essaye ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
        'Tableau1
        NumPremièreLigne = 1
        NumDernièreLigne = Range("A1").End(xlDown).Row
        Range("A" & NumPremièreLigne & ":AM" & NumDernièreLigne).Select
        ActiveSheet.PageSetup.PrintArea = Selection.Address
        ActiveSheet.PrintPreview
        'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
        'Tableau2
        Range("F193:AD218").Select
        ActiveSheet.PageSetup.PrintArea = Selection.Address
        ActiveSheet.PrintPreview
        'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    End Sub
    j'ai volontairement neutralisé le processus d'impression ('ActiveWindow.SelectedSheets.PrintOut ...) car avant d'imprimer, il faudra que tu règles les marges de ta feuille, ...
    Par contre tu as un aperçu avant impression.

    à plus


    Bnjour et merci pour votre aide

    pour le deuxième tableau c'est ok

    pour le premier non , voici ce qu'il m'a imprimé:





    alors que le tableau est comme ça:




    Je veux aussi que la macro imprime directement

    merci encore

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par fring Voir le message
    Bonjour,

    Pour imprimer sur l'imprimante définie par défaut, il faut :
    1. définir la zone d'impression
    2. lancer l'impression

    Ce qui donnerait pour ton premier tableau 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Sheets("TaFeuille")
        .PageSetup.PrintArea = "$A$1:$AM$" & Range("AM189").End(xlUp).Row
        .PrintOut Copies:=1, Collate:=True
    End With
    et pour le tableau 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Sheets(3)
        .PageSetup.PrintArea = "$F$193:$AD$218"
        .PrintOut Copies:=1, Collate:=True
    End With
    Si tu veux lancer les impressions sur une autre imprimante que celle définie par défaut, un ptit truc tout simple, tu actionnes l'enregistreur de macro, tu lances une impression en modifiant tous les paramètres que tu veux, tu arrêtes l'enregistreur de macro et tu pourras voir dans cette nouvelle macro enregistrée les paramètres nom de l'imprimante, format de feuille, mise en page, etc...


    ça marche très bien

    mais je veux copier le bouton de l'impression dans 15 autres feuilles (au total 16) donc le bouton va m'imprimer la feuille d'origine ou le bouton a été copié n'est ce pas?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Sheets("TaFeuille")
    Faut-il remplacer ça ?


    ------------------------------------------------


    Me revoilà

    ça marche pour toutes les autres page comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Image6_Clic()
        With ActiveSheet
        .PageSetup.PrintArea = "$A$1:$AM$" & Range("AM189").End(xlUp).Row
        .PrintOut Copies:=1, Collate:=True
    End With
         With ActiveSheet
        .PageSetup.PrintArea = "$F$193:$AD$218"
        .PrintOut Copies:=1, Collate:=True
    End With
    End Sub
    le malheur est que si une case est vide dans la ligne toute la ligne ne s'imprime pas

  6. #6
    Membre actif
    Inscrit en
    Février 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 208
    Points : 246
    Points
    246
    Par défaut
    bonjour

    je n'ai pas pu voir l'image de ton tableau avant et après
    est-ce que tu as bien des données à partir de A1 ?
    est-ce qu'il n'y a pas de cellules vides dans la colonne A entre la 1ère et la dernière ligne ?

    pour imprimer directement il suffit d'enlever le ' devant :
    'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    et de mettre ' devant ActiveSheet.PrintPreview
    à plus

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu peux tester deux choses : Si "AM" est bien la dernière colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        .PageSetup.PrintArea = Range("A1").CurrentRegion.Address
    'ou
        .PageSetup.PrintArea = Range("A1:" & Range("A1").SpecialCells(xlCellTypeLastCell).Address).Address
    Avant d'utiliser la seconde ligne, ton fichier doit être enregistré. Sans enregistrement préalable, la plage reste inchangée en cas de suppression de ligne ou de colonne.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par kazannova Voir le message
    le malheur est que si une case est vide dans la ligne toute la ligne ne s'imprime pas
    C'est une sorte de vérification que mon tableau est bien rempli :-)

    merci pour tous ceux qui m'ont aidé

    bonne nuit

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Excusez moi pour cet arsenal de questions car je suis entrain de finaliser une application excel qui m'a pris presque 3 mois (plus de 60 feuilles) mais je suis nul en VBA

    je veux imprimer dans un tableau:

    A1:J35 si I5=1
    A1:J71 si I5=2
    A1:J107 si I5=3
    A1:J143 si I5=4
    A1:J179 si I5=5
    A1:J215 si I5=6
    A1:J251 si I5=7
    A1:J288 si I5=8
    A1:J324 si I5=9
    A1:J360 si I5=10


    Merci d'avance

  10. #10
    Membre actif
    Inscrit en
    Février 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 208
    Points : 246
    Points
    246
    Par défaut
    bonjour

    tu pourrais procéder ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        If Range("I5").Value = 1 Then ActiveSheet.PageSetup.PrintArea = "A1:J35": ActiveSheet.PrintOut
        If Range("I5").Value = 2 Then ActiveSheet.PageSetup.PrintArea = "A1:J71": ActiveSheet.PrintOut
        '...
    à plus

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Et avec select case, ce ne serait pas plus...heu... enfin plus quoi !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Select case Range("I5").Value
        Case 1
             ActiveSheet.PageSetup.PrintArea = "A1:J35": ActiveSheet.PrintOut
        Case 2
             ActiveSheet.PageSetup.PrintArea = "A1:J71": ActiveSheet.PrintOut
        Case 3
             ...
        etc
    End select
    ça éviterait de parcourir tous les If, non ?
    Bonne journée

  12. #12
    Membre actif
    Inscrit en
    Février 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 208
    Points : 246
    Points
    246
    Par défaut
    Bonjour Ouskel'n'or
    Effectivement c'est beaucoup plus propre.
    à plus

  13. #13
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    J'ai opté pour la méthode de ouskel'n'or tant que vous êtes tous les deux d'accord et je vous remercie infiniment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub impperman()
    Select Case Range("I5").Value
        Case 1
             ActiveSheet.PageSetup.PrintArea = "A1:J35": ActiveSheet.PrintOut
        Case 2
             ActiveSheet.PageSetup.PrintArea = "A1:J71": ActiveSheet.PrintOut
        Case 3
             ActiveSheet.PageSetup.PrintArea = "A1:J107": ActiveSheet.PrintOut
        Case 4
             ActiveSheet.PageSetup.PrintArea = "A1:J143": ActiveSheet.PrintOut
        Case 5
             ActiveSheet.PageSetup.PrintArea = "A1:J179": ActiveSheet.PrintOut
        Case 6
             ActiveSheet.PageSetup.PrintArea = "A1:J215": ActiveSheet.PrintOut
        Case 7
             ActiveSheet.PageSetup.PrintArea = "A1:J251": ActiveSheet.PrintOut
        Case 8
             ActiveSheet.PageSetup.PrintArea = "A1:J288": ActiveSheet.PrintOut
        Case 9
             ActiveSheet.PageSetup.PrintArea = "A1:J324": ActiveSheet.PrintOut
        Case 10
             ActiveSheet.PageSetup.PrintArea = "A1:J360": ActiveSheet.PrintOut
     
    End Select
    End Sub
    J'ai une autre idée auquelle je ne sais pas le code:

    toujours avec même tableau :-)

    si la case J8 est vide je veux masquer "A1:J35"
    si la case J45 est vide je veux masquer "A1:J71"
    si la case J81 est vide je veux masquer "A1:J107"
    si la case J117 est vide je veux masquer "A1:J143"
    si la case J153 est vide je veux masquer "A1:J179"
    si la case J189 est vide je veux masquer "A1:J215"
    si la case J225 est vide je veux masquer "A1:J251"
    si la case J262 est vide je veux masquer "A1:J288"
    si la case J298 est vide je veux masquer "A1:J324"
    si la case J334 est vide je veux masquer "A1:J360"

    puis dans quelle place je vais ecrire le code tant qu'il n'est pas lié à un bouton

    Merci encore

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu ne pourras pas masquer une plage mais la ligne toute entière. Tu sais ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Tablo1 as variant, Tablo2 as variant, i as integer
        Tablo1 = Array("J8", "J45", "J81", "J117", etc. ) 'pas oublier les guillemets
        Tablo2 = Array("A1:J35", "A1:J71", "A1:J107", etc.)
        For i = 0 to Ubound(Tablo1) -1
              If isempty(range(Tablo1(i))) then Range(Tablo2(i)).entirerow.hidden = True
        Next
    Pas testé, donc sans filet

  15. #15
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Ou deverai-je ecrire ce code?

    pas de quelque chose comme? Sub ..........() ? au début et End Sub à la fin

    j'ai oublié de mentionner que les cellules J8 J45 J81 ... ne sont pas réelement vide car elles contiennent des fonctions comme: =SI(A48="";"";2)

    ET pour ne pas compliquer les choses j'ai changé les fonctions =SI(A48="";"";un nombre) par =SI(A48="";0;un_nombre_donné)

    donc la condition pour cacher les zonnes données est réelement la suivante:


    si la case J8=0 je veux masquer "A1:J360"
    si la case J45=0 je veux masquer "A38:J360"
    si la case J81=0 je veux masquer "A74:J360"
    si la case J117=0 je veux masquer "A110:J360"
    si la case J153=0 je veux masquer "A146:J360"
    si la case J189=0 je veux masquer "A182:J360"
    si la case J225=0 je veux masquer "A218:J360"
    si la case J262=0 je veux masquer "A255:J360"
    si la case J298=0 je veux masquer "A291:J360"
    si la case J334=0 je veux masquer "A327:J360"

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Essaie de comprendre ce que j'ai écrit et adapte.
    A la place de if isempty Range(..........) mets
    if range(Tablo...........) = ""
    Pour le reste, rien de changé.
    Bonne soirée

  17. #17
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    j'ai tésté ça et ça marche bien si le code est associé à un bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test ()
    Dim Tablo1 As Variant, Tablo2 As Variant, i As Integer
        Tablo1 = Array("J8", "J45", "J81", "J117", "J153", "J189", "J225", "J262", "J298", "J334")  'pas oublier les guillemets
        Tablo2 = Array("A1:J360", "A38:J360", "A74:J360", "A110:J360", "A146:J360", "A182:J360", "A218:J360", "A255:J360", "A291:J360", "A327:J360")
        For i = 0 To UBound(Tablo1) - 1
              If Range(Tablo1(i)) = 0 Then Range(Tablo2(i)).EntireRow.Hidden = True
        NextEnd Sub
    mais je veux pas cliquer chaque fois sur le bouton pour cacher les zones inutiles je veux que ça soit automatique

    aussi lorsque la cellule différe de zero il faut que le tableau s'affiche automatiquement aussi



    merci

  18. #18
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Maintenant ça marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Tablo1 As Variant, Tablo2 As Variant, i As Integer
        Tablo1 = Array("J8", "K8", "L8", "M8", "N8", "O8", "P8", "Q82", "R8", "S8")  'pas oublier les guillemets
        Tablo2 = Array("A1:J360", "A38:J360", "A74:J360", "A110:J360", "A146:J360", "A182:J360", "A218:J360", "A255:J360", "A291:J360", "A327:J360")
        For i = 0 To UBound(Tablo1) - 1
              If Range(Tablo1(i)) = 0 Then Range(Tablo2(i)).EntireRow.Hidden = False
        Next
     
    End Sub

    Mais si le tableau est caché, il n'apparaitra plus même si la case de la condition n'est plus 0

  19. #19
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par kazannova lui-même
    Mais si le tableau est caché, il n'apparaitra plus
    ..............................................!?!
    ....................Y'a pas à dire, c'est affeux ce qu'il t'arrive !

    ..............................................

  20. #20
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Pour préciser:

    exemple
    lorsque "K8" = 0 le tableau "A38:J360" est devenu invisible (c'est bon) MAIS après lorsque "K8" deviendra différent de 0 le tableau "A38:J360" reste toujours invisible alors qu'il doit devenir visible n'est ce pas?

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/06/2015, 11h14
  2. Réponses: 2
    Dernier message: 07/04/2013, 23h56
  3. Réponses: 2
    Dernier message: 18/11/2012, 11h25
  4. Masquer une colonne dans un tableau sous ffx
    Par Mengué georges dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 15/02/2010, 08h57
  5. Affichage d'un tableau provenant d'une requete dans un tableau HTML
    Par w0lf dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/06/2006, 19h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo