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 :

Problème de condition dans une bouche WHILE [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Septembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2014
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Problème de condition dans une bouche WHILE
    Bonjour à tous !!

    Afin de faciliter la mise en forme de fichiers Excel, j'ai essayé de créer une macro sous Excel avec mes notions de débutante.

    Mon projet est le suivant: J'ai crée une boucle pour supprimer tous les sauts de pages et intégrer des nouveaux sauts toutes les 60 lignes, jusqu'à la fin de mon tableau. Je ne souhaites pas avoir de sauts de page après la dernière ligne utilisée. L'ajout des bordures est pour l'impression car ces dernières disparaissent lors de l'aperçu avant impression.

    Pour cela:
    - je déclare une variable "Dern_Saut_Page" qui récupère la dernière ligne utilisée
    - la condition d'application de la boucle est la différence entre la "Dern_Saut_Page" et la ligne du saut de page à intégrer. Si elle est négative, on est en dessous du tableau.

    Mon problème avec la boucle suivante est qu'un dernier saut de page est crée et surtout les bordures apparaissent en dessous du tableau. Comment procéder, s'il vous plait, pour ne pas créer ce dernier saut de page??

    Je vous remercie par avance de votre aide.

    Voici le code de ma macro:

    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
    26
    27
    28
    29
    30
    31
     
    Sub MEF_DETAIL()
    'Mettre en forme la page "DETAIL"
     
    Dim h As Integer
    Dim Dern_Saut_Page As Integer
     
    Sheets("DETAIL").Select
     
    'Supprimer tous les sauts de pages automatiques
    Sheets("DETAIL").ResetAllPageBreaks
     
    ' Insérer des sauts de page toutes les 60 lignes
     h = 60
     
     Dern_Saut_Page = Range("A" & Rows.Count).End(xlUp).Row
      [A9].Select
     
       Do While (Dern_Saut_Page - ActiveCell.Offset(h - 1, 0).Row) > 0
        'MsgBox (Dern_Saut_Page - ActiveCell.Offset(h - 1, 0).Row)
         ActiveCell.Offset(h, 0).Select
         ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
         ActiveCell.Offset(h - 1, 0).Borders(xlEdgeBottom).LineStyle = xlContinuous
         ActiveCell.Offset(h - 1, 1).Borders(xlEdgeBottom).LineStyle = xlContinuous
         ActiveCell.Offset(h - 1, 2).Borders(xlEdgeBottom).LineStyle = xlContinuous
         ActiveCell.Offset(h - 1, 3).Borders(xlEdgeBottom).LineStyle = xlContinuous
         ActiveCell.Offset(h - 1, 4).Borders(xlEdgeBottom).LineStyle = xlContinuous
        Loop
    Range("A1").Select
     
    End Sub

  2. #2
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Personnellement j'aurais pas fait comme cela (attention je dis pas que c'est mauvais mais il me semble qu'il y a plus simple surtout quand on débute)

    Avec l'utilisation de l'objet Cells (Cells(N°ligne, N°Colonne) on peut facilement se déplacer sur les cellules.

    algo proposé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ' J'apelle lign une variable qui contient mon N°ligne
    Lign =1 
    faire tant que valeur de la cellule(lign,1) <>""
         'ici je fait mes bordures
         si Lign = 60 alors
              ' ici mon saut de page
              lign = 0
         fin si
         lign = lign+1
    boucle
    pour avoir la valeur d'une cellule en VBA c'est : cells(lign,1).value (si je considère que mon test est sur la 1ère colonne)

    tu dis, si tu as des doutes n'hésite pas

    Peut-être peux tu mettres un fichier sans données sensible pour clarifié tes demandes (voir 1er post de Pierre Fauconnier sur le Forum)

    A Bientôt

  3. #3
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Teste ceci. Evite autant que possible les "Select et autres Activate, ça ralentit et en plus ça fait scintiller l'écran ce qui est plutôt désagréable :
    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
    26
    27
    28
    29
    30
    31
     
    Sub MEF_DETAIL()
     
        Dim Fe As Worksheet
        Dim h As Integer
        Dim Dern_Saut_Page As Integer
     
        Set Fe = Sheets("DETAIL")
     
        With Fe
     
            'Supprimer tous les sauts de pages automatiques
            .ResetAllPageBreaks
     
            Dern_Saut_Page = .Range("A" & .Rows.Count).End(xlUp).Row
     
            ' Insérer des sauts de page toutes les 60 lignes
            h = 60
     
            Do While h < Dern_Saut_Page
     
                .HPageBreaks.Add .Cells(h, 1)
                .Range(.Cells(h - 1, 1), .Cells(h - 1, 4)).Borders(9).LineStyle = 1
     
                h = h + 60
     
            Loop
     
        End With
     
    End Sub
    Hervé.

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Septembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2014
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Bonjour Theze,

    Je te remercie pour le code fourni qui a résolu mon problème de dernier saut de page.
    Par contre, mon tableau commence en ligne 9 et par conséquent, je souhaiterai intégrer les sauts de page qu'à partir de cette ligne.
    Pouvez- vous me dire comment je peux intégrer ceci dans votre code??

    Je vous remercie par avance.

    Jessica

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Il suffit de rajouter 9 à l'initialisation de la variable h (h = 69) :
    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
    26
    27
    28
    29
    30
    31
     
    Sub MEF_DETAIL()
     
        Dim Fe As Worksheet
        Dim h As Integer
        Dim Dern_Saut_Page As Integer
     
        Set Fe = Sheets("DETAIL")
     
        With Fe
     
            'Supprimer tous les sauts de pages automatiques
            .ResetAllPageBreaks
     
            Dern_Saut_Page = .Range("A" & .Rows.Count).End(xlUp).Row
     
            ' Insérer des sauts de page toutes les 60 lignes à partir de la ligne 9
            h = 69
     
            Do While h < Dern_Saut_Page
     
                .HPageBreaks.Add .Cells(h, 1)
                .Range(.Cells(h - 1, 1), .Cells(h - 1, 4)).Borders(9).LineStyle = 1
     
                h = h + 60
     
            Loop
     
        End With
     
    End Sub
    Hervé.

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Septembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2014
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Merci beaucoup !!!
    Bonjour !!

    Mieux vaut tard que jamais mais cela marche nickel.
    Merci beaucoup

    Jess

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/03/2009, 19h08
  2. [débutant] problème de condition dans une requete
    Par banker dans le forum Access
    Réponses: 5
    Dernier message: 22/03/2006, 14h52
  3. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 18h42
  4. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 19h07
  5. Réponses: 6
    Dernier message: 17/08/2005, 13h38

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