OVH Cloud OVH Cloud

combobox avec nombre ou texte

11 réponses
Avatar
Andrée et Romuald
Bonsoir tout le monde
>
> Voici mon probleme
> Avec le code ci joint ,lorsque la liste est composée de "nombre" tout
> fonctionne sans le moindre souci mais
>
> lorsque la liste est composée de "texte" alors
> lorsque j'ai selectionnéuné une cellule(cellule A3 par exemple)
> que je lui attibue le second élément du menu déroulant ("bonjour" par
> exemple) alors ok
> mais lorsque je veux après avoir selectionné une autre cellule
> (b32 par exemple)ré-attribué directement après "bonjour" du menu déroulant
> alors je suis obligé de selectionné et attribué un autre élément ("salut"
> par exemple)du menu déroulant et après encore resélectionné le premier
> élément"bonjour".
>
> comment cela se fait il ?
> comment cela peut il etre resolu ??
> j'ai essayé en changeant le type de variable mais cela ne va pas
> voici le code que j'utilise
>
> Private Sub ComboBox1_Click()
> ActiveCell.Value = Me.ComboBox1.Value
> End Sub
> Private Sub ComboBox1_GotFocus()
> Dim Rg As Range, Tblo As Variant
> With Worksheets("Données")
> Set Rg = .Range("C26:C" & .Range("C7").End(xlUp).Row)
> Tblo = Rg
> End With
> Me.ComboBox1.List = Tblo
> End Sub
> en esperant avoir ete clair
> merci pour votre aide
>
> Andrée et Romuald
>
>

10 réponses

1 2
Avatar
JLuc
*Bonjour Andrée et Romuald*,
Essaie comme ca :
Private Sub ComboBox1_Change()
ActiveCell = ComboBox1
End Sub

Private Sub Worksheet_Activate(ByVal Target As Range)
Application.EnableEvents = False
ComboBox1.Clear
For Each cel In Range("A1:A5")
ComboBox1.AddItem cel
Next
Application.EnableEvents = True
End Sub


Bonsoir tout le monde

Voici mon probleme
Avec le code ci joint ,lorsque la liste est composée de "nombre" tout
fonctionne sans le moindre souci mais

lorsque la liste est composée de "texte" alors
lorsque j'ai selectionnéuné une cellule(cellule A3 par exemple)
que je lui attibue le second élément du menu déroulant ("bonjour" par
exemple) alors ok
mais lorsque je veux après avoir selectionné une autre cellule
(b32 par exemple)ré-attribué directement après "bonjour" du menu déroulant
alors je suis obligé de selectionné et attribué un autre élément ("salut"
par exemple)du menu déroulant et après encore resélectionné le premier
élément"bonjour".

comment cela se fait il ?
comment cela peut il etre resolu ??
j'ai essayé en changeant le type de variable mais cela ne va pas
voici le code que j'utilise

Private Sub ComboBox1_Click()
ActiveCell.Value = Me.ComboBox1.Value
End Sub
Private Sub ComboBox1_GotFocus()
Dim Rg As Range, Tblo As Variant
With Worksheets("Données")
Set Rg = .Range("C26:C" & .Range("C7").End(xlUp).Row)
Tblo = Rg
End With
Me.ComboBox1.List = Tblo
End Sub
en esperant avoir ete clair
merci pour votre aide

Andrée et Romuald





--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O


Avatar
Andrée et Romuald
bonsoir,
j'ai essayé mais cela ne demarre pas car a la compilation j'ai le message
"la declaration de la procedure ne correspond pas a la description de
l'evenement ou de la procedure de meme nom" ??
n'y a t il pas un faute dans "for each cel in range"
serait-il possible de joindre eventuellement un exemple

merci
Andrée et Romuald

"JLuc" a écrit dans le message de news:

*Bonjour Andrée et Romuald*,
Essaie comme ca :
Private Sub ComboBox1_Change()
ActiveCell = ComboBox1
End Sub

Private Sub Worksheet_Activate(ByVal Target As Range)
Application.EnableEvents = False
ComboBox1.Clear
For Each cel In Range("A1:A5")
ComboBox1.AddItem cel
Next
Application.EnableEvents = True
End Sub


Bonsoir tout le monde

Voici mon probleme
Avec le code ci joint ,lorsque la liste est composée de "nombre" tout
fonctionne sans le moindre souci mais

lorsque la liste est composée de "texte" alors
lorsque j'ai selectionnéuné une cellule(cellule A3 par
exemple)
que je lui attibue le second élément du menu déroulant ("bonjour" par
exemple) alors ok
mais lorsque je veux après avoir selectionné une autre
cellule
(b32 par exemple)ré-attribué directement après "bonjour" du menu
déroulant
alors je suis obligé de selectionné et attribué un autre élément
("salut"
par exemple)du menu déroulant et après encore resélectionné le premier
élément"bonjour".

comment cela se fait il ?
comment cela peut il etre resolu ??
j'ai essayé en changeant le type de variable mais cela ne va pas
voici le code que j'utilise

Private Sub ComboBox1_Click()
ActiveCell.Value = Me.ComboBox1.Value
End Sub
Private Sub ComboBox1_GotFocus()
Dim Rg As Range, Tblo As Variant
With Worksheets("Données")
Set Rg = .Range("C26:C" & .Range("C7").End(xlUp).Row)
Tblo = Rg
End With
Me.ComboBox1.List = Tblo
End Sub
en esperant avoir ete clair
merci pour votre aide

Andrée et Romuald





--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O






Avatar
JLuc
bonsoir,
j'ai essayé mais cela ne demarre pas car a la compilation j'ai le message
"la declaration de la procedure ne correspond pas a la description de
l'evenement ou de la procedure de meme nom" ??
n'y a t il pas un faute dans "for each cel in range"
serait-il possible de joindre eventuellement un exemple

merci
Andrée et Romuald


Autant pour moi, l'événement Activate n'a pas d'argument
voila le fichier exemple : http://cjoint.com/?frhPsJmcCF

--
JLuc

Avatar
Andrée et Romuald
bonjour

merci pour l'exemple mais mon probleme initial n'est pas resolu avec cette
solution
Andrée et Romuald
"JLuc" a écrit dans le message de news:

bonsoir,
j'ai essayé mais cela ne demarre pas car a la compilation j'ai le message
"la declaration de la procedure ne correspond pas a la description de
l'evenement ou de la procedure de meme nom" ??
n'y a t il pas un faute dans "for each cel in range"
serait-il possible de joindre eventuellement un exemple

merci
Andrée et Romuald


Autant pour moi, l'événement Activate n'a pas d'argument
voila le fichier exemple : http://cjoint.com/?frhPsJmcCF

--
JLuc





Avatar
JLuc
*Bonjour Andrée et Romuald*,
J'ai rergardé ton code, éffectivement, avec des caractères il faut
changer puis revenir et je vois pas pourquoi...Désolé pour mon
imcompétence

Bonsoir tout le monde

Voici mon probleme
Avec le code ci joint ,lorsque la liste est composée de "nombre" tout
fonctionne sans le moindre souci mais

lorsque la liste est composée de "texte" alors
lorsque j'ai selectionnéuné une cellule(cellule A3 par exemple)
que je lui attibue le second élément du menu déroulant ("bonjour" par
exemple) alors ok
mais lorsque je veux après avoir selectionné une autre cellule
(b32 par exemple)ré-attribué directement après "bonjour" du menu déroulant
alors je suis obligé de selectionné et attribué un autre élément ("salut"
par exemple)du menu déroulant et après encore resélectionné le premier
élément"bonjour".

comment cela se fait il ?
comment cela peut il etre resolu ??
j'ai essayé en changeant le type de variable mais cela ne va pas
voici le code que j'utilise

Private Sub ComboBox1_Click()
ActiveCell.Value = Me.ComboBox1.Value
End Sub
Private Sub ComboBox1_GotFocus()
Dim Rg As Range, Tblo As Variant
With Worksheets("Données")
Set Rg = .Range("C26:C" & .Range("C7").End(xlUp).Row)
Tblo = Rg
End With
Me.ComboBox1.List = Tblo
End Sub
en esperant avoir ete clair
merci pour votre aide

Andrée et Romuald





--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O


Avatar
JLuc
*Bonjour Andrée et Romuald*,
J'ai chercher et je pense, je dis bien je pense t'avoir trouvé une
solution :

Dans le module de feuille :
Private Sub Worksheet_BeforeRightClick(ByVal Target As _
Range, Cancel As Boolean)
' Supprimer l'entrée si elle existe
For Each CmdDroit In Application.CommandBars("cell").Controls
If CmdDroit.Type = msoControlComboBox Then CmdDroit.Delete
Next CmdDroit
' Ajouter les entrées
Set myControl = CommandBars("cell").Controls _
.Add(Type:=msoControlComboBox, Before:=1)
With myControl
For x = 1 To 5
.AddItem Text:Îlls(x, 1), Index:=x
Next
.ListIndex = 1
.DropDownLines = 3
.DropDownWidth = 75
.ListHeaderCount = 0
.Tag = "MonMenu"
.OnAction = "MetLaValeur"
End With
End Sub

Dans un module standard :
Sub MetLaValeur()
Dim MonBtn As CommandBarComboBox, strTxt As String

Set MonBtn = CommandBars("cell").FindControl(, , "MonMenu")
strTxt = MonBtn.Text
'ici vous mettez vos instructions, exemple :
ActiveCell = strTxt
End Sub

Dis nous si ca te conviendrais (en adaptant à tes données)

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
Andrée et Romuald
Bonsoir,
Je crois que l'incompetent c'est plutot moi
dans le code du module standard, lorsque je compile il y a un message qui me
dit
"Variable objet ou variable de bloc with non définie"
pourtant il me semble que les variables sont définies

j'ai la ligne strTxt = MonBtn.Text qui est en jaune ??

je ne comprends pas tres bien ce que je dis mettre comme instructions (moi
j'ai mis "activecell=combobox1")mais sans certitude
ce qui m'inquiete c'est que je ne vois pas où indiquer la plage du menu
déroulant
merci pour la patience
Andrée et Romuald

"JLuc" a écrit dans le message de news:

*Bonjour Andrée et Romuald*,
J'ai chercher et je pense, je dis bien je pense t'avoir trouvé une
solution :

Dans le module de feuille :
Private Sub Worksheet_BeforeRightClick(ByVal Target As _
Range, Cancel As Boolean)
' Supprimer l'entrée si elle existe
For Each CmdDroit In Application.CommandBars("cell").Controls
If CmdDroit.Type = msoControlComboBox Then CmdDroit.Delete
Next CmdDroit
' Ajouter les entrées
Set myControl = CommandBars("cell").Controls _
.Add(Type:=msoControlComboBox, Before:=1)
With myControl
For x = 1 To 5
.AddItem Text:Îlls(x, 1), Index:=x
Next
.ListIndex = 1
.DropDownLines = 3
.DropDownWidth = 75
.ListHeaderCount = 0
.Tag = "MonMenu"
.OnAction = "MetLaValeur"
End With
End Sub

Dans un module standard :
Sub MetLaValeur()
Dim MonBtn As CommandBarComboBox, strTxt As String

Set MonBtn = CommandBars("cell").FindControl(, , "MonMenu")
strTxt = MonBtn.Text
'ici vous mettez vos instructions, exemple :
ActiveCell = strTxt
End Sub

Dis nous si ca te conviendrais (en adaptant à tes données)

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O




Avatar
JLuc
*Bonjour Andrée et Romuald*,

je ne comprends pas tres bien ce que je dis mettre comme instructions (moi
j'ai mis "activecell=combobox1")mais sans certitude
ce qui m'inquiete c'est que je ne vois pas où indiquer la plage du menu
déroulant
merci pour la patience
Andrée et Romuald


Explications :

Dans le module de feuille :
Cette procédure evenementielle se produit au clic droit sur la cellule.
A cet endroit, je rajoute dans le menu contextuel du clic droit une
Combobox avec les elements tires de la feuille
Private Sub Worksheet_BeforeRightClick(ByVal Target As _
Range, Cancel As Boolean)
' Supprimer l'entrée si elle existe
For Each CmdDroit In Application.CommandBars("cell").Controls
If CmdDroit.Type = msoControlComboBox Then CmdDroit.Delete
Next CmdDroit
' Ajouter les entrées


Definition d'une variable objet avec l'ajout d'un control Combobox
Set myControl = CommandBars("cell").Controls _
.Add(Type:=msoControlComboBox, Before:=1)
With myControl


Ajout des valeurs a la Combobox avec les valeurs recuperees dans la
feuille de A1 a A5
For x = 1 To 5
.AddItem Text:Îlls(x, 1), Index:=x
Next


Definition de l'item selectionne (sinon, la liste ne contient pas la
valeur du premier item)
.ListIndex = 1


Nombre de valeur affichable par la Combo
.DropDownLines = 3
.DropDownWidth = 75
.ListHeaderCount = 0


Donne un nom au control Combo
.Tag = "MonMenu"


Macro a executer apres un choix dans la Combo
.OnAction = "MetLaValeur"
End With
End Sub


Dans un module standard :
Cette macro ne sera executee que quand tu selectionnera une valeur dans
la Combo. Si tu l'execute toute seule, tu aura l'erreur que tu as eue
Sub MetLaValeur()
Dim MonBtn As CommandBarComboBox, strTxt As String

Set MonBtn = CommandBars("cell").FindControl(, , "MonMenu")
strTxt = MonBtn.Text
'ici vous mettez vos instructions, exemple :
ActiveCell = strTxt
End Sub


--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O

Avatar
Andrée et Romuald
bonsoir,

ok j'ai compris l'astuce et cela fonctionne comme je le souhaiterais mais
n'y a t'il pas moyen d'utiliser un combobox qui est sur la feuille au lieu
d'un clic droit
si non je readapterais l'appliction
bonne soirée
merci pour l'aide
Andrée et Romuald

"JLuc" a écrit dans le message de news:

*Bonjour Andrée et Romuald*,

je ne comprends pas tres bien ce que je dis mettre comme instructions
(moi j'ai mis "activecell=combobox1")mais sans certitude
ce qui m'inquiete c'est que je ne vois pas où indiquer la plage du menu
déroulant
merci pour la patience
Andrée et Romuald


Explications :

Dans le module de feuille :
Cette procédure evenementielle se produit au clic droit sur la cellule.
A cet endroit, je rajoute dans le menu contextuel du clic droit une
Combobox avec les elements tires de la feuille
Private Sub Worksheet_BeforeRightClick(ByVal Target As _
Range, Cancel As Boolean)
' Supprimer l'entrée si elle existe
For Each CmdDroit In Application.CommandBars("cell").Controls
If CmdDroit.Type = msoControlComboBox Then CmdDroit.Delete
Next CmdDroit
' Ajouter les entrées


Definition d'une variable objet avec l'ajout d'un control Combobox
Set myControl = CommandBars("cell").Controls _
.Add(Type:=msoControlComboBox, Before:=1)
With myControl


Ajout des valeurs a la Combobox avec les valeurs recuperees dans la
feuille de A1 a A5
For x = 1 To 5
.AddItem Text:Îlls(x, 1), Index:=x
Next


Definition de l'item selectionne (sinon, la liste ne contient pas la
valeur du premier item)
.ListIndex = 1


Nombre de valeur affichable par la Combo
.DropDownLines = 3
.DropDownWidth = 75
.ListHeaderCount = 0


Donne un nom au control Combo
.Tag = "MonMenu"


Macro a executer apres un choix dans la Combo
.OnAction = "MetLaValeur"
End With
End Sub


Dans un module standard :
Cette macro ne sera executee que quand tu selectionnera une valeur dans la
Combo. Si tu l'execute toute seule, tu aura l'erreur que tu as eue
Sub MetLaValeur()
Dim MonBtn As CommandBarComboBox, strTxt As String

Set MonBtn = CommandBars("cell").FindControl(, , "MonMenu")
strTxt = MonBtn.Text
'ici vous mettez vos instructions, exemple :
ActiveCell = strTxt
End Sub


--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O





Avatar
Andrée et Romuald
bonjour
Voici une procedure qui fonctionne bien avec un combobox mais je dois faire
un double clic

Private Sub ComboBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Select Case Me.ComboBox2.ListIndex
Case 0
ActiveCell.Value = Me.ComboBox2.Text & ActiveCell
Case 1
ActiveCell.Value = Me.ComboBox2.Text & ActiveCell
Case 2
ActiveCell.Value = Me.ComboBox2.Text & ActiveCell
Case 3
ActiveCell.Value = Me.ComboBox2.Text & ActiveCell
Case 4
ActiveCell.Value = Me.ComboBox2.Text & ActiveCell
...
End Select
End Sub
Private Sub ComboBox2_GotFocus()
Dim Rg As Range, Tblo As Variant
With Worksheets("Données")
Set Rg = .Range("A29:A" & .Range("a7").End(xlUp).Row)
Tblo = Rg
End With
Me.ComboBox2.List = Tblo
End Sub

comment pourrais je faire en un clic(si je ne m'est pas de variables alors
probleme a la compilation)
merci
bonne journée
Andrée et Romuald


"Andrée et Romuald" a écrit dans le message de news:
eiE9$
Bonsoir tout le monde

Voici mon probleme
Avec le code ci joint ,lorsque la liste est composée de "nombre" tout
fonctionne sans le moindre souci mais

lorsque la liste est composée de "texte" alors
lorsque j'ai selectionnéuné une cellule(cellule A3 par
exemple)
que je lui attibue le second élément du menu déroulant ("bonjour" par
exemple) alors ok
mais lorsque je veux après avoir selectionné une autre cellule
(b32 par exemple)ré-attribué directement après "bonjour" du menu
déroulant
alors je suis obligé de selectionné et attribué un autre élément ("salut"
par exemple)du menu déroulant et après encore resélectionné le premier
élément"bonjour".

comment cela se fait il ?
comment cela peut il etre resolu ??
j'ai essayé en changeant le type de variable mais cela ne va pas
voici le code que j'utilise

Private Sub ComboBox1_Click()
ActiveCell.Value = Me.ComboBox1.Value
End Sub
Private Sub ComboBox1_GotFocus()
Dim Rg As Range, Tblo As Variant
With Worksheets("Données")
Set Rg = .Range("C26:C" & .Range("C7").End(xlUp).Row)
Tblo = Rg
End With
Me.ComboBox1.List = Tblo
End Sub
en esperant avoir ete clair
merci pour votre aide

Andrée et Romuald








1 2