Autres Feuille active

chilo27

XLDnaute Occasionnel
Bonsoir le forum

Je me retrouve devant une incompréhension
Je souhaite utiliser les entêtes de colonnes de la feuille adherents
à partir du bouton se trouvant sur la feuille 1

Il m'est impossible de trouver la bonne formulation
j'ai essayé toutes les formes cela ne fonctionne

Je souhaite bénéficier de votre savoir pour me dépanner

En vous remerciant par avance
 

Pièces jointes

  • feuille active.zip
    21.3 KB · Affichages: 10

Dranreb

XLDnaute Barbatruc
Si vous utilisez partout la syntaxe soit ThisWorkbook.Worksheets(NomDeLOnglet).Range(etc. soit CodeNameWhs.Range(etc. vous n'aurez plus de problème.
Conseil: renommez les objets Worksheet de la rubrique Microsoft Excel Objets du projet.
N'utilisez jamais la méthode Range de l'objet Application, toujours seulement celle d'un objet Worksheet précisé.
Vous pouvez faire par exemple :
VB:
Tablo = WshAddhé.[A1].CurrentRegion.Resize(, 5).Value
WshAddhé étant supposé le nouveau nom. de l'objet Worksheet Feuil3, lequel représente l'onglet "ADHERENTS" dans votre classeur joint.
Mais je soupçonne ce classeur joint bidon et que vous auriez intérêt à utiliser une Private LOt as ListObject et ses propriétés HeaderRowRange pour les entêtes et DataBotyRange pour les données …
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Bonjour
@Dranreb le tableau dans "Adhérent"est un name pas un listobject

après la question est flou
ca veux dire quoi " prise en compte" ?
c'est quoi le contexte?
prise en compte dans quoi/pour quoi?

et à lire les posts qui suivent le demande j'ai bien peur que le classeur exemple fourni à la demande ne soit pas représentatif de la demande

et pour finir
prendre l’entête d'un tableau (listobject ou pas) pour un eventuel travail sur le tableau ,c'est aller à contre sens de l'utilité de l’entête d'un tableau

bref : faire plus d'efforts dans vos demandes en terme de clarté de la question et fichier fourni
 

Dranreb

XLDnaute Barbatruc
C'est ce que je soupçonnais à divers indices. Vous devriez joindre un modèle plus représentatif du vrai classeur.
Un ListObject est fait pour représenter un tableau Excel, tout comme un Range est fait pour représenter une plage classique.
 

chilo27

XLDnaute Occasionnel
Bonjour le forum, Dranreb, PatrickToulon

La prise en compte signifie que les données qui doivent être prises en compte sont sur la feuille 3 a l'ouverture
Dans le fichier envoyé ce sont les données de la feuille 1 qui est prise compte.
 

patricktoulon

XLDnaute Barbatruc
re
voici un exemple
pour recupérer le tableau entier(avec enêtes) d'un tableau structuré on a une methode simple
c'est l'accès par la méthode range
exemple
montablo=range("ADHESION"[#All]").value

le"[#All] indique que je prends l'entete avec


alors tu me dira pourquoi je n'utilise pas la méthode Listobject?;

tout simplement par ce qu'avec la methode range j'utilise le name du tableau structuré
de ce fait je peux etre n'importe ou dans le classeur j'aurais toujours mon tablo
pour la simple et bonne raison qu'un name il ne peut y en avoir qu'un!!! dans un classeur
tandis que si j'utilise la méthode listobject je suis obligé de preciser la feuille parent

parti de la
dans ta sub affectée au bouton tu a 2 possibilité (voir plus même!!)
mais je te donne 2 exemple (méthode avec les quelles je travaille )

exemple 1
je crée une fonction "showx" perso dans le userform avec argument range
voici le code du userform avec la fonction perso et le reste
tu remarquera que ta variable tablo est devenue public (donc accesible partout dans le classeur)

VB:
Public Tablo As Variant, NomTableau

Function showx(Rng As Range)
    With UserForm1
        .Tablo = Rng.Value
        .Show
    End With
End Function

Private Sub UserForm_Activate()
Dim X&
     With ListView1.ColumnHeaders
        .Clear
        .Add , , Tablo(1, 1), 50
        .Add , , Tablo(1, 2), 80, lvwColumnCenter
        .Add , , Tablo(1, 3), 90, lvwColumnCenter
        .Add , , Tablo(1, 4), 70, lvwColumnCenter
      End With

 
    For x = 2 To UBound(Tablo)
        ListView1.ListItems.Add , , Tablo(x, 1)
        ListView1.ListItems(ListView1.ListItems.Count).ListSubItems.Add , , Tablo(x, 2)
        ListView1.ListItems(ListView1.ListItems.Count).ListSubItems.Add , , Tablo(x, 3)
        ListView1.ListItems(ListView1.ListItems.Count).ListSubItems.Add , , Tablo(x, 4)
       Next x

    ListView1.View = lvwReport
    ListView1.FullRowSelect = True
 
End Sub

maintenant nous arrivons a l'appel
la macro affectée au bouton

exemple 1
ici je me sert de ma fonction show perso "showX"
j'envoie donc la plage en argument dans la fonction perso
VB:
Sub ouvrir()
    Dim Rng As Range
    Set Rng = Range("ADHESION[#All]")
    UserForm1.showx Rng
End Sub

et maintenant l'exemple 2
ici je ne vais pas me servir de la fonction showx
mais comme ma variable tablo est public dans le userform j'y ai accès avant que celui ci soit affiché
je vais donc instruire ma variable tablo et lancer le show classique

VB:
Sub ouvrir2()
    With UserForm1
        .Tablo = Range("ADHESION[#All]").Value
        .Show
    End With
End Sub

voila dans n'importe quel des deux cas ta listview sera instruite

démonstration
et comme tu peut le voir je n'ai pas besoins d'activer la feuille "ADHERENT"
demo.gif
 

Pièces jointes

  • feuille active.xlsm
    28.5 KB · Affichages: 3
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin