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 :

Macro déterminer une plage de tableau automatiquement


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2018
    Messages : 12
    Par défaut Macro déterminer une plage de tableau automatiquement
    Bonjour,

    J'ai un fichier excel qui contient une macro pour ouvrir un autre fichier excel. Ce deuxième fichier excel est un fichier extrait de mon outil de travail. Ce fichier contient des titres avec des champs par exemple : Nom prénom adresse etc etc. Ces informations doivent être classées dans un tableau.
    J'aimerai que ce tableau soit défini automatiquement en fonction de la dernière ligne rempli en A par exemple A25 et qu'il se termine par la dernière colonne rempli par exemple BG25

    Pour le premier fichier excel la macro fonctionne parfaitement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub Test()
        Dim classeur As Workbook
     
            With Application.FileDialog(1)
                .AllowMultiSelect = False
                If .Show = -1 Then Set classeur = Workbooks.Open(.SelectedItems(1))
            End With
     
            If Not classeur Is Nothing Then MsgBox classeur.Name
     
    End Sub
    Pour le second j'ai fait une macro (via le bouton sur excel --") qui me regroupe toute ces données dans un tableau.
    Mais les fichiers excel que j'extrait chaque semaine ne fait pas forcement toujours la meme taille.
    Parfois j'ai 20 personnes avec 6 colonnes, parfois 15 personnes avec 8 colonnes.

    J'aimerai comprendre comment faire une macro qui détermine la plage du tableau automatiquement.

    Voici le code ou je cré un tableau de A1 à BG26 alors que j'aimerai qu'il calcule tout seul que le tableau va de tant à tant... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
        ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$BG$26"), , xlYes).Name = _
            "Tableau1"
        Range("Tableau1[#All]").Select
    Ce que j'aimerai c'est qu'il détermine tout seul la dernière colonne (BG) et la dernière ligne (26) en faisant un if empty -1 par exemple.
    J'espere que vous comprendrez ma demande.

    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2018
    Messages : 12
    Par défaut
    Je pourrai par exemple faire cela pour la colonne A ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    derniereLigne = Range("A" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne A
    Et ceci pour la dernière colonne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    derniereColonne = Cells(1, Columns.Count).End(xlToLeft).Column 'n° de la dernière colonne non vide de la ligne 1
    Mais comment modifier ma syntaxe de création de tableau ?

    Merci a vous

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Un truc comme ça?

    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
    Sub Test()
        Dim classeur As Workbook
        Dim LastRow As Long, LastCol As Integer
     
            With Application.FileDialog(1)
                .AllowMultiSelect = False
                If .Show = -1 Then
                    Set classeur = Workbooks.Open(.SelectedItems(1))
                    'On pointe le classeur
                    'Il faudra adapter la feuille, voir même boucler pour faire toutes les feuillles?
                    With classeur.Worksheets(1)
                        'On cherche la dernière ligne (de la colonne A)
                        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
                        'Idem pour la colonne
                        'Ici la ligne controler est la ligne 1, a adapter selon le besoin
                        LastCol = .Cells(1, .Columns.Count).end(xltoleft).Column
                    End With
     
            End With
     
            If Not classeur Is Nothing Then MsgBox classeur.Name
     
    End Sub
    Je n'ai pas testé le code

    Tu as aussi UsedRange qui peut t'aider à déterminer la plage de cellules utilisée dans une feuille mais regarde bien l'aide pour avoir les détails

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2018
    Messages : 12
    Par défaut
    Merci pour ta réponse.
    Ok mais la ca ne me cré pas mon tableau ?
    Il me manque juste le code pour ajouter LastCol et LastRow à la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$BG$26"), , xlYes).Name = _
            "Tableau1"

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Re

    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
    Sub Test()
        Dim classeur As Workbook
        Dim LastRow As Long, LastCol As Integer
     
            With Application.FileDialog(1)
                .AllowMultiSelect = False
                If .Show = -1 Then
                    Set classeur = Workbooks.Open(.SelectedItems(1))
                    'On pointe le classeur
                    'Il faudra adapter la feuille, voir même boucler pour faire toutes les feuillles?
                    With classeur.Worksheets(1)
                        'On cherche la dernière ligne (de la colonne A)
                        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
                        'Idem pour la colonne
                        'Ici la ligne controler est la ligne 1, a adapter selon le besoin
                        LastCol = .Cells(1, .Columns.Count).Column
                        'On crée le tableau
                        With .ListObjects.Add(xlSrcRange, .Range("A1", .Cells(LastRow, LastCol)), , xlYes)
                            .Name = "Tableau1"
                        End With
                    End With
     
            End With
     
            If Not classeur Is Nothing Then MsgBox classeur.Name
    End Sub
    Tu peux tester ça aussi, par contre il faut bien que le tableau commence en A1 (ça c'est bon) et il ne faut pas que la feuille contienne autre chose que ton tableau (?).

    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
    Sub TestBis()
        Dim classeur As Workbook
        Dim LastRow As Long, LastCol As Integer
     
            With Application.FileDialog(1)
                .AllowMultiSelect = False
                If .Show = -1 Then
                    Set classeur = Workbooks.Open(.SelectedItems(1))
                    'On pointe le classeur
                    'Il faudra adapter la feuille, voir même boucler pour faire toutes les feuillles?
                    With classeur.Worksheets(1)
                        'On crée le tableau
                        With .ListObjects.Add(xlSrcRange, .UsedRange, , xlYes)
                            .Name = "Tableau1"
                        End With
                    End With
     
            End With
     
            If Not classeur Is Nothing Then MsgBox classeur.Name
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour

    S'il n'y a ni ligne vide, ni colonne vide
    te donne le Range
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [A1].currentregion.address
    te donne la référence de la plage
    eric

    Qwazerty : je me méfie de usedRange, il faudrait avoir eu un exemple de ses fichiers

Discussions similaires

  1. [OpenOffice][Tableur] [Macro] Fusionner une plage de cellule
    Par Jgotheboss dans le forum OpenOffice & LibreOffice
    Réponses: 5
    Dernier message: 26/06/2016, 18h41
  2. Lancer une macro si une plage de cellule n'est pas sélectionnée
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/01/2014, 16h15
  3. [XL-2007] Comparer une plage à un tableau
    Par apt dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 30/04/2012, 08h30
  4. generaliser une macro sur une plage de données
    Par Eausport dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/07/2011, 10h49
  5. appliquer une macro a une plage de cellule variable
    Par johndeuf dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/11/2006, 16h18

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