Sur un form, j'ai une quarantaine de ComboBox (43 exactement). Pour
chacune d'elles, j'ai 2 textBox qui leur sont d=E9di=E9es (donc 86
textbox).
J'ai le code suivant apr=E8s mise =E0 jour de chacune des combobox :
Private Sub ComboBox1_AfterUpdate()
If Me. ComboBox1 <> 0 Then
Me.TextBox1 =3D Me.ComboBox1.Column(1)
Me.TextBox2 =3D Me. ComboBox1.Column(2)
Else
Me.TextBox1 =3D VbNullString
Me.TextBox2 =3D VbNullString
End If
End Sub
Vu le nombre de combobox, n'y aurait-il pas une solution plus =E9conome
en lignes. J'ai pens=E9 =E0 faire une boucle et un compteur mais je suis
un peu perdu sur la fa=E7on d'utiliser le compteur dans la boucle.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
ze Titi
Bonjour malabar
Tel que sont nommés tes champs, ça me paraît un peu compliqué... En utilisant une convention de nommage du style: Nom de la combo : comboXX Nom des champs textes : texte1XX et texte2XX où XX correspond à un compteur de 01 à 43 (attention au 0 avant les nombres à un seul chiffre...) tu peux utiliser la procédure suivante :
Note: le code suivant est très fortement inspiré du code trouvé à la page suivante sur le site de notre ami Raymond: http://officesystem.access.free.fr/ex_fonction_unique.htm
Pour commencer, sélectionne toutes les comboboxes pour lesquelles tu souhaites avoir le même comportement. Sur la ligne remarques de l'onglet Autres, tapes le mot : Groupe1
Ensuite, colle dans le code du formulaire:
'***** Début du code
Private Sub Form_Load() EventGroup Me, "Groupe1", "maj_combo" End Sub
Public Function maj_combo(Nom_Combo As String) As Boolean Me.Controls("Texte1" & Right(Nom_Combo,2)=IIf(Me.Controls(Nom_combo)<>0,Me.Controls(Nom_combo).Column(1),vbNullString) Me.Controls("Texte2" & Right(Nom_combo,2)=IIf(Me.Controls(Nom_combo)<>0,Me.Controls(Nom_combo).Column(2),vbNullString) End Function
Public Function EventGroup(FormObject As Form, GroupName As String, FunctionName As String) As Boolean On Error GoTo Err_EventGroup Dim Ctl As Control For Each Ctl In FormObject.Controls If Ctl.Tag = GroupName Then Ctl.OnAfterUpdate = "=" & FunctionName & "(""" & Ctl.Name & """)" End If Next Ctl EventGroup = True Err_EventGroup: End Function
'***** Fin du code
A tester... Dis-nous !
Hello
Sur un form, j'ai une quarantaine de ComboBox (43 exactement). Pour chacune d'elles, j'ai 2 textBox qui leur sont dédiées (donc 86 textbox).
J'ai le code suivant après mise à jour de chacune des combobox :
Private Sub ComboBox1_AfterUpdate() If Me. ComboBox1 <> 0 Then Me.TextBox1 = Me.ComboBox1.Column(1) Me.TextBox2 = Me. ComboBox1.Column(2) Else Me.TextBox1 = VbNullString Me.TextBox2 = VbNullString End If End Sub
Vu le nombre de combobox, n'y aurait-il pas une solution plus économe en lignes. J'ai pensé à faire une boucle et un compteur mais je suis un peu perdu sur la façon d'utiliser le compteur dans la boucle.
Merci de votre aide
-- Cordialement, Ze Titi
Tout pour réussir avec Access : http://www.mpfa.info
Bonjour malabar
Tel que sont nommés tes champs, ça me paraît un peu compliqué...
En utilisant une convention de nommage du style:
Nom de la combo : comboXX
Nom des champs textes : texte1XX et texte2XX
où XX correspond à un compteur de 01 à 43 (attention au 0 avant les nombres à un seul chiffre...)
tu peux utiliser la procédure suivante :
Note: le code suivant est très fortement inspiré du code trouvé à la page suivante sur le site de notre ami Raymond:
http://officesystem.access.free.fr/ex_fonction_unique.htm
Pour commencer, sélectionne toutes les comboboxes pour lesquelles tu souhaites avoir le même comportement. Sur la ligne remarques de l'onglet Autres, tapes le mot : Groupe1
Ensuite, colle dans le code du formulaire:
'***** Début du code
Private Sub Form_Load()
EventGroup Me, "Groupe1", "maj_combo"
End Sub
Public Function maj_combo(Nom_Combo As String) As Boolean
Me.Controls("Texte1" & Right(Nom_Combo,2)=IIf(Me.Controls(Nom_combo)<>0,Me.Controls(Nom_combo).Column(1),vbNullString)
Me.Controls("Texte2" & Right(Nom_combo,2)=IIf(Me.Controls(Nom_combo)<>0,Me.Controls(Nom_combo).Column(2),vbNullString)
End Function
Public Function EventGroup(FormObject As Form, GroupName As String, FunctionName As String) As Boolean
On Error GoTo Err_EventGroup
Dim Ctl As Control
For Each Ctl In FormObject.Controls
If Ctl.Tag = GroupName Then
Ctl.OnAfterUpdate = "=" & FunctionName & "(""" & Ctl.Name & """)"
End If
Next Ctl
EventGroup = True
Err_EventGroup:
End Function
'***** Fin du code
A tester... Dis-nous !
Hello
Sur un form, j'ai une quarantaine de ComboBox (43 exactement). Pour
chacune d'elles, j'ai 2 textBox qui leur sont dédiées (donc 86
textbox).
J'ai le code suivant après mise à jour de chacune des combobox :
Private Sub ComboBox1_AfterUpdate()
If Me. ComboBox1 <> 0 Then
Me.TextBox1 = Me.ComboBox1.Column(1)
Me.TextBox2 = Me. ComboBox1.Column(2)
Else
Me.TextBox1 = VbNullString
Me.TextBox2 = VbNullString
End If
End Sub
Vu le nombre de combobox, n'y aurait-il pas une solution plus économe
en lignes. J'ai pensé à faire une boucle et un compteur mais je suis
un peu perdu sur la façon d'utiliser le compteur dans la boucle.
Merci de votre aide
--
Cordialement,
Ze Titi
Tout pour réussir avec Access :
http://www.mpfa.info
Tel que sont nommés tes champs, ça me paraît un peu compliqué... En utilisant une convention de nommage du style: Nom de la combo : comboXX Nom des champs textes : texte1XX et texte2XX où XX correspond à un compteur de 01 à 43 (attention au 0 avant les nombres à un seul chiffre...) tu peux utiliser la procédure suivante :
Note: le code suivant est très fortement inspiré du code trouvé à la page suivante sur le site de notre ami Raymond: http://officesystem.access.free.fr/ex_fonction_unique.htm
Pour commencer, sélectionne toutes les comboboxes pour lesquelles tu souhaites avoir le même comportement. Sur la ligne remarques de l'onglet Autres, tapes le mot : Groupe1
Ensuite, colle dans le code du formulaire:
'***** Début du code
Private Sub Form_Load() EventGroup Me, "Groupe1", "maj_combo" End Sub
Public Function maj_combo(Nom_Combo As String) As Boolean Me.Controls("Texte1" & Right(Nom_Combo,2)=IIf(Me.Controls(Nom_combo)<>0,Me.Controls(Nom_combo).Column(1),vbNullString) Me.Controls("Texte2" & Right(Nom_combo,2)=IIf(Me.Controls(Nom_combo)<>0,Me.Controls(Nom_combo).Column(2),vbNullString) End Function
Public Function EventGroup(FormObject As Form, GroupName As String, FunctionName As String) As Boolean On Error GoTo Err_EventGroup Dim Ctl As Control For Each Ctl In FormObject.Controls If Ctl.Tag = GroupName Then Ctl.OnAfterUpdate = "=" & FunctionName & "(""" & Ctl.Name & """)" End If Next Ctl EventGroup = True Err_EventGroup: End Function
'***** Fin du code
A tester... Dis-nous !
Hello
Sur un form, j'ai une quarantaine de ComboBox (43 exactement). Pour chacune d'elles, j'ai 2 textBox qui leur sont dédiées (donc 86 textbox).
J'ai le code suivant après mise à jour de chacune des combobox :
Private Sub ComboBox1_AfterUpdate() If Me. ComboBox1 <> 0 Then Me.TextBox1 = Me.ComboBox1.Column(1) Me.TextBox2 = Me. ComboBox1.Column(2) Else Me.TextBox1 = VbNullString Me.TextBox2 = VbNullString End If End Sub
Vu le nombre de combobox, n'y aurait-il pas une solution plus économe en lignes. J'ai pensé à faire une boucle et un compteur mais je suis un peu perdu sur la façon d'utiliser le compteur dans la boucle.
Merci de votre aide
-- Cordialement, Ze Titi
Tout pour réussir avec Access : http://www.mpfa.info
malabar
On 12 fév, 09:48, ze Titi wrote:
Bonjour malabar
Tel que sont nommés tes champs, ça me paraît un peu compliqué... En utilisant une convention de nommage du style: Nom de la combo : comboXX Nom des champs textes : texte1XX et texte2XX où XX correspond à un compteur de 01 à 43 (attention au 0 avant les nombres à un seul chiffre...) tu peux utiliser la procédure suivante :
Note: le code suivant est très fortement inspiré du code trouvé à la page suivante sur le site de notre ami Raymond:http://officesystem.acce ss.free.fr/ex_fonction_unique.htm
Pour commencer, sélectionne toutes les comboboxes pour lesquelles tu so uhaites avoir le même comportement. Sur la ligne remarques de l'onglet Au tres, tapes le mot : Groupe1
Ensuite, colle dans le code du formulaire:
'***** Début du code
Private Sub Form_Load() EventGroup Me, "Groupe1", "maj_combo" End Sub
Public Function maj_combo(Nom_Combo As String) As Boolean Me.Controls("Texte1" & Right(Nom_Combo,2)=IIf(Me.Controls(Nom_combo )<>0,Me.Controls(Nom_combo).Column(1),vbNullString) Me.Controls("Texte2" & Right(Nom_combo,2)=IIf(Me.Controls(Nom_combo )<>0,Me.Controls(Nom_combo).Column(2),vbNullString) End Function
Public Function EventGroup(FormObject As Form, GroupName As String, Funct ionName As String) As Boolean On Error GoTo Err_EventGroup Dim Ctl As Control For Each Ctl In FormObject.Controls If Ctl.Tag = GroupName Then Ctl.OnAfterUpdate = "=" & FunctionName & "(""" & Ctl.Name & """)" End If Next Ctl EventGroup = True Err_EventGroup: End Function
'***** Fin du code
A tester... Dis-nous !
Hello
Sur un form, j'ai une quarantaine de ComboBox (43 exactement). Pour chacune d'elles, j'ai 2 textBox qui leur sont dédiées (donc 86 textbox).
J'ai le code suivant après mise à jour de chacune des combobox :
Private Sub ComboBox1_AfterUpdate() If Me. ComboBox1 <> 0 Then Me.TextBox1 = Me.ComboBox1.Column(1) Me.TextBox2 = Me. ComboBox1.Column(2) Else Me.TextBox1 = VbNullString Me.TextBox2 = VbNullString End If End Sub
Vu le nombre de combobox, n'y aurait-il pas une solution plus économe en lignes. J'ai pensé à faire une boucle et un compteur mais je suis un peu perdu sur la façon d'utiliser le compteur dans la boucle.
Merci de votre aide
-- Cordialement, Ze Titi
Tout pour réussir avec Access :http://www.mpfa.info- Masquer le texte d es messages précédents -
- Afficher le texte des messages précédents -
Hello
Merci pour ta réponse rapide. J'ai passé une bonne partie du we à chercher notamment sur le site en lien, sans y parvenir. Je teste et reviens donner le résultat.
On 12 fév, 09:48, ze Titi <ze_titi_enlever-c...@tiscali.fr> wrote:
Bonjour malabar
Tel que sont nommés tes champs, ça me paraît un peu compliqué...
En utilisant une convention de nommage du style:
Nom de la combo : comboXX
Nom des champs textes : texte1XX et texte2XX
où XX correspond à un compteur de 01 à 43 (attention au 0 avant les nombres à un seul chiffre...)
tu peux utiliser la procédure suivante :
Note: le code suivant est très fortement inspiré du code trouvé à la page suivante sur le site de notre ami Raymond:http://officesystem.acce ss.free.fr/ex_fonction_unique.htm
Pour commencer, sélectionne toutes les comboboxes pour lesquelles tu so uhaites avoir le même comportement. Sur la ligne remarques de l'onglet Au tres, tapes le mot : Groupe1
Ensuite, colle dans le code du formulaire:
'***** Début du code
Private Sub Form_Load()
EventGroup Me, "Groupe1", "maj_combo"
End Sub
Public Function maj_combo(Nom_Combo As String) As Boolean
Me.Controls("Texte1" & Right(Nom_Combo,2)=IIf(Me.Controls(Nom_combo )<>0,Me.Controls(Nom_combo).Column(1),vbNullString)
Me.Controls("Texte2" & Right(Nom_combo,2)=IIf(Me.Controls(Nom_combo )<>0,Me.Controls(Nom_combo).Column(2),vbNullString)
End Function
Public Function EventGroup(FormObject As Form, GroupName As String, Funct ionName As String) As Boolean
On Error GoTo Err_EventGroup
Dim Ctl As Control
For Each Ctl In FormObject.Controls
If Ctl.Tag = GroupName Then
Ctl.OnAfterUpdate = "=" & FunctionName & "(""" & Ctl.Name & """)"
End If
Next Ctl
EventGroup = True
Err_EventGroup:
End Function
'***** Fin du code
A tester... Dis-nous !
Hello
Sur un form, j'ai une quarantaine de ComboBox (43 exactement). Pour
chacune d'elles, j'ai 2 textBox qui leur sont dédiées (donc 86
textbox).
J'ai le code suivant après mise à jour de chacune des combobox :
Private Sub ComboBox1_AfterUpdate()
If Me. ComboBox1 <> 0 Then
Me.TextBox1 = Me.ComboBox1.Column(1)
Me.TextBox2 = Me. ComboBox1.Column(2)
Else
Me.TextBox1 = VbNullString
Me.TextBox2 = VbNullString
End If
End Sub
Vu le nombre de combobox, n'y aurait-il pas une solution plus économe
en lignes. J'ai pensé à faire une boucle et un compteur mais je suis
un peu perdu sur la façon d'utiliser le compteur dans la boucle.
Merci de votre aide
--
Cordialement,
Ze Titi
Tout pour réussir avec Access :http://www.mpfa.info- Masquer le texte d es messages précédents -
- Afficher le texte des messages précédents -
Hello
Merci pour ta réponse rapide. J'ai passé une bonne partie du we à
chercher notamment sur le site en lien, sans y parvenir.
Je teste et reviens donner le résultat.
Tel que sont nommés tes champs, ça me paraît un peu compliqué... En utilisant une convention de nommage du style: Nom de la combo : comboXX Nom des champs textes : texte1XX et texte2XX où XX correspond à un compteur de 01 à 43 (attention au 0 avant les nombres à un seul chiffre...) tu peux utiliser la procédure suivante :
Note: le code suivant est très fortement inspiré du code trouvé à la page suivante sur le site de notre ami Raymond:http://officesystem.acce ss.free.fr/ex_fonction_unique.htm
Pour commencer, sélectionne toutes les comboboxes pour lesquelles tu so uhaites avoir le même comportement. Sur la ligne remarques de l'onglet Au tres, tapes le mot : Groupe1
Ensuite, colle dans le code du formulaire:
'***** Début du code
Private Sub Form_Load() EventGroup Me, "Groupe1", "maj_combo" End Sub
Public Function maj_combo(Nom_Combo As String) As Boolean Me.Controls("Texte1" & Right(Nom_Combo,2)=IIf(Me.Controls(Nom_combo )<>0,Me.Controls(Nom_combo).Column(1),vbNullString) Me.Controls("Texte2" & Right(Nom_combo,2)=IIf(Me.Controls(Nom_combo )<>0,Me.Controls(Nom_combo).Column(2),vbNullString) End Function
Public Function EventGroup(FormObject As Form, GroupName As String, Funct ionName As String) As Boolean On Error GoTo Err_EventGroup Dim Ctl As Control For Each Ctl In FormObject.Controls If Ctl.Tag = GroupName Then Ctl.OnAfterUpdate = "=" & FunctionName & "(""" & Ctl.Name & """)" End If Next Ctl EventGroup = True Err_EventGroup: End Function
'***** Fin du code
A tester... Dis-nous !
Hello
Sur un form, j'ai une quarantaine de ComboBox (43 exactement). Pour chacune d'elles, j'ai 2 textBox qui leur sont dédiées (donc 86 textbox).
J'ai le code suivant après mise à jour de chacune des combobox :
Private Sub ComboBox1_AfterUpdate() If Me. ComboBox1 <> 0 Then Me.TextBox1 = Me.ComboBox1.Column(1) Me.TextBox2 = Me. ComboBox1.Column(2) Else Me.TextBox1 = VbNullString Me.TextBox2 = VbNullString End If End Sub
Vu le nombre de combobox, n'y aurait-il pas une solution plus économe en lignes. J'ai pensé à faire une boucle et un compteur mais je suis un peu perdu sur la façon d'utiliser le compteur dans la boucle.
Merci de votre aide
-- Cordialement, Ze Titi
Tout pour réussir avec Access :http://www.mpfa.info- Masquer le texte d es messages précédents -
- Afficher le texte des messages précédents -
Hello
Merci pour ta réponse rapide. J'ai passé une bonne partie du we à chercher notamment sur le site en lien, sans y parvenir. Je teste et reviens donner le résultat.
Pierre CFI [mvp]
alors mon ami malabar, en forme ? tu vois que je t'ai à l'oeil -- Pierre MVP Access *************************************** Conseils MPFA: http://www.mpfa.info/ *********************************************************
alors mon ami malabar, en forme ? tu vois que je t'ai à l'oeil
--
Pierre
MVP Access
***************************************
Conseils MPFA: http://www.mpfa.info/
*********************************************************
alors mon ami malabar, en forme ? tu vois que je t'ai à l'oeil -- Pierre MVP Access *************************************** Conseils MPFA: http://www.mpfa.info/ *********************************************************
malabar
On 12 fév, 16:23, "Pierre CFI [mvp]" wrote:
alors mon amimalabar, en forme ? tu vois que je t'ai à l'oeil -- Pierre MVP Access *************************************** Conseils MPFA:http://www.mpfa.info/ *********************************************************
Hello
désolé pour ma réponse tardive. J'ai testé ton code et il fonctionne. ;)
Je me suis permis de poser la même question sur un autre forum et j'ai obtenu cette réponse :
Private Function ComboMachin(ByVal idCombo As Integer) dim IdText As Integer idText = idCombo*2 - 1 If Me.Controls("Combobox" & idCombo) <> 0 Then Me.Controls("TextBox" & idText) = Me.Controls("ComboBox" & idCombo).Column(1) Me.Controls("TextBox" & idText + 1) = Me.Controls("ComboBox" & idCombo).Column(2) Else Me.Controls("TextBox" & idText) = VbNullString Me.Controls("TextBox" & idText + 1) = VbNullString End If End Sub
Ensuite dans l'événement Load du formulaire :
Dim ctl as Control For Each ctl in Me.Controls If ctl.ControlType = acComboBox Then ctl.AfterUpdate = "=ComboMachin(" & CInt(Mid(ctl.name, Len("Combobox") + 1)) & ")" End If Next ctl
Il me permet de me garder le tag sous le coude pour une évolution à venir.
Mais j'obtiens ce message : "Impossible de trouver le champ 'Combobox 1' auquel il est fait référence dans votre expression."
PS : Il y a un espace entre Combobox et le nombre correspondant dans le message d'erreur alors que je n'en est pas mis dans le nommage des combobox.
Merci de votre aide.
On 12 fév, 16:23, "Pierre CFI [mvp]" <XXX_pierresalaun@wanadoo> wrote:
alors mon amimalabar, en forme ? tu vois que je t'ai à l'oeil
--
Pierre
MVP Access
***************************************
Conseils MPFA:http://www.mpfa.info/
*********************************************************
Hello
désolé pour ma réponse tardive. J'ai testé ton code et il
fonctionne. ;)
Je me suis permis de poser la même question sur un autre forum et j'ai
obtenu cette réponse :
Private Function ComboMachin(ByVal idCombo As Integer)
dim IdText As Integer
idText = idCombo*2 - 1
If Me.Controls("Combobox" & idCombo) <> 0 Then
Me.Controls("TextBox" & idText) = Me.Controls("ComboBox" &
idCombo).Column(1)
Me.Controls("TextBox" & idText + 1) = Me.Controls("ComboBox" &
idCombo).Column(2)
Else
Me.Controls("TextBox" & idText) = VbNullString
Me.Controls("TextBox" & idText + 1) = VbNullString
End If
End Sub
Ensuite dans l'événement Load du formulaire :
Dim ctl as Control
For Each ctl in Me.Controls
If ctl.ControlType = acComboBox Then
ctl.AfterUpdate = "=ComboMachin(" & CInt(Mid(ctl.name,
Len("Combobox") + 1)) & ")"
End If
Next ctl
Il me permet de me garder le tag sous le coude pour une évolution à
venir.
Mais j'obtiens ce message :
"Impossible de trouver le champ 'Combobox 1' auquel il est fait
référence dans votre expression."
PS : Il y a un espace entre Combobox et le nombre correspondant dans
le message d'erreur alors que je n'en est pas mis dans le nommage des
combobox.
alors mon amimalabar, en forme ? tu vois que je t'ai à l'oeil -- Pierre MVP Access *************************************** Conseils MPFA:http://www.mpfa.info/ *********************************************************
Hello
désolé pour ma réponse tardive. J'ai testé ton code et il fonctionne. ;)
Je me suis permis de poser la même question sur un autre forum et j'ai obtenu cette réponse :
Private Function ComboMachin(ByVal idCombo As Integer) dim IdText As Integer idText = idCombo*2 - 1 If Me.Controls("Combobox" & idCombo) <> 0 Then Me.Controls("TextBox" & idText) = Me.Controls("ComboBox" & idCombo).Column(1) Me.Controls("TextBox" & idText + 1) = Me.Controls("ComboBox" & idCombo).Column(2) Else Me.Controls("TextBox" & idText) = VbNullString Me.Controls("TextBox" & idText + 1) = VbNullString End If End Sub
Ensuite dans l'événement Load du formulaire :
Dim ctl as Control For Each ctl in Me.Controls If ctl.ControlType = acComboBox Then ctl.AfterUpdate = "=ComboMachin(" & CInt(Mid(ctl.name, Len("Combobox") + 1)) & ")" End If Next ctl
Il me permet de me garder le tag sous le coude pour une évolution à venir.
Mais j'obtiens ce message : "Impossible de trouver le champ 'Combobox 1' auquel il est fait référence dans votre expression."
PS : Il y a un espace entre Combobox et le nombre correspondant dans le message d'erreur alors que je n'en est pas mis dans le nommage des combobox.