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

Combobox petit complément

18 réponses
Avatar
Alba
Bonjour,

J'ai donc un userform que j'utilise sur une feuille nomm=E9e "Client"

Dans cette userform j'ai (entre autres) combobx1 et combobox2

ils sont reli=E9 de fa=E7on a ce que le choix de l'un me donne le r=E9sultat
de l'autre et invers=E9ment.
C'est parfait !

C'est parfait si je suis sur la feuille qui alimente mes combobox
nomm=E9e "materiel"

Mais moi je veux pouvoir travailler avec mon userfom sur la feuille
"Client" .
et l=E0 du coup, mes combobox vont chercher des donn=E9es qui sont dans
cette feuille, au lieu de garder celles qui sont dans la feuille
materiel !!!

En somme ces combobox, ils s'alimentent selon o=F9 je me trouve, et je
ne sais pas comment les obliger a garder la bonne source qui est dans
ma feuille materiel, avec ce que j'ai comme code ici :
Je dois lui pr=E9ciser quelque chose mais je ne sais pas quoi !?

Dim LigneSAP As Integer
Dim InChange As Boolean
Dim AEnregistrer As Boolean

Private Sub ComboBox1_Change()

If Not InChange Then
InChange =3D True
Me.ComboBox1 =3D Me.ComboBox1
AEnregistrer =3D True
InChange =3D False

With Me
LigneSAP =3D .ComboBox1.ListIndex + 2

.ComboBox2 =3D Cells(LigneSAP, 9)
End With
InChange =3D False
End If
End Sub
----------------------------------------------------------------------
Private Sub ComboBox2_Change()

If Not InChange Then
InChange =3D True
Me.ComboBox2 =3D Me.ComboBox2
AEnregistrer =3D True
InChange =3D False

With Me
LigneSAP =3D .ComboBox2.ListIndex + 2

.ComboBox1 =3D Cells(LigneSAP, 10)
End With
InChange =3D False
End If

End Sub
---------------------------------------------------------------------------=
-----------------
Private Sub UserForm_Initialize()

With Me
.ComboBox2.RowSource =3D "Materiel!" & Range("I2",
Range("I2").End(xlDown)).Address
.ComboBox2.ListIndex =3D 1
.ComboBox1.RowSource =3D "Materiel!" & Range("J2",
Range("J2").End(xlDown)).Address

End With
AEnregistrer =3D False
End Sub



Merci de votre aide, tr=E8s bonne journ=E9e

10 réponses

1 2
Avatar
MichDenis
Dans tous tes procédures :
à chaque fois que tu désignes une cellule, si cette cellule n'appartient
pas à la feuille active, tu dois faire référence à la feuille à laquelle
cette cellule fait référence ...

Worksheets("NomDeLaFeuille").cells( ...) = Me.Combobox1.Value

Exemple :
'---------------------
Private Sub UserForm_Initialize()

With Worksheets("Materiel")
Me.ComboBox2.RowSource = .Name & "!" & .Range("I2", .Range("I2").End(xlDown)).Address
Me.ComboBox2.ListIndex = 1
Me.ComboBox1.RowSource = .Name & "!" & .Range("J2", .Range("J2").End(xlDown)).Address
End With
AEnregistrer = False
End Sub
'---------------------



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

Bonjour,

J'ai donc un userform que j'utilise sur une feuille nommée "Client"

Dans cette userform j'ai (entre autres) combobx1 et combobox2

ils sont relié de façon a ce que le choix de l'un me donne le résultat
de l'autre et inversément.
C'est parfait !

C'est parfait si je suis sur la feuille qui alimente mes combobox
nommée "materiel"

Mais moi je veux pouvoir travailler avec mon userfom sur la feuille
"Client" .
et là du coup, mes combobox vont chercher des données qui sont dans
cette feuille, au lieu de garder celles qui sont dans la feuille
materiel !!!

En somme ces combobox, ils s'alimentent selon où je me trouve, et je
ne sais pas comment les obliger a garder la bonne source qui est dans
ma feuille materiel, avec ce que j'ai comme code ici :
Je dois lui préciser quelque chose mais je ne sais pas quoi !?

Dim LigneSAP As Integer
Dim InChange As Boolean
Dim AEnregistrer As Boolean

Private Sub ComboBox1_Change()

If Not InChange Then
InChange = True
Me.ComboBox1 = Me.ComboBox1
AEnregistrer = True
InChange = False

With Me
LigneSAP = .ComboBox1.ListIndex + 2

.ComboBox2 = Cells(LigneSAP, 9)
End With
InChange = False
End If
End Sub
----------------------------------------------------------------------
Private Sub ComboBox2_Change()

If Not InChange Then
InChange = True
Me.ComboBox2 = Me.ComboBox2
AEnregistrer = True
InChange = False

With Me
LigneSAP = .ComboBox2.ListIndex + 2

.ComboBox1 = Cells(LigneSAP, 10)
End With
InChange = False
End If

End Sub
--------------------------------------------------------------------------------------------
Private Sub UserForm_Initialize()

With Me
.ComboBox2.RowSource = "Materiel!" & Range("I2",
Range("I2").End(xlDown)).Address
.ComboBox2.ListIndex = 1
.ComboBox1.RowSource = "Materiel!" & Range("J2",
Range("J2").End(xlDown)).Address

End With
AEnregistrer = False
End Sub



Merci de votre aide, très bonne journée
Avatar
Alba
On 4 mar, 14:13, "MichDenis" wrote:
Dans tous tes procédures :
à chaque fois que tu désignes une cellule, si cette cellule n'apparti ent
pas à la feuille active, tu dois faire référence à la feuille à laquelle
cette cellule fait référence ...

Worksheets("NomDeLaFeuille").cells( ...) = Me.Combobox1.Value

Exemple :
'---------------------
Private Sub UserForm_Initialize()

With Worksheets("Materiel")
Me.ComboBox2.RowSource = .Name & "!" & .Range("I2", .Range("I2").En d(xlDown)).Address
Me.ComboBox2.ListIndex = 1
Me.ComboBox1.RowSource = .Name & "!" & .Range("J2", .Range("J2").En d(xlDown)).Address
End With
AEnregistrer = False
End Sub
'---------------------
Le principe est logique effectivement mais j'ai encore de la peine

(doux euphémisme !), je dois avoir quelque chose en trop maintenant !
J'ai fait :

Private Sub ComboBox1_Change()
If Not InChange Then
InChange = True
Me.ComboBox1 = Me.ComboBox1
AEnregistrer = True
InChange = False

Worksheets("Materiel").Cells(9) = Me.ComboBox1.Value

With Me
LigneSAP = .ComboBox1.ListIndex + 2
.ComboBox2 = Cells(LigneSAP, 9)
End With
InChange = False
End If
End Sub

Avatar
MichDenis
.ComboBox2 = Cells(LigneSAP, 9)

A ) Dans cette ligne de code, Où ta référence à la feuille

B ) Si tu as un problème, sois plus précis... quelle est la nature du problème ?
dans quelle procédure ?


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

On 4 mar, 14:13, "MichDenis" wrote:
Dans tous tes procédures :
à chaque fois que tu désignes une cellule, si cette cellule n'appartient
pas à la feuille active, tu dois faire référence à la feuille à laquelle
cette cellule fait référence ...

Worksheets("NomDeLaFeuille").cells( ...) = Me.Combobox1.Value

Exemple :
'---------------------
Private Sub UserForm_Initialize()

With Worksheets("Materiel")
Me.ComboBox2.RowSource = .Name & "!" & .Range("I2", .Range("I2").End(xlDown)).Address
Me.ComboBox2.ListIndex = 1
Me.ComboBox1.RowSource = .Name & "!" & .Range("J2", .Range("J2").End(xlDown)).Address
End With
AEnregistrer = False
End Sub
'---------------------
Le principe est logique effectivement mais j'ai encore de la peine

(doux euphémisme !), je dois avoir quelque chose en trop maintenant !
J'ai fait :

Private Sub ComboBox1_Change()
If Not InChange Then
InChange = True
Me.ComboBox1 = Me.ComboBox1
AEnregistrer = True
InChange = False

Worksheets("Materiel").Cells(9) = Me.ComboBox1.Value

With Me
LigneSAP = .ComboBox1.ListIndex + 2
.ComboBox2 = Cells(LigneSAP, 9)
End With
InChange = False
End If
End Sub

Avatar
h2so4
bonjour,

les adaptations que tu as faites comportent des erreurs, j'en vois 2

Private Sub ComboBox1_Change()
If Not InChange Then
InChange = True
Me.ComboBox1 = Me.ComboBox1
AEnregistrer = True
InChange = False

Worksheets("Materiel").Cells(LigneSAP,9) = Me.ComboBox1.Value
'correction 1-----------------^^^^^^^^
With Me
LigneSAP = .ComboBox1.ListIndex + 2
.ComboBox2 = Worksheets("Materiel").Cells(LigneSAP, 9)
'correction 2----^^^^^^^^^^^^^^^^^^^
End With
InChange = False
End If
End Sub


--
--
h2so4
play triogical at http://www.triogical.com
"Alba" wrote in message
news:
On 4 mar, 14:13, "MichDenis" wrote:
Dans tous tes procédures :
à chaque fois que tu désignes une cellule, si cette cellule n'appartient
pas à la feuille active, tu dois faire référence à la feuille à laquelle
cette cellule fait référence ...

Worksheets("NomDeLaFeuille").cells( ...) = Me.Combobox1.Value

Exemple :
'---------------------
Private Sub UserForm_Initialize()

With Worksheets("Materiel")
Me.ComboBox2.RowSource = .Name & "!" & .Range("I2",
.Range("I2").End(xlDown)).Address
Me.ComboBox2.ListIndex = 1
Me.ComboBox1.RowSource = .Name & "!" & .Range("J2",
.Range("J2").End(xlDown)).Address
End With
AEnregistrer = False
End Sub
'---------------------
Le principe est logique effectivement mais j'ai encore de la peine

(doux euphémisme !), je dois avoir quelque chose en trop maintenant !
J'ai fait :

Private Sub ComboBox1_Change()
If Not InChange Then
InChange = True
Me.ComboBox1 = Me.ComboBox1
AEnregistrer = True
InChange = False

Worksheets("Materiel").Cells(9) = Me.ComboBox1.Value

With Me
LigneSAP = .ComboBox1.ListIndex + 2
.ComboBox2 = Cells(LigneSAP, 9)
End With
InChange = False
End If
End Sub

Avatar
Alba
Et bien j'ai donc copié le Private Sub UserForm_Initialize() comme tu
me l'indique :

With Worksheets("Materiel")
Me.ComboBox2.RowSource = .Name & "!"
& .Range("I2", .Range("I2").End(xlDown)).Address
Me.ComboBox2.ListIndex = 1
Me.ComboBox1.RowSource = .Name & "!"
& .Range("J2", .Range("J2").End(xlDown)).Address
End With
AEnregistrer = False
End Sub

Mais lorsque tu me dis :

tu dois faire référence à la feuille à laquelle
cette cellule fait référence ...

Worksheets("NomDeLaFeuille").cells( ...) = Me.Combobox1.Value

Je ne sais pas où je dois placé cette partie ???

J'avais essayé d'ajouter cette précision de Worksheets et de
cells( ...) comme cela :

Private Sub ComboBox1_Change()
If Not InChange Then
InChange = True
Me.ComboBox1 = Me.ComboBox1
AEnregistrer = True
InChange = False

Worksheets("Materiel").Cells(9) = Me.ComboBox1.Value

With Me
LigneSAP = .ComboBox1.ListIndex + 2
.ComboBox2 = Cells(LigneSAP, 9)
End With
InChange = False
End If
End Sub

...mais de toute évidence ce n'est pas juste, je garde toujours le
même problème.
Avatar
Alba
Excuse moi on a dû posté en même temps.


Donc maintenant dans la totalité j'ai ceci :

Dim LigneSAP As Integer
Dim InChange As Boolean
Dim AEnregistrer As Boolean
------------------------------------------------
Private Sub ComboBox1_Change()
If Not InChange Then
InChange = True
Me.ComboBox1 = Me.ComboBox1
AEnregistrer = True
InChange = False

Worksheets("Materiel").Cells(LigneSAP, 9) = Me.ComboBox1.Value
With Me
LigneSAP = .ComboBox1.ListIndex + 2
.ComboBox2 = Worksheets("Materiel").Cells(LigneSAP, 9)
End With
InChange = False
End If
End Sub
----------------------------------------------------------------------------
Private Sub ComboBox2_Change()

If Not InChange Then
InChange = True
Me.ComboBox2 = Me.ComboBox2
AEnregistrer = True
InChange = False

Worksheets("Materiel").Cells(LigneSAP, 10) = Me.ComboBox2.Value

With Me
LigneSAP = .ComboBox2.ListIndex + 1
.ComboBox1 = Worksheets("Materiel").Cells(LigneSAP, 10)

End With
InChange = False
End If
End Sub
-------------------------------------------------------------------


Private Sub UserForm_Initialize()

With Worksheets("Materiel")
Me.ComboBox2.RowSource = .Name & "!"
& .Range("I2", .Range("I2").End(xlDown)).Address
Me.ComboBox2.ListIndex = 1
Me.ComboBox1.RowSource = .Name & "!"
& .Range("J2", .Range("J2").End(xlDown)).Address
End With
AEnregistrer = False
End Sub
-------------------------------------------
Pour Private Sub ComboBox2_Change() j'ai remplacé les comboBox 1 par
combobox 2

Ma colonne pour combobox1 est en 9
et
pour combobox 2 en 10
donc je remplace le 9 par le 10

mais j'ai un bug sur Worksheets("Materiel").Cells(LigneSAP, 10) =
Me.ComboBox2.Value

J'suis vraiment débutante j'suis navrée mais je ne sais pas ce que je
dois encore changer ??

Merci en tout cas de votre aide.
Avatar
MichDenis
| mais j'ai un bug sur
| Worksheets("Materiel").Cells(LigneSAP, 10) =Me.ComboBox2.Value

Si la variable "LigneSap" représente un chiffre entre 1 et 65536
Si la feuille "Materiel" existe vraiment
Il n'y a aucune raison que cela ne fonctionne pas !

Si tu as un message d'erreur, quel est-il ?




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


Excuse moi on a dû posté en même temps.


Donc maintenant dans la totalité j'ai ceci :

Dim LigneSAP As Integer
Dim InChange As Boolean
Dim AEnregistrer As Boolean
------------------------------------------------
Private Sub ComboBox1_Change()
If Not InChange Then
InChange = True
Me.ComboBox1 = Me.ComboBox1
AEnregistrer = True
InChange = False

Worksheets("Materiel").Cells(LigneSAP, 9) = Me.ComboBox1.Value
With Me
LigneSAP = .ComboBox1.ListIndex + 2
.ComboBox2 = Worksheets("Materiel").Cells(LigneSAP, 9)
End With
InChange = False
End If
End Sub
----------------------------------------------------------------------------
Private Sub ComboBox2_Change()

If Not InChange Then
InChange = True
Me.ComboBox2 = Me.ComboBox2
AEnregistrer = True
InChange = False

Worksheets("Materiel").Cells(LigneSAP, 10) = Me.ComboBox2.Value

With Me
LigneSAP = .ComboBox2.ListIndex + 1
.ComboBox1 = Worksheets("Materiel").Cells(LigneSAP, 10)

End With
InChange = False
End If
End Sub
-------------------------------------------------------------------


Private Sub UserForm_Initialize()

With Worksheets("Materiel")
Me.ComboBox2.RowSource = .Name & "!"
& .Range("I2", .Range("I2").End(xlDown)).Address
Me.ComboBox2.ListIndex = 1
Me.ComboBox1.RowSource = .Name & "!"
& .Range("J2", .Range("J2").End(xlDown)).Address
End With
AEnregistrer = False
End Sub
-------------------------------------------
Pour Private Sub ComboBox2_Change() j'ai remplacé les comboBox 1 par
combobox 2

Ma colonne pour combobox1 est en 9
et
pour combobox 2 en 10
donc je remplace le 9 par le 10

mais j'ai un bug sur Worksheets("Materiel").Cells(LigneSAP, 10) Me.ComboBox2.Value

J'suis vraiment débutante j'suis navrée mais je ne sais pas ce que je
dois encore changer ??

Merci en tout cas de votre aide.
Avatar
Alba
Au risque de ne pas trouver les bons termes dans mes explications, le
fichier sera plus explicite.

Et il bug donc sur Worksheets("Materiel").Cells(LigneSAP, 10)
=Me.ComboBox2.Value
http://cjoint.com/confirm.php?cjointÞvNgCxACR

merci bonne soirée
Avatar
MichDenis
Dans ces 2 procédures de ton module formulaire, la variable
dans ces 2 lignes de code :
Worksheets("Materiel").Cells(LigneSAP, 9) = Me.ComboBox1.Value
Et
Worksheets("Materiel").Cells(LigneSAP, 9) = Me.ComboBox2.Value

La variable LigneSap = 0 -> conclusion Cells(0,9) est impossible d'où
génération d'une erreur.
à toi de voir quelle est la valeur que la variable devrait avoir avant d'exécution
de la ligne de code dans chacune des procédures...

Une dernière observation, dans chacune des procédures, tu as un ligne de code ressemblant à ceci :
Me.ComboBox1 = Me.ComboBox1
Quelle est l'utilité d'une telle ligne de code ?

'----------------------------
Private Sub ComboBox1_Change()
If Not InChange Then
InChange = True
Me.ComboBox1 = Me.ComboBox1
AEnregistrer = True
InChange = False

Worksheets("Materiel").Cells(LigneSAP, 9) = Me.ComboBox1.Value

With Me
LigneSAP = .ComboBox1.ListIndex + 2
.ComboBox2 = Worksheets("Materiel").Cells(LigneSAP, 9)
End With
InChange = False
End If
End Sub
'----------------------------
Private Sub ComboBox2_Change()

If Not InChange Then
InChange = True
Me.ComboBox2 = Me.ComboBox2
AEnregistrer = True
InChange = False

Worksheets("Materiel").Cells(LigneSAP, 10) = Me.ComboBox2.Value

With Me
LigneSAP = .ComboBox2.ListIndex + 2
.ComboBox1 = Worksheets("Materiel").Cells(LigneSAP, 10)

End With
InChange = False
End If
End Sub
'----------------------------




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


Au risque de ne pas trouver les bons termes dans mes explications, le
fichier sera plus explicite.

Et il bug donc sur Worksheets("Materiel").Cells(LigneSAP, 10)
=Me.ComboBox2.Value
http://cjoint.com/confirm.php?cjointÞvNgCxACR

merci bonne soirée
Avatar
Alba
On 5 mar, 13:13, "MichDenis" wrote:
Dans ces 2 procédures de ton module formulaire, la variable
dans ces 2 lignes de code :
Worksheets("Materiel").Cells(LigneSAP, 9) = Me.ComboBox1.Value
Et
Worksheets("Materiel").Cells(LigneSAP, 9) = Me.ComboBox2.Value

La variable LigneSap = 0 -> conclusion Cells(0,9) est impossible d'où
génération d'une erreur.
à toi de voir quelle est la valeur que la variable devrait avoir avant d'exécution
de la ligne de code dans chacune des procédures...

Une dernière observation, dans chacune des procédures, tu as un ligne de code ressemblant à ceci :
Me.ComboBox1 = Me.ComboBox1
Quelle est l'utilité d'une telle ligne de code ?
--------------------------------------------------------------------------- ---------------------

c'est un userform que j'ai récupéré, ( il me sembe sur XLD) et il
était exactement ce dont j'avais besoin.
http://cjoint.com/confirm.php?cjointßsbOSymUS


alors j'ai souhaité l'installé sur mon classeur et tenter de l'adapter
à mes feuilles, mais je ne pensais pas que ce serait si difficile.

Alors à la question : Quelle est l'utilité d'une telle ligne de code ?
Je n'en sais rien du tout ? Si ce n'est que le choix d'un combobox
donnera le résultat de l'autre et inversément.
Mais je ne peux malheureusement pas du tout répondre à tes questions.
Merci quand même de ton aide .

1 2