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 :

Charger un range depuis une autre feuille dans un userform [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut Charger un range depuis une autre feuille dans un userform
    Bonjour,

    J'ai un petit problème de syntaxe.

    Dans un userform je charge un range pour créer ma colonne de titre d'un listview.

    Cela fonctionne quand je déclenche le userform depuis la feuille concernée
    mais pas lorsque je l'appelle depuis une autre feuille
    J'ai aussi essayé de désigner la ligne de titre du tableau, mais cela ne fonctionne pas non plus.
    Je soupçonna que ma variable tblDB devrait etre plus proprement déclarée, mais j'ai essayé plusieurs type et ça ne fonctionne carrément plus.
    de plus l'erreur est de type 1004 donc il de reconnait pas le range que je veux charger dans tblDB.

    Alors que si j'utilise la selection range en dur cela fonctionne, mais comme le nombre de colonne peux varier, cela ne me convient pas.

    MErci pour vos conseils
    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
    Me.ListView1.ListItems.Clear
    With ListView1
            'Définit le nombre de colonnes et Entêtes
            With .ColumnHeaders
                'Supprime les anciens entêtes
                .Clear
                'Ajoute 2 colonnes en spécifiant le nom de l'entête
                'et la largeur des colonnes
                .Add , , "Titre ", 100
                .Add , , "Texte", 500
            End With
    .Gridlines = True
    
    Dim tblBD
    
    With ThisWorkbook.Sheets("FNC")
    
    ' ne marche pas
    'tblBD = ActiveSheet.ListObjects("Tableau1").HeaderRowRange '<== j'avais omis d'enlever Activesheet depuiis ca marche  (corrigé après avoir posté)
    ' ne marche pas
    'tblBD = .Cells(Cells(1, 1), Cells(1, Colo))  'Colo = variable '<==nb de colonnes la syntaxe c'est .Range.(cells (a,b),cells(c,d)) mais ça ne fonctionne pas quand  c'est appelé depuis une autre feuille (corrigé après avoir posté)
    ' Fonctionne
     tblBD = .Range("A1:BE1")
     
    End With
     
     Dim ligne
        ligne = 0
           For i = 1 To UBound(tblBD, 2)
             ligne = ligne + 1
            .ListItems.Add , , tblBD(1, i)
            .ListItems(ligne).ListSubItems.Add , , ThisWorkbook.Sheets("FNC").Cells(Maligne, i)   'tblBD(2, i)
            If .ListItems(ligne).Text = "N°_Avis" Then
            .ListItems(ligne).ListSubItems(1).ForeColor = vbRed
            End If
          Next i
       
    End With
        ListView1.View = lvwReport
    Merci
    Denis

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 170
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Cela fonctionne quand je déclenche le userform depuis la feuille concernée
    mais pas lorsque je l'appelle depuis une autre feuille
    Eternel problème maintes fois expliqués.
    Il suffit simplement de définir la parentalité totale de l'objet Range, c'est à dire sa feuille et son classeur

    Voir mon billet sur le sujet titré Excel VBA - La parentalité d’un objet
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut
    Bonjour Philippe,

    Sauf que je suis dans une séquence with qui défini mes parents !

    En fait à force de faire des essais je m'étais mélangé les pinceaux

    La syntaxe qui fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim tblBD
    With ThisWorkbook.Sheets("FNC")
    tblBD = .ListObjects("Tableau1").HeaderRowRange
    End With
    Par contre je ne comprends toujours pas pourquoi celle ci ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim tblBD
    With ThisWorkbook.Sheets("FNC")
    tblBD = .Range(Cells(1, 1), Cells(1, Colo))  'colo variable nb colonnes
    Eend With
    Merci
    Denis

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par Denis_67 Voir le message
    Par contre je ne comprends toujours pas pourquoi celle ci ne fonctionne pas
    Nos posts se sont croisés, regardes mon post précédent (la parentalité !).

  5. #5
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut
    Merci Patrice,

    J'avais oublié un petit point !!!

    Maintenant toute les syntaxes fonctionnent !

    Justement j'avais fait une F1 sur Worksheets et Sheets suite au message de Philippe mais n'avais pas bien saisi la nuance. Maintenant je vais utiliser worksheets.

    L'aide MS dit pour Sheets
    Workbook.Sheets, propriété (Excel)
    29/05/2019
    2 minutes de lecture

    Renvoie une collection Sheets qui représente toutes les feuilles du classeur spécifié. Objet Sheets en lecture seule..
    Et pour Worksheets
    Propriété Workbook.Worksheets (Excel)
    29/05/2019
    2 minutes de lecture

    Renvoie une collection Sheets qui représente toutes les feuilles de calcul du classeur spécifié. Objet Sheets en lecture seule.
    Encore merci pour votre patience !
    Denis

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par Denis_67 Voir le message
    L'aide MS ...
    Et pour Worksheets
    Propriété Workbook.Worksheets (Excel)
    29/05/2019
    2 minutes de lecture

    Renvoie une collection Sheets qui représente toutes les feuilles de calcul du classeur spécifié. Objet Sheets en lecture seule.
    On n'a pas le même Aide MS ???
    Objet Worksheets (Excel)
    03/04/2019
    2 minutes de lecture

    Collection de tous les objets Worksheet dans le classeur spécifié ou actif. Chaque objet Worksheet représente un classeur.
    Objet Worksheets (Excel) | Microsoft Docs

    Sur la page d'aide suivante, il y a une erreur de la part de MS !!!!

    Propriété Workbook.Worksheets (Excel) | Microsoft Docs
    Il faut lire :
    Propriété Workbook.Worksheets (Excel)
    29/05/2019
    2 minutes de lecture

    Renvoie une collection Worksheets qui représente toutes les feuilles de calcul du classeur spécifié. Objet Worksheets en lecture seule.

  7. #7
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour le Fil,
    Bonjour Philippe,

    Ah, la parentalité oui mais ...
    ... encore faut-t'il se servir correctement du With !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub xxx()
    Dim tblBD
    ' With ThisWorkbook.Sheets("FNC")
      With ThisWorkbook.Worksheets("FNC")
        'tblBD = ActiveSheet.ListObjects("Tableau1").HeaderRowRange
         tblBD = .ListObjects("Tableau1").HeaderRowRange
     
        'tblBD = .Cells(Cells(1, 1), Cells(1, Colo))    'Colo = variable nb de colonnes
         tblBD = .Range(.Cells(1, 1), .Cells(1, Colo))  'Colo = variable nb de colonnes
     
         tblBD = .Range("A1:BE1")
      End With
    End Sub
    Note : Sheets(xxx).Range() est une mauvaise syntaxe (trop souvent employée).
    L'objet Sheets(xxx) hérite d'objets Range() seulement dans la cas où il représente une feuille de calcul.
    La syntaxe correcte est Worksheets(xxx).Range(), i.e. 4 caractères supplémentaire pour un code plus propre.

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

Discussions similaires

  1. Copier une cellule depuis une autre workbook dans la feuille source
    Par Haikel22 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 15/06/2014, 17h51
  2. Réponses: 6
    Dernier message: 31/05/2009, 19h10
  3. [XL-97] Copie capricieuse des valeurs d'un range vers une autre feuille
    Par Michel Delapouaitte dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 24/04/2009, 09h34
  4. Réponses: 13
    Dernier message: 14/04/2008, 14h30
  5. Réponses: 2
    Dernier message: 25/12/2007, 17h19

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