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 :

Identification de la dernière colonne / Définition zone d'impression [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 7
    Points : 9
    Points
    9
    Par défaut Identification de la dernière colonne / Définition zone d'impression
    Bonjour,
    Grâce à divers posts que j'ai consultés, je sais identifier la dernière colonne non vide d'une feuille. Mais il y a une étape de mon code où je ne parviens pas à le mettre en place. Sur une feuille Excel, j'ai plusieurs tableaux issus d'un premier traitement. Ces tableaux n'ont pas le même nombre de colonnes en raison de la longueur de certains champs issus du premier traitement (cf "FichierBase"). Je fais une macro insérant chaque tableau dans un nouvel onglet, et le titre de la feuille principale "résultats" est également recopié sur chaque nouvel onglet.
    Je souhaite automatiser la zone d'impression et la définir sur la largeur du tableau (égal au nombre de colonnes non vides), mais c'est là que je ne parviens pas bien à compter le nombre de colonnes non vides: pour chaque onglet, le nombre de colonnes affichées (et donc imprimées) est égal au nombre de colonnes maximum dans les tableaux de l'onglet initial "résultats" (cf "FichierObtenu").

    FichierBase.xlsm
    FichierObtenu.xlsm

    Alors pour économiser du papier, comment puis-je faire? Merci de votre aide!

    Je mets également le code ici pour plus de lisibilité
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Sub SeparerSection()
        Dim i As Integer
        Dim j As Integer
        Dim NomOnglet As String
        Dim DerniereLigne As Integer
        Dim Feuille As Worksheet
     
        'Mise en forme pour gérer la zone d'impression finale: fond transparent
            Sheets("Résultats").Activate
            Cells.Select
            With Selection.Interior
                .Pattern = xlNone
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
     
            'Dernière ligne absolue de la feuille
            DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row
     
            For i = 1 To DerniereLigne
                If Cells(i, 1).Font.Size = 14 Then
                    NomOnglet = Cells(i, 1)
     
                    Set Feuille = Sheets.Add(After:=Sheets(Sheets.Count))
                    Feuille.Name = NomOnglet
                    Sheets("Résultats").Activate
     
                    j = i + 1
                    Do While Cells(j, 1).Font.Size <> 14
                        j = j + 1
                        'Gestion de la fin du fichier
                        If j = DerniereLigne Then
                        Exit Do
                        End If
                    Loop
     
                    Range(Rows(i), Rows(j - 2)).Select
                    Selection.EntireRow.Cut
                    Feuille.Paste
                    Feuille.Activate
                    Call MiseEnForme1
                    Set Feuille = Nothing
     
                    'Copier l'en-tête de l'onglet "Résultats" et l'insérer en haut de chaque nouvel onglet
                    Sheets("Résultats").Select
                    Selection.Delete Shift:=xlUp
                    Sheets("Résultats").Select
                    Rows("1:5").Select
                    Selection.Copy
                    Sheets(NomOnglet).Select
                    Rows("1:1").Select
                    Selection.Insert Shift:=xlDown
                    Call MiseEnForme2
                    Sheets("Résultats").Activate
                End If
            Next
    End Sub
     
    Sub MiseEnForme1()
        Dim k As Integer
        Dim DerCol As Integer
     
        'suppression des colonnes vides
        DerCol = Range("A1").SpecialCells(xlCellTypeLastCell).Column
        For k = DerCol To 1 Step -1
            If Cells(65536, k).End(xlUp).Row = 1 Then
                Cells(1, k).EntireColumn.Delete
            End If
        Next
    End Sub
     
    Sub MiseEnForme2()
        Dim DerL As Integer
        Dim DerC As Integer
     
        'Affichage en mode saut de page
        ActiveWindow.View = xlPageBreakPreview
     
        'Définition de la zone d'impression
        DerL = Range("A1").SpecialCells(xlCellTypeLastCell).Row
        DerC = Range("A1").SpecialCells(xlCellTypeLastCell).Column
        ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(DerL, DerC)).Address
        Range("A1:F1").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,

    il existe bien d'autres façon de calculer la dernière colonne, comme tu as des soucis avec ta façon (attention j'ai pas dis qu'elle n'était pas bien)

    je t'en propose une autre que j'utilise très couramment.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Calc_dern_Lig_Col()
       Dim NomF As String
       NomF = "Feuil1"
     
       MsgBox "Ligne : " & ThisWorkbook.Worksheets(NomF).UsedRange.Rows.Count & vbCrLf & _
       "Colonne : " & ThisWorkbook.Worksheets(NomF).UsedRange.Columns.Count
     
    End Sub
    tu dis

    A+

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    Merci pour la réponse. Le bon nombre de colonnes est renvoyé, mais pourquoi la zone d'impression ne correspond-elle pas à cette dernière colonne? Ceci fonctionne pourtant sur la dernière ligne.
    Merci.

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    ça y est, j'y suis parvenue. Un grand merci! En effet, c'est la manière de compter la colonne qui ne fonctionnait pas, la nouvelle formule fonctionne.

  5. #5
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 272
    Points
    11 272

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

Discussions similaires

  1. Colonne de zone de liste dans requete ajout
    Par kgb1917 dans le forum IHM
    Réponses: 7
    Dernier message: 04/06/2007, 17h42
  2. Dernière colonne de chaque ligne
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/05/2007, 11h33
  3. format colonnes differentes zone de liste
    Par yoyoo dans le forum Access
    Réponses: 3
    Dernier message: 18/07/2006, 20h01
  4. Colonne de zone de liste avec separateur millier
    Par uloaccess dans le forum Access
    Réponses: 3
    Dernier message: 11/01/2006, 16h28
  5. Réponses: 4
    Dernier message: 31/10/2005, 18h37

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