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 :

Selection auto de la zone d'impression


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Par défaut
    Bonjour,

    Comme vous pourrez le voir sur mon fichier, ma trrame est découpé en plusieurs pages

    Les données proviennent d'une extraction, puis sont insérer sur cette trame grâce à une macro

    Le soucis c'est qu'à chaque fois je dois spécifier manuellement ma zone d'impression, car à cause de ma trame, je ne sais pas comment faire en VBA

    Pourriez-vous m'aidez svp

    Merci par avance

    Voici une capture d'écran pour ceux qui ne peuvent pas ouvrir le fichier

  2. #2
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Bonjour,
    Je n'apporte pas la réponse mais je pose plutôt une question : pourquoi ne pas laisser Excel faire la mise en page ? Cela permettrait de n'avoir que les lignes pertinentes, et pas les quelques 30.000 lignes inutiles, et du coup plus besoin de définir de zone d'impression

  3. #3
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,

    Voici une méthode, il y a peut-être plus propre mais ça fonctionne.
    L'avantage avec la boucle et la "redéfinition" de la zone d'impression c'est qu'il ne faut pas la vidée.

    En espérant que mes commentaires soient explicites...


    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
    Sub SetPrint()
    Dim MaRech As Range
     
    With ActiveSheet.Range(Cells(2, 6), Cells(Columns(1).Cells.Count, 6)) 'Défini la plage de recherche hors ligne 1
        Set MaRech = .Find("PAGE", LookIn:=xlValues, lookat:=xlPart) 'Trouve le mot PAGE (pour déterminer début et fin de page)
     
        If Not MaRech Is Nothing Then
            firstAddress = MaRech.Address 'Permet de pas boucler sans fin
            Do
                If Application.Count(ActiveSheet.Range(Cells((MaRech.Row) - 58, 6), Cells(MaRech.Row, 6))) > 1 Then 'Vérifie si il y des données pour la page en cours
                    ActiveSheet.PageSetup.PrintArea = "$A$1:$I$" & MaRech.Row - 1 'Défini la plage d'impression
                Else
                    Exit Sub 'Sors de la procédure si rien sur la page en question
                End If
                Set MaRech = .FindNext(MaRech) 'Passe au mot Page suivant
            Loop While Not MaRech Is Nothing And MaRech.Address <> firstAddress 'Permet la boucle
        End If
    End With
     
    End Sub

  4. #4
    Membre éclairé
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Par défaut
    Re

    (je précise que toute mes demande concerne le même fichier )


    Je viens d'esayer mais ça ne fonctionne pas

  5. #5
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Citation Envoyé par wyzer Voir le message
    ...Je viens d'esayer mais ça ne fonctionne pas
    Qu'est ce qui ne fonctionne pas ?
    Bug (si oui quelle ligne), mise en page incorrecte,... ?

    J'ai testé chez moi et c'était nickel, donc faut m'endire plus...

    A+

  6. #6
    Membre éclairé
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Par défaut
    Désolé, en fait je n'ai pas message d'erreur, la macro se lance bien, mais une fois que je vérifie ma zone d'impression, elle n'a pas bougé

    j'ai un peu compris ton code, et on pourrait aussi faire un truc du ce genre :

    - on commence par le bas, et on cherche le dernier mot "PAGE"

    - puis on regarde si entre ce dernier mot "PAGE" et le mot "MATRICULE" de la même colonne juste au dessus s'il n'y a rien

    - s'il n'y a rien on remonte vers le mot "PAGE" suivant, etc...

    - s'il y a des des données, alors on défini un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveSheet.PageSetup.PrintArea = "$A$1:$I$" & Dernier_mot_PAGE_vérifié.Row - 1
    Non ?

  7. #7
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    C'est en effet une autre option, c'est dans la veine de ce que j'ai fait.

    As tu essayé mon code en pas à pas pour "voir" ce qui ne va pas, car même si tu trouve une solution tout seul (ce qui est très bien ) j'aimerais comprendre pourquoi ça ne fonctionne pas chez toi.

    A+

  8. #8
    Membre éclairé
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Par défaut
    Alors j'ai lancé pas à pas, et pour lui dans tous les cas c'est :

    Il ne va pas faire le reste

  9. #9
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Dans ce cas à vérifier pour la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Application.Count(ActiveSheet.Range(Cells((MaRech.Row) - 58, 6), Cells(MaRech.Row, 6))) > 1 Then 'Vérifie si il y des données pour la page en cours
    La feuille, par facilité j'ai utilisé Activesheet (ce qui est normalement déconseillé) donc tu peux adater la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Application.Count(Sheets("NomFeuille").Range(sheets("NomFeuille").Cells((MaRech.Row) - 58, 6), sheets("NomFeuille").Cells(MaRech.Row, 6))) > 1 Then
    La colonne, j'ai utilisé la colonne 6 (F) pour faire un "Count", voir si c'est bien une colonne qui contient des éléments pour une feuille à imprimer.

  10. #10
    Membre éclairé
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Par défaut
    Non ça ne fonctionne toujours pas

    Pour me simplifier la vie, je vais afficher des valeurs dans la colonne J, que je supprimerais à la fin de la macro

    Donc ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub test()
     
    Dim dl As Integer
     
    dl = Columns("J:J").Find("*", Range("J1"), , , xlByRows, xlPrevious).Row
     
    Cells(dl, 6).Select
     
    End Sub
    Avec ce code j'ai pu sélectionné la dernière cellule remplie de la colonne F (voir capture en pièce jointe)

    Maintenant, je bloque pour lui dire d'aller chercher le mot "PAGE" juste en dessous

    Après ça sera simple, j'aurais juste à adapter ta ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveSheet.PageSetup.PrintArea = "$A$1:$I$" & MaRech.Row - 1

  11. #11
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Tu peux garder le même principe, on va essayer avec cette nouvelle colonne, il te suffit alors de changer la ligne avec le Count par celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Application.Count(ActiveSheet.Range(Cells((MaRech.Row) - 58, 10), Cells(MaRech.Row, 10))) > 1 Then 'Vérifie si il y des données pour la page en cours
    A+

    P.S. Est-ce que tes calculs sont bien en automatique ?

  12. #12
    Membre éclairé
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Par défaut
    Ca fonctionne !!!!!!!!

    Encore merci !!!!!!!!!!!!


    PS: oui mes calculs sont bien en auto

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/10/2014, 11h53
  2. Réponses: 2
    Dernier message: 04/03/2013, 11h19
  3. Réponses: 8
    Dernier message: 10/03/2006, 02h05
  4. Vba excel agrandir la zone d'impression a droite
    Par mb95 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/12/2005, 08h42
  5. définir une zone d'impression sous Excel
    Par mirumoto dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/11/2005, 13h26

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