Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Excel, ListFillRange dans une autre feuille

13 réponses
Avatar
LaurentC
Bonjour Í  tous

Dans une feuille j'ai une liste de nom dans la colonne A, cette zone
dynamique (décaler+nbval) est nommée "UnTitreMesTitres".
A coté j'ai un ComboBox nommé "UnTitreCbxTitre".

Dans le code de cette feuille, j'ai mis
Private Sub Worksheet_Activate()
ActiveSheet.UnTitreCbxTitre.ListFillRange Range("UnTitreMesTitres").Address
End Sub

Ca fonctionne, la liste proposée par le ComBox est bien la liste
attendue.
Si je déplace cette zone nommée dans une autre feuille ça ne fonctionne
plus ;-(

Au secours !!!
S'avez vous faire pointer le ListFillRange d'un ComboBox vers une zone
nommée située sur une autre feuille du classeur ?

Merci pour votre aide.
@+Laurent

10 réponses

1 2
Avatar
MichD
Le 03/09/22 Í  16:30, LaurentC a écrit :
Private Sub Worksheet_Activate()
ActiveSheet.UnTitreCbxTitre.ListFillRange > Range("UnTitreMesTitres").Address
End Sub

Bonjour,
Remplace Activesheet par le nom de la feuille o͹ ton combobox est situé.
Exemple :
'-------------------------------
Private Sub Worksheet_Activate()
Worksheets("Feuil2").UnTitreCbxTitre.ListFillRange = _
Range("UnTitreMesTitres").Address
End Sub
'-------------------------------
Attention, le nom de la plage de cellules défini par la formule doit
être au niveau du classeur et nom au niveau de la feuille. Quand tu
crées une zone nommée, en dessous du nom, tu dois choisir dans la liste
déroulante "Classeur" et non "Feuil"...
Dans la formule utilisée, tu t'assures que devant l'adresse des plages
de cellules que ces dernières soient précédées du bon nom de la feuille
o͹ sont les données.
MichD
Avatar
MichD
Le 03/09/22 Í  16:45, MichD a écrit :
Le 03/09/22 Í  16:30, LaurentC a écrit :
Private Sub Worksheet_Activate()
ActiveSheet.UnTitreCbxTitre.ListFillRange >> Range("UnTitreMesTitres").Address
End Sub

Bonjour,
Remplace Activesheet par le nom de la feuille o͹ ton combobox est situé.
Exemple :
'-------------------------------
Private Sub Worksheet_Activate()
Worksheets("Feuil2").UnTitreCbxTitre.ListFillRange = _
     Range("UnTitreMesTitres").Address
End Sub
'-------------------------------
Attention, le nom de la plage de cellules défini par la formule doit
être au niveau du classeur et nom au niveau de la feuille. Quand tu
crées une zone nommée, en dessous du nom, tu dois choisir dans la liste
déroulante "Classeur" et non "Feuil"...
Dans la formule utilisée, tu t'assures que devant l'adresse des plages
de cellules que ces dernières soient précédées du bon nom de la feuille
o͹ sont les données.
MichD

J'ai omis de mentionner que la procédure doit être dans le module de la
feuille o͹ est ton combobox.
MichD
Avatar
LaurentC
Bonjour MichD, merci pour ton aide
Mais non, ça ne le fait pas
Worksheets("Feuil2").UnTitreCbxTitre.ListFillRange = _
Range("UnTitreMesTitres").Address

renvoie une erreur 1004
La méthode 'Range' de l'objet worksheet a échoué
Attention, le nom de la plage de cellules défini par la formule doit être au
niveau du classeur

C'est fait.
J'ai essayé comme ça
Worksheets("Feuil2").UnTitreCbxTitre.ListFillRange = _
Worksheets("FeuilleSource").Range("UnTitreMesTitres").Address

mais pas mieux.
Encore merci
@+Laurent
Avatar
Michel__D
Le 05/09/2022 Í  09:26, LaurentC a écrit :
Bonjour MichD, merci pour ton aide
Mais non, ça ne le fait pas
Worksheets("Feuil2").UnTitreCbxTitre.ListFillRange = _
      Range("UnTitreMesTitres").Address

renvoie une erreur 1004
La méthode 'Range' de l'objet worksheet a échoué
Attention, le nom de la plage de cellules défini par la formule doit être au
niveau du classeur

C'est fait.

Quelle est la formule de la plage nommée ?
Un autre Michel.
Avatar
MichD
Le 03/09/22 Í  16:30, LaurentC a écrit :
Bonjour Í  tous
Dans une feuille j'ai une liste de nom dans la colonne A, cette zone
dynamique (décaler+nbval) est nommée "UnTitreMesTitres".
A coté j'ai un ComboBox nommé "UnTitreCbxTitre".
Dans le code de cette feuille, j'ai mis
Private Sub Worksheet_Activate()
ActiveSheet.UnTitreCbxTitre.ListFillRange > Range("UnTitreMesTitres").Address
End Sub
Ca fonctionne, la liste proposée par le ComBox est bien la liste attendue.
Si je déplace cette zone nommée dans une autre feuille ça ne fonctionne
plus ;-(
Au secours !!!
S'avez vous faire pointer le ListFillRange d'un ComboBox vers une zone
nommée située sur une autre feuille du classeur ?
Merci pour votre aide.
@+Laurent

En supposant que le contrÍ´le "Combobox" provient de la barre d'outils
"contrÍ´le activex",
La formule "Decaler" pour définir la plage de cellules en supposant que
la cellule A1 est l'étiquette de colonne, remplace "Feuil1" par le nom
de la feuille o͹ sont tes données.
ÞCALER(Feuil1!$A$1;1;;NBVAL(Feuil1!$A:$A);)
Tu inscris ce code dans le module de la feuille o͹ est le combobox
'--------------------------------
Private Sub Worksheet_Activate()
ActiveSheet.OLEObjects("UnTitreCbxTitre").ListFillRange = _
Range("UnTitreMesTitres").Address(External:=True)
End Sub
'--------------------------------
MichD
Avatar
LaurentC
Peut être bien que c'est lÍ  qu'est l'os !
A la fin, il faudra que ça fonctionne avec la zone suivante
ÍžCALER(TblPositions[Titre];NBVAL(TblListeComptes[NomCompte]);;NBVAL(TblPositions[Titre])-NBVAL(TblListeComptes[NomCompte]))
Elle appelle 2 tableaux : TblPositions Í  l'onglet Positions et
TblListeComptes Í  l'onglet ListeCompte.
Pour le moment si j'essaye de faire simple, avec la zone nommé suivante
ça ne passe pas
=TblPositions[Titre]
Encore un autre truc
Worksheets("UnTitre").UnTitreCbxTitre.ListFillRange Range("TblOpérations[Titre]").Address
qui ne va pas !!! Grrrr
Pire
Worksheets("UnTitre").UnTitreCbxTitre.ListFillRange Worksheets("Opérations").Range("TblOpérations[Titre]").Address
renvoie les valeurs de la page UnTitre et qui ont l'adresse recherchée
dans la page Opérations !!!
Je ne comprends définitivement plus rien :-(((
Merci
@+Laurent
Avatar
LaurentC
En supposant que le contrÍ´le "Combobox" provient de la barre d'outils
"contrÍ´le activex",

oui, tu supposes bien :-)
au fait, un détail, je suis sur Exel 365 (pas certain que ça ai un
impact)
La formule "Decaler" pour définir la plage de cellules en supposant que la
cellule A1 est l'étiquette de colonne, remplace "Feuil1" par le nom de la
feuille o͹ sont tes données.
ActiveSheet.OLEObjects("UnTitreCbxTitre").ListFillRange = _
Range("UnTitreMesTitres").Address(External:=True)

Erreur d'exécution 1004
la méthode range de l'objet worksheet a échoué
@+laurent
Avatar
MichD
Le 05/09/22 Í  08:01, LaurentC a écrit :
En supposant que le contrÍ´le "Combobox" provient de la barre d'outils
"contrÍ´le activex",

oui, tu supposes bien :-)
au fait, un détail, je suis sur Exel 365 (pas certain que ça ai un impact)
La formule "Decaler" pour définir la plage de cellules en supposant
que la cellule A1 est l'étiquette de colonne, remplace "Feuil1" par le
nom de la feuille o͹ sont tes données.

ActiveSheet.OLEObjects("UnTitreCbxTitre").ListFillRange = _
         Range("UnTitreMesTitres").Address(External:=True)

Erreur d'exécution 1004
la méthode range de l'objet worksheet a échoué
@+laurent

Cela fonctionne très bien chez moi, je l'avais testé
La procédure doit être dans le module de la feuille o͹ le combobox est
situé. Un clic droit sur l'objet de la feuille, commande "Visualiser le
code" et tu colles le code donné.
Private Sub Worksheet_Activate()
ActiveSheet.OLEObjects("UnTitreCbxTitre").ListFillRange = _
Range("UnTitreMesTitres").Address(external:=True)
End Sub
Une autre approche : Je l'ai aussi testé.
'--------------------------------------
Sub Worksheet_Activate()
With Range("UnTitreMesTitres")
X = .Parent.Name & "!" & .Address
End With
'Si ton contrÍ´le provient de la barre d'outils "ContÍ´le Activex"
ActiveSheet.OLEObjects("UnTitreCbxTitre").ListFillRange = X
'Si ton contrÍ´le provient de la barre d'outils formulaire
Activesheet.Shapes("UnTitreCbxTitre") _
.ControlFormat.ListFillRange =x
End Sub
'--------------------------------------
MichD
Avatar
Michel__D
Le 05/09/2022 Í  13:51, LaurentC a écrit :
Peut être bien que c'est lÍ  qu'est l'os !
A la fin, il faudra que ça fonctionne avec la zone suivante
ÞCALER(TblPositions[Titre];NBVAL(TblListeComptes[NomCompte]);;NBVAL(TblPositions[Titre])-NBVAL(TblListeComptes[NomCompte]))
Elle appelle 2 tableaux : TblPositions Í  l'onglet Positions et TblListeComptes Í 
l'onglet ListeCompte.
Pour le moment si j'essaye de faire simple, avec la zone nommé suivante ça ne
passe pas
=TblPositions[Titre]

Essaye de faire encore plus simple n'utilise pas la référence au tableau pour
trouver ou cela coince.
Avatar
MichD
Le 05/09/22 Í  07:51, LaurentC a écrit :
Peut être bien que c'est lÍ  qu'est l'os !
A la fin, il faudra que ça fonctionne avec la zone suivante
ÞCALER(TblPositions[Titre];NBVAL(TblListeComptes[NomCompte]);;NBVAL(TblPositions[Titre])-NBVAL(TblListeComptes[NomCompte]))
Elle appelle 2 tableaux : TblPositions Í  l'onglet Positions et
TblListeComptes Í  l'onglet ListeCompte.
Pour le moment si j'essaye de faire simple, avec la zone nommé suivante
ça ne passe pas
=TblPositions[Titre]
Encore un autre truc
Worksheets("UnTitre").UnTitreCbxTitre.ListFillRange > Range("TblOpérations[Titre]").Address
qui ne va pas !!! Grrrr
Pire
Worksheets("UnTitre").UnTitreCbxTitre.ListFillRange > Worksheets("Opérations").Range("TblOpérations[Titre]").Address
renvoie les valeurs de la page UnTitre et qui ont l'adresse recherchée
dans la page Opérations !!!
Je ne comprends définitivement plus rien :-(((
Merci
@+Laurent

Bonjour,
J'ai créé 3 plages nommées.
tata : =TblPositions[Titre]
Attention : Moi j'ai utilisé "Compte" comme étiquette de colonne et non
"MonCompte" dans mon exemple
toti : =NBVAL(TblListeComptes[Compte])+2 'Mon étiquette de colonne
MyRange: ÞCALER(Tata;Toti;;;)
En VBA, pour remplir ton combbox
'------------------------------------------
Sub Worksheet_Activatess()
With Range("MyRange")
X = .Parent.Name & "!" & .Address
End With
'Si ton combobox émane de la barre d'outils "Activex"
ActiveSheet.OLEObjects("UnTitreCbxTitre").ListFillRange = X
'Si ton combobox émane de la barre d'outil "Formulaire"
Worksheets("Feuil2").Shapes("toto").ControlFormat.ListFillRange "Feuil1!A1:A10" ' Range("UnTitreMesTitres").Address ' "A1:A3"
End Sub
'------------------------------------------
MichD
1 2