OVH Cloud OVH Cloud

Pb ControlSource ComboBox

7 réponses
Avatar
Droopy191
Bonjour,

J'utilise un formulaire pour remplir une feuille excel.
Le fomulaire s'ouvre sur un click droit. Dans ce formulaire, j'ai une
ComboBox qui me pose problème.

Je lie une cellule avec la Combobox.
il s'agit de pourcentages ( cellule formatée en % )

Je vous copie les 2 procédures qui me paraissent impliquées dans le
problème.


je charge les données de la liste combobox
( il s'agit de pourcentage 0 25% 50% 100%)

Private Sub UserForm_Initialize()
'charge les données des listes '0 25 50 75 ou 100%
Cbb_avancement.RowSource = "Donnees!r24:s29"
...


Je lie ma Combobox avec la cellule sur la feuille
Je le refais à chaque ouverture car le formulaire sert à plusieurs
cellules. Le formulaire est juste caché entre chaque utilisation par
"formulaire.hide"

Private Sub UserForm_Activate()
' liaison entre les listes et les cellules de la feuille
Cbb_avancement.ControlSource = ActiveSheet.Cells(ActiveCell.Row, 5).Address
....


Si la cellule est vide le formulaire se charge sans problème. Et je peux
donc saisir une valeur par l'intermédiaire du formulaire.
Si je veux re-éditer ma valeur et donc recharge le formulaire, j'ai une
erreur dans la procédure UserForm_Activate()
sur "Cbb_avancement.ControlSource =..."
"Erreur380"
"Impossible de définir la proprieté Control source, valeur de proprieté
non valide"

Je ne comprend pas trop le pb. Voici ce que j'ai pu constaté.
ma cellule contient un nombre formaté en %: par ex 0.25
ActiveSheet.Cells(ActiveCell.Row, 5).Address renvoie bien une adresse
type "$E$9" : Variant/String

Le problème ne semble pas venir du format( la cellule en format standard
produit le meme bug)

A priori, le problème est apparu lors du passage de xls 2000 à 2003.
Je précise que je travail sous XP pro sp2 version us avec un xls 2003
Sp2 fr.


Vos pistes et idées sont bienvenues.

--
DR

7 réponses

Avatar
MichDenis
Ne reseigne pas la propriété SourceControl
et utilise ceci :

Private Sub UserForm_Initialize()
For Each C In Range("Donnees!r24:s29")
Cbb_avancement.AddItem Format(C, "0.00%")
Next
End Sub




"Droopy191" a écrit dans le message de news:
45be5d41$0$1567$
Bonjour,

J'utilise un formulaire pour remplir une feuille excel.
Le fomulaire s'ouvre sur un click droit. Dans ce formulaire, j'ai une
ComboBox qui me pose problème.

Je lie une cellule avec la Combobox.
il s'agit de pourcentages ( cellule formatée en % )

Je vous copie les 2 procédures qui me paraissent impliquées dans le
problème.


je charge les données de la liste combobox
( il s'agit de pourcentage 0 25% 50% 100%)

Private Sub UserForm_Initialize()
'charge les données des listes '0 25 50 75 ou 100%
Cbb_avancement.RowSource = "Donnees!r24:s29"
...


Je lie ma Combobox avec la cellule sur la feuille
Je le refais à chaque ouverture car le formulaire sert à plusieurs
cellules. Le formulaire est juste caché entre chaque utilisation par
"formulaire.hide"

Private Sub UserForm_Activate()
' liaison entre les listes et les cellules de la feuille
Cbb_avancement.ControlSource = ActiveSheet.Cells(ActiveCell.Row, 5).Address
....


Si la cellule est vide le formulaire se charge sans problème. Et je peux
donc saisir une valeur par l'intermédiaire du formulaire.
Si je veux re-éditer ma valeur et donc recharge le formulaire, j'ai une
erreur dans la procédure UserForm_Activate()
sur "Cbb_avancement.ControlSource =..."
"Erreur380"
"Impossible de définir la proprieté Control source, valeur de proprieté
non valide"

Je ne comprend pas trop le pb. Voici ce que j'ai pu constaté.
ma cellule contient un nombre formaté en %: par ex 0.25
ActiveSheet.Cells(ActiveCell.Row, 5).Address renvoie bien une adresse
type "$E$9" : Variant/String

Le problème ne semble pas venir du format( la cellule en format standard
produit le meme bug)

A priori, le problème est apparu lors du passage de xls 2000 à 2003.
Je précise que je travail sous XP pro sp2 version us avec un xls 2003
Sp2 fr.


Vos pistes et idées sont bienvenues.

--
DR
Avatar
anonymousA
Bonjour,

le mieux serait peut-être de publier ton fichier car à partir de tes
indications , je n'ai pu reproduire l'erreur que tu stipules.
Il faut cependant se rappeler que utiliser ControlSource ( sur une plage
de cellules à une seule cellule) renvoie dans la propriété Value du
Combobox ce qu'il y a dans la cellule déterminée dans ControlSource.
Par ailleurs, l'inverse est aussi vrai, c.à.d ce qui est dans la
propriété Value est renvoyé dans la cellule déterminée par ControlSource.
Peut-être est-ce simplement cette imbrication qui est la source de tes
problèmes ?

A+


Bonjour,

J'utilise un formulaire pour remplir une feuille excel.
Le fomulaire s'ouvre sur un click droit. Dans ce formulaire, j'ai une
ComboBox qui me pose problème.

Je lie une cellule avec la Combobox.
il s'agit de pourcentages ( cellule formatée en % )

Je vous copie les 2 procédures qui me paraissent impliquées dans le
problème.


je charge les données de la liste combobox
( il s'agit de pourcentage 0 25% 50% 100%)

Private Sub UserForm_Initialize()
'charge les données des listes '0 25 50 75 ou 100%
Cbb_avancement.RowSource = "Donnees!r24:s29"
...


Je lie ma Combobox avec la cellule sur la feuille
Je le refais à chaque ouverture car le formulaire sert à plusieurs
cellules. Le formulaire est juste caché entre chaque utilisation par
"formulaire.hide"

Private Sub UserForm_Activate()
' liaison entre les listes et les cellules de la feuille
Cbb_avancement.ControlSource = ActiveSheet.Cells(ActiveCell.Row, 5).Address
....


Si la cellule est vide le formulaire se charge sans problème. Et je peux
donc saisir une valeur par l'intermédiaire du formulaire.
Si je veux re-éditer ma valeur et donc recharge le formulaire, j'ai une
erreur dans la procédure UserForm_Activate()
sur "Cbb_avancement.ControlSource =..."
"Erreur380"
"Impossible de définir la proprieté Control source, valeur de proprieté
non valide"

Je ne comprend pas trop le pb. Voici ce que j'ai pu constaté.
ma cellule contient un nombre formaté en %: par ex 0.25
ActiveSheet.Cells(ActiveCell.Row, 5).Address renvoie bien une adresse
type "$E$9" : Variant/String

Le problème ne semble pas venir du format( la cellule en format standard
produit le meme bug)

A priori, le problème est apparu lors du passage de xls 2000 à 2003.
Je précise que je travail sous XP pro sp2 version us avec un xls 2003
Sp2 fr.


Vos pistes et idées sont bienvenues.



Avatar
Droopy191
Bonjour,

le mieux serait peut-être de publier ton fichier car à partir de tes
indications , je n'ai pu reproduire l'erreur que tu stipules.
Il faut cependant se rappeler que utiliser ControlSource ( sur une plage
de cellules à une seule cellule) renvoie dans la propriété Value du
Combobox ce qu'il y a dans la cellule déterminée dans ControlSource.


Oui, et justement c'est l'effet recherché.
Je trouve cela plus simples que de recopier la valeur dans la cellule en
sortie.

Par ailleurs, l'inverse est aussi vrai, c.à.d ce qui est dans la
propriété Value est renvoyé dans la cellule déterminée par ControlSource.
Peut-être est-ce simplement cette imbrication qui est la source de tes
problèmes ?


C'est bien possible mais cela marchait bien sous xls 2000 ( et une autre
machine)
Y aurait il une différence entre les versions 2000 et 20003 dans la
gestion de ces éléments ?

Cela pourrait être aussi un effet de bord du passage en version 2003.
Car sans être énorme, le fichier reste complexe.

Je joins une copie du fichier
Désolé mais j'ai du cependant supprimer certains éléments par soucis de
confidentialité. Mais le problème se reproduit de facon identique
http://cjoint.com/?bDwWKzjhQJ

Dans la feuille J0
Clique droit en E10, le formulaire s'ouvre
Dans la liste avancement selectionne par ex 25%
clique sur le bouton fermer (le 25% se copie en E10 )
re-clique droit sur E10
Tu devrais voir l'erreur décrite dans mon post inital.


merci, pour ton aide

--
DR

Avatar
anonymousA
Bonjour,

ne peux m'en occuper que ce soir .Pas de machine sur 2003 au bureau.
D'ici là, peut-être un autre contributeur aura testé.

A+


On 29 jan, 22:59, Droopy191 wrote:

Bonjour,

le mieux serait peut-être de publier ton fichier car à partir de tes
indications , je n'ai pu reproduire l'erreur que tu stipules.
Il faut cependant se rappeler que utiliser ControlSource ( sur une plage
de cellules à une seule cellule) renvoie dans la propriété Value du
Combobox ce qu'il y a dans la cellule déterminée dans ControlSource .Oui, et justement c'est l'effet recherché.
Je trouve cela plus simples que de recopier la valeur dans la cellule en

sortie.

Par ailleurs, l'inverse est aussi vrai, c.à.d ce qui est dans la
propriété Value est renvoyé dans la cellule déterminée par Co ntrolSource.
Peut-être est-ce simplement cette imbrication qui est la source de tes
problèmes ?C'est bien possible mais cela marchait bien sous xls 2000 ( et une autre
machine)

Y aurait il une différence entre les versions 2000 et 20003 dans la
gestion de ces éléments ?

Cela pourrait être aussi un effet de bord du passage en version 2003.
Car sans être énorme, le fichier reste complexe.

Je joins une copie du fichier
Désolé mais j'ai du cependant supprimer certains éléments par sou cis de
confidentialité. Mais le problème se reproduit de facon identiquehttp ://cjoint.com/?bDwWKzjhQJ

Dans la feuille J0
Clique droit en E10, le formulaire s'ouvre
Dans la liste avancement selectionne par ex 25%
clique sur le bouton fermer (le 25% se copie en E10 )
re-clique droit sur E10
Tu devrais voir l'erreur décrite dans mon post inital.

merci, pour ton aide

--
DR



Avatar
Droopy191
Bonjour,

ne peux m'en occuper que ce soir .Pas de machine sur 2003 au bureau.
D'ici là, peut-être un autre contributeur aura testé.



j'ai avancé sur le sujet.
J'ai trouvé je crois la source du problème sans réellement comprendre
pourquoi. le problème ne vient sans doute pas de xls 2003 mais peut etre
du mix xls fr et Windows Xp us

Private Sub UserForm_Initialize()
'charge les données des listes '0 25 50 75 ou 100%
Cbb_avancement.RowSource = "Donnees!r24:s29"

"Donnees!r24:s29"
0% 0
25% 0.25
50% 0.5
75% 0.75
100% 1

Le séparateur décimal est ici le point (colonne de droite).
Si je remplace le séparateur par une virgule ca marche.

dans xls, les réglages sont "systeme": "." est le séparateur décimal

Ca m'interesse d'avoir ton retour sur ce que tu observes.

--
DR

Avatar
anonymousA
j'observe que quand le séparateur est le point et que je ne coche pas
"Utiliser les séparateurs système", ca se plante. Par contre si je mets
le point comme séparateur décimal et que je coche "Utiliser les
séparateurs système", ca ne se plante pas pas plus d'ailleurs que si je
mets la virgule comme séparateur décimal et que je coche pas "Utiliser
les séparateurs système".
Je constate donc la même chose que toi. Par contre pour éviter ces
problèmes je te propose la chose suivante et ce quelque soit le
séparateur décimal choisi. Il faut effacer provisoirement la valeur
contenue dans la cellule qui est liée au combobox par le controlsource.
Pas très élégant mais sans risque.

tutu = ActiveSheet.Cells(ActiveCell.Row, 5)
ActiveSheet.Cells(ActiveCell.Row, 5).ClearContents
Cbb_avancement.ControlSource = ActiveSheet.Cells(ActiveCell.Row,
5).Address(0, 0)
ActiveSheet.Cells(ActiveCell.Row, 5) = tutu

A+


Bonjour,

ne peux m'en occuper que ce soir .Pas de machine sur 2003 au bureau.
D'ici là, peut-être un autre contributeur aura testé.



j'ai avancé sur le sujet.
J'ai trouvé je crois la source du problème sans réellement comprendre
pourquoi. le problème ne vient sans doute pas de xls 2003 mais peut etre
du mix xls fr et Windows Xp us

Private Sub UserForm_Initialize()
'charge les données des listes '0 25 50 75 ou 100%
Cbb_avancement.RowSource = "Donnees!r24:s29"

"Donnees!r24:s29"
0% 0
25% 0.25
50% 0.5
75% 0.75
100% 1

Le séparateur décimal est ici le point (colonne de droite).
Si je remplace le séparateur par une virgule ca marche.

dans xls, les réglages sont "systeme": "." est le séparateur décimal

Ca m'interesse d'avoir ton retour sur ce que tu observes.




Avatar
Droopy191
j'observe que quand le séparateur est le point et que je ne coche pas
"Utiliser les séparateurs système", ca se plante. Par contre si je mets
le point comme séparateur décimal et que je coche "Utiliser les
séparateurs système", ca ne se plante pas pas plus d'ailleurs que si je
mets la virgule comme séparateur décimal et que je coche pas "Utiliser
les séparateurs système".
Je constate donc la même chose que toi. Par contre pour éviter ces
problèmes je te propose la chose suivante et ce quelque soit le
séparateur décimal choisi. Il faut effacer provisoirement la valeur
contenue dans la cellule qui est liée au combobox par le controlsource.
Pas très élégant mais sans risque.

tutu = ActiveSheet.Cells(ActiveCell.Row, 5)
ActiveSheet.Cells(ActiveCell.Row, 5).ClearContents
Cbb_avancement.ControlSource = ActiveSheet.Cells(ActiveCell.Row,
5).Address(0, 0)
ActiveSheet.Cells(ActiveCell.Row, 5) = tutu



Merci de ton aide.
Je vais tester ta proposition.
J'espère trouver une solution "universelle" car le fichier est sensé
"voyager" entre des systèmes WinXP fr + xls 2000 ou 2003 fr ou alors
WinXp Us + xls 2003 fr voir meme US + US.


--
DR