XL 2010 combobox et listfillrange

Nulenvba

XLDnaute Nouveau
Nouveau sur ce forum, voila déjà ma première question.
Sur urne feuille nommée "facture", j'ai créer une combobox qui affiche la liste des clients qui se trouvent sur une autre fichier nommé "clients".Le nombre de ces clients évolue sans arrêt..
En supposant qu'il y ait 200 clients, j'ai indiqué, pour être tranquille, la formule suivante dans la case ListFillRange des propriétés de la combobox :[clients.xls]Feuil1!C2:C300
Ça n'est pas satisfaisant.
Comment faire pour que ListFillRange ne contienne que les clients existant avec une formule du genre
[clients.xls]feuil1!C2:C &[C65535].end(xlUp).row , formule que la case ListFillRange refuse obstinément.
Merci d'avance pour vos conseils.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour et bienvenue sur le forum,

Normalement c'est au demandeur de nous faire un classeur exemple de son problème, mais comme c'est votre premier fil et que je suis de bonne humeur, regardez dans le fichier joint, comment est définie le nom 'ListeClients' et comment listFillRange l'accepte et s'adaptera (il n'y a pas de macro dans le fichier)

Cordialement
 

Pièces jointes

  • ListeClients.xlsm
    20.9 KB · Affichages: 31

Nulenvba

XLDnaute Nouveau
Merci beaucoup pour cette réponse rapide.
Je n'ai pas bien compris votre introduction "Normalement c'est au demandeur de nous faire un classeur exemple de son problème "? Il fallait que je joigne une copie de mon classeur? J'ai l'impression que les conversations que j'ai consultées se présentaient de la même façon que la mienne?
En ce qui concerne votre exemple, c'est parfait ça fonctionne, mais comme je l'ai dit, je suis nul en VBA aussi je n'ai pas compris comment est défini le nom ListeClients. Si je place la liste de clients en colonne C, ça ne marche plus.
Est ce que ça fonctionnerais aussi si la liste clients était sur un autre classeur?
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Oui c'eût été mieux que vous joigniez un classeur exemple anonymisé à votre première demande.
Dans l'exemple que je vous ai donné, il n'y a pas de macro (vba) comme déjà dit précédemment. Le nom 'ListeClients' est un nom de plage de cellules définie par formule (décaler) dans le gestionnaire de noms (onglet formule/Gestionnaire de noms).
Si vous déplacez votre liste il vous faudra également redéfinir ce nom en fonction de sa nouvelle position dans votre classeur(quelqu'il soit).

Cordialement
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum, Nulenvba (bienvenue sur XLSà, Roblochon

Nulenvba
Pour mieux comprendre l'introduction Roblochienne ;)
Un extrait de la charte du forum
5 – La possibilité de joindre des fichiers est donnée sur ce forum. Ne pas hésiter à utiliser cette fonction, tout en veillant que les données soient bidons et donc qu’aucune donnée confidentielle, nominative ne soit dans le fichier.
Et pour mieux comprendre les us et coutumes du forum, accès direct vers la dite charte
A lire ou relire car il semble que tu aies zappé le point 3 de celle-ci, non ? ;)
 

Nulenvba

XLDnaute Nouveau
Bonjour,
Merci encore pour votre réponse rapide.
Je crois que j'ai bien choisi mon pseudo. Je ne comprends pas bien la fonction decaler que vous utilisez
DECALER(
référence Clients!$B$2 OK
Décalage nombre de lignes 1+Clients!$A$1 ? Une ligne?
;; donc on saute décalage nombre de colonnes?
hauteur MAX(Clients!$A$11
largeur NBVAL(Clients!$B$3:$B$100
Ne peut on pas utiliser= DECALER(Clients!$B$2;NBVAL(Clients!$B$2:$B$100)) ?
Enfin, si ma liste clients est dans un autre classeur, comment dois je créer le nom et sur quel classeur?
Je ne peux pas vous envoyer une copie de mes classeurs, il y a trop de liaisons entr'eux, si je les anonymise plus rien ne fonctionne.
un grand merci encore pour votre patience.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Pour info
On ne joint jamais de copie intégrale d'un classeur.
La "coutume" c'est de créer exhilo un fichier excel allégé et sans données confidentielles dont la seule vocation est d'illustrer la problématique rencontrée.

C'est d'ailleurs ce qu'a fait Roblochon dans sa réponse.

Mais "l'usage", c'est que ce soit le demandeur qui prenne le temps de concocter son fichier exemple dès le message introductif de sa discussion ;)

NB: La solution de Roblochon (comme il l'indique est sans VBA, donc sans macro)
Il s'agit de la fameuse plage dynamique nommée
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Et encore, une fois, il n'y a pas de code vba dans cette histoire, vous pouvez continuer à être NullEnVba:).

Dans le fichier clients.xlsx le nom est définit ainsi:
"=DECALER(Clients!$B$2;1;;MAX(1;NBVAL(Clients!$B$2:$B$100)-1))
Explications:
1 Décalage d'une ligne pour éviter l'entête (B2)
2 calcul de la hauteur de plage par Nbval
cette fonction pouvant retourner 0 s'il n'y a aucune valeur entre B2:B100
on emploie Max(1;nbval(…)-1) pour retourner au moins une ligne
Le -1 est employé pour corriger le nombre de valeurs (entête comprise) de la colonne
Avec Max la formule retournera ainsi toujours au moins une cellule (la première sous l'entête), même vide
On pourrait très bien faire
=Decaler( $B$3;;Max(1;NBVAL($B3:$B$100))
Mais la cellule renvoyée s'il n'y avait aucune valeur en b3:b100 serait B4 et non plus B3.


Dans le fichier ListeClients.xlsx redéfinition du nom ListeClients (avec client.xlsx ouvert) :
=DECALER([Clients.xlsx]Clients!$B$2;1;;MAX(1;NBVAL([Clients.xlsx]Clients!$B$2:$B$100)-1))

Bon dimanche
 

Pièces jointes

  • Clients.xlsx
    9.3 KB · Affichages: 11
  • ListeClients.xlsx
    15.3 KB · Affichages: 13

Nulenvba

XLDnaute Nouveau
Rebonjour Roblechon,
Je suis stupéfait de la rapidité de votre réponse et je vous en remercie.
Cette fois grâce à ces explications claires, je crois que j'ai bien compris.
Staple 1600 m'a tiré un peu les oreilles, mais promis, la prochaine fois que j'interviendrai je joindrai un fichier exemple
Encore merci.
Très cordialement.
 

Nulenvba

XLDnaute Nouveau
Bonjour Roblochon
Çà y est, je possède bien la fonction DECALER. Je l'ai appliquée avec succès.
Encore merci.
Pour aller plus loin, j'ai essayé de faire la même chose en VBA ! Et là ça ne va pas du tout.
Cette fois, je joins deux classeurs, facture.xlsx qui contient les combobox et le code. et liste clients.xlsx.
Quelles sont les erreurs?
 

Pièces jointes

  • facture.xlsm
    22.7 KB · Affichages: 7
  • liste clients.xlsx
    8.9 KB · Affichages: 7

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Faites une recherche dans le forum sur 'Classeur Fermé', vous trouverez plein de solutions, notamment avec ADO (qui fonctionne aussi classeur ouvert).
Vous semblez ne pas avoir les bases en VBA pour le faire par macro. Je vous suggère donc de passer par des tutos qui vous donnerons un minimum de connaissances.
Et revenez avec vos tentatives et difficultés.
Bonnes recherches
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour @JeanJean2018 et bienvenue sur le forum


Sans doute parc eque le fichier source de la liste des clients n'est pas ouvert en premier et que les références à ce fichier dans les noms sont remplacées par #REF!.

De toute façon, la façon de faire qu'à choisit l'initiateur de ce fil, n'est pas la meilleure pour ce genre de chose et pose souvent des problèmes.

Dans le fichier joint (facture.xlsm) qui interroge le fichier 'liste clients.xlsx' vous verrez une méthode d'interrogation d'un fichier externe, fermé ou non.

Le meilleur moyen d'avoir une réponse adéquate est de créer votre propre discussion, avec un fichier exemple anonymisé et sans données confidentielle ainsi que des explication détaillées de votre situation.

Cordialement
 

Pièces jointes

  • facture.xlsm
    34.5 KB · Affichages: 10
  • liste clients.xlsx
    18.8 KB · Affichages: 3
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 145
Messages
2 085 763
Membres
102 967
dernier inscrit
Syl34