AIDE MOI A OPTIMISE LE CODE [Résolu]

Signaler
Messages postés
29
Date d'inscription
jeudi 10 avril 2008
Statut
Membre
Dernière intervention
25 mai 2008
-
Messages postés
29
Date d'inscription
jeudi 10 avril 2008
Statut
Membre
Dernière intervention
25 mai 2008
-
BONJOUR
frnchement j ai essaye plain de code mais sa marche pas, alors si quelqu'un peut m aide
voila je cherche l equivalent de se code mais en moin long que sa (ca marche mais  c pas pratique )

Private Sub DC_ZI_Click(Area As Integer)
SO = "La Soukra"
BA = "Ben Arous"
FO = "Fouchana"
HC = "Hammam Chatt"
MG = "Megrine"
MO = "Mourouj"
RA = "Rades"
DH = "Douar Hicher"
MR = "Mornaguia"
GO = "La Goulette"
Select Case DC_DELEG
Case SO
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_sokra" 'zone_sokra est une requette de la table general qui apartien a la ville de sokra
    DC_ZI.ListField = "nom_zone"
Case BA
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_benarous"
    DC_ZI.ListField = "nom_zone"
Case FO
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_fouchana"
    DC_ZI.ListField = "nom_zone"
Case HC
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_hamamchat"
    DC_ZI.ListField = "nom_zone"
Case MG
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_megrine"
    DC_ZI.ListField = "nom_zone"
Case MO
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_mourouj"
    DC_ZI.ListField = "nom_zone"
Case RA
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_rades"
    DC_ZI.ListField = "nom_zone"
Case DH
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_douarhicher"
    DC_ZI.ListField = "nom_zone"
Case MR
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_mornaguia"
    DC_ZI.ListField = "nom_zone"
Case GO
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_goulette"
    DC_ZI.ListField = "nom_zone"
End Select


End Sub

merci

22 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
salut,

pour respecter ton exemple alors....

Private Sub DC_ZI_Click(Area As Integer)
    Dim sBuffer As String
    
    If InStrB(1, DC_DELEG, "La ") Then
        sBuffer = Right$(DC_DELEG, Len(DC_DELEG) - 3)
    Else
        sBuffer = Replace(DC_DELEG, " ", vbNullString)
    End If
    
    DC_ZI.Refresh
    DC_ZI.RowMember "zone_" & LCase$(sBuffer)
    DC_ZI.ListField = "nom_zone"
End Sub

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
je te recopie le code que tu nous avais indiqué lorsque tu as posé ta question, code qui fonctionnait mais que tu voulais réduire :

Private Sub DC_ZI_Click(Area As Integer)

SO =  "La Soukra"
BA = "Ben Arous"
FO = "Fouchana"
HC = "Hammam Chatt"
MG = "Megrine"
MO = "Mourouj"
RA = "Rades"
DH = "Douar Hicher"
MR = "Mornaguia"
GO = "La Goulette"

Select Case DC_DELEG
Case SO
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_sokra" 'zone_sokra est une
requette de la table general qui apartien a la ville de
sokra
    DC_ZI.ListField = "nom_zone"
Case BA
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_benarous"
    DC_ZI.ListField = "nom_zone"
Case FO
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_fouchana"
    DC_ZI.ListField = "nom_zone"
Case HC
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_hamamchat"
    DC_ZI.ListField = "nom_zone"
Case MG
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_megrine"
    DC_ZI.ListField = "nom_zone"
Case MO
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_mourouj"
    DC_ZI.ListField = "nom_zone"
Case RA
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_rades"
    DC_ZI.ListField = "nom_zone"
Case DH
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_douarhicher"
    DC_ZI.ListField = "nom_zone"
Case MR
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_mornaguia"
    DC_ZI.ListField = "nom_zone"
Case GO
    DC_ZI.Refresh
    DC_ZI.RowMember = "zone_goulette"
    DC_ZI.ListField = "nom_zone"
End Select

End Sub

en regardant chaque Case on s'aperçoit que le code est partout le même A L'EXCEPTION de  SO et GO

en effet DC_ZI.RowMember reçoit le Text de DC_DELEG, en minuscule, sans espace, sauf pour SO et GO auxquels en plus tu enlèves "La "

    If InStrB(1, DC_DELEG, "La ") Then 'si la chaine contient "La "
        sBuffer  = Right$(DC_DELEG, Len(DC_DELEG) - 3) 'la chaine se voit ôtée de ce préfixe
    Else 'sinon
        sBuffer =  Replace(DC_DELEG, " ", vbNullString) 'on supprime les espaces
    End If
(...)
    DC_ZI.RowMember "zone_" & LCase$(sBuffer) 'row reçoit "zone_" + notre tampon en minuscule



normalement ont a choi dans DC_GOUV  TUNIS, ARIANA, BEN AROUS ET MANOUBA

ici il n'y aurait aucun intérêt à regarder si un item commence par "TUN" puisque ce n'est pas une parti que tu veux supprimer. la seule chose sera l'espace pour BEN AROUS, ainsi (je suppose) que les minuscules

donc uniquement :

    DC_ZI.Refresh
    DC_ZI.RowMember  = "deleg_" & LCase$(Replace(DC_GOUV.Text, " ", vbNullString))
    DC_ZI.ListField = "nom_deleg"

c'est plus clair?
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
2 combos, 2 requêtes...

    Set Ct = New ADODB.Connection
    Ct.Provider = "Microsoft.Jet.Oledb.4.0"
    Ct.ConnectionString = App.Path & "\ZI.mdb"
    Ct.Open
    
    Set RcCombo = New ADODB.Recordset
    RcCombo.Open "SELECT NOM_GOUV FROM
GOUVERNORAT ORDER BY NOM_GOUV", Ct, adOpenDynamic
    Combo1.Clear
    
    Do Until RcCombo.EOF
        Combo1.AddItem RcCombo!NOM_GOUV
        RcCombo.MoveNext
    Loop
    RcCombo.Close
    
    Set RcCombo = New ADODB.Recordset
    RcCombo.Open "SELECT NOM_DELEG FROM
GOUVERNORAT ORDER BY NOM_DELEG", Ct, adOpenDynamic
    Combo2.Clear
    
    Do Until RcCombo.EOF
        Combo2.AddItem RcCombo!NOM_DELEG
        RcCombo.MoveNext
    Loop
    RcCombo.Close

    Ct.Close

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
50
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
12 mai 2008

Bonjour
essai quelque chose comme ça.

DC_ZI.Refresh
    DC_ZI.RowMember = "zone_" & DC_DELEG
    DC_ZI.ListField = "nom_zone"

DC_DELEG doit être la chaine de caractère qui va bien
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
115
Salut,

Lol, en effet, il existe bien plus court :

Private Sub DC_ZI_Click(Area As Integer)

Dim valeurs as Collection
valeurs = new Collection
valeurs.add("La Soukra", "zone_sokra")
valeurs.add("Ben Arous", "zone_benarous")
valeurs.add("Fouchana", "zone_fouchana")
valeurs.add("Hammam Chatt", "zone_hamamchat")
valeurs.add("Megrine", "zone_megrine")
valeurs.add("Mourouj", "zone_mourouj")
valeurs.add("Rades", "zone_rades")
valeurs.add("Douar Hicher", "zone_douarhicher")
valeurs.add("Mornaguia", "zone_mornaguia")
valeurs.add("La Goulette", "zone_goulette")

DC_ZI.refresh
DC_ZI.RowMember = valeurs(DC_DELEG)
DC_ZI.ListField = "nom_zone"

End Sub

______________________________________
DarK Sidious
Messages postés
29
Date d'inscription
jeudi 10 avril 2008
Statut
Membre
Dernière intervention
25 mai 2008

ca marche marche pas
le probleme que je doit filtre le combobox de la table delegation selon les gouvernorat
et le code que j ai fais ca marche mais ...
merci pour votre aide mais les deux code ne marche pas

voila je cherche si il ya une equivlente a la fonction filtred  dans delphi en vb6 pour ecrire un vrais codes
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
115
Salut,

J'adore les "ca marche pas", as-tu au moins essayé de comprendre les algo qu'on te donne ??? Faut faire un minimum de travail lorsqu'on te donne un code. Le fait de bêtement copier-coller les codes ne suffit pas !

Dans le principe, ca marche très bien ! Ensuite, tu n'as plus qu'à transposer dans ton cas pour que "ca marche" !

Le principe de mon code marche très bien, y'a juste à corriger les 2-3 petites erreurs de syntaxes, ce qui donne :

Set valeurs = New Collection
Call valeurs.Add("zone_sokra", "La Soukra")
Call valeurs.Add("zone_benarous", "Ben Arous")
Call valeurs.Add("zone_fouchana", "Fouchana")
Call valeurs.Add("zone_hamamchat", "Hammam Chatt")
Call valeurs.Add("zone_megrine", "Megrine")
Call valeurs.Add("zone_mourouj", "Mourouj")
Call valeurs.Add("zone_rades", "Rades")
Call valeurs.Add("zone_douarhicher", "Douar Hicher")
Call valeurs.Add("zone_mornaguia", "Mornaguia")
Call valeurs.Add("zone_goulette", "La Goulette")

______________________________________
DarK Sidious
Messages postés
29
Date d'inscription
jeudi 10 avril 2008
Statut
Membre
Dernière intervention
25 mai 2008

le probeme que cela remple mon combobox1 mais cela enpeche le fonctionelment du deuxieme , malgre que tt s execute sans prob
Messages postés
29
Date d'inscription
jeudi 10 avril 2008
Statut
Membre
Dernière intervention
25 mai 2008

j ai 3 combobox DC_GOUV, DC_DELEG, DC_ZI
DC_GOUV le premie est connecte avec tab_gouv de ma  bd access
DC_DELEG la 2em est connecte avec tab_deleg de ma  bd access (comme j ai pas trouvecomment faire un filtre j ai fais 4 requete
deleg_tunis, deleg_ariana, deleg_manouba, deleg_benarous (select* from tab_gouv nom_deleg=''nom")
DC_ZI le 3eme est connecte avec tab_zone de ma  bd access (meme chose pour mes 11 zone)

sachan que je ne me connecte pas directement a acces , j utilise dataenvironement

en metton votre code le champs de a zone industriel reste toujour vide et cela n afiche aucune erreur de compilation
Messages postés
29
Date d'inscription
jeudi 10 avril 2008
Statut
Membre
Dernière intervention
25 mai 2008

bonjour


merci  pour votre


bon voila j ai essaye votre code , il m a affiche un message d erreur  " utilisation incorecte de la propriete" 
 c est pas un probelem de droit d accée??
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
DC_ZI.RowMember=
"zone_" 

LCase
$(sBuffer)


tu aurais pu corriger seul quand même !
Messages postés
29
Date d'inscription
jeudi 10 avril 2008
Statut
Membre
Dernière intervention
25 mai 2008

dsl j ai pas vus qu il maque  =   , pourtant sa fait un bout de temps que je cherche se qui allez pas (manque de concentration )
merci beaucoup pour votre aide
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
çà arrive....

pense à valider la ou les réponses qui ont résolu ton problème (bouton "réponse acceptée!")
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
29
Date d'inscription
jeudi 10 avril 2008
Statut
Membre
Dernière intervention
25 mai 2008

si je remet se meme code  en effectuant quelque modification pour le combobox delegation ca doit marcher ?
Dim sBuffer As String
    If InStrB(1, DC_GOUV, "TUN ") Then
        sBuffer = Right$(DC_GOUV, Len(DC_ZI) - 3)
    Else
        sBuffer = Replace(DC_GOUV, " ", vbNullString)
    End If
    DC_ZI.Refresh
    DC_ZI.RowMember = "deleg_" & LCase$(sBuffer)
    DC_ZI.ListField = "nom_deleg"


End Sub

 
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
euh... si je modifie ce que j'ai actuellement à l'écran çà va marcher? tu peux m'aider?

que peut contenir DC_GOUV ?? que fais le code que je t'ai indiqué d'après toi? instr etc.... ?

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
29
Date d'inscription
jeudi 10 avril 2008
Statut
Membre
Dernière intervention
25 mai 2008

normalement ont a choi dans DC_GOUV  TUNIS, ARIANA, BEN AROUS ET MANOUBA
 If InStrB(1, DC_GOUV, "TUN") Then    sBuffer = Right$(DC_GOUV, Len(DC_ZI) - 3)
    InStrB renvoie la position de l'octet alosr InStrB (debut,notre chaine caractere, a quoi on la compare)  
   bon j ai pas compris a quoi sert sBuffer exactement , mais ya "Right$" ( renvoi les caractere a partir droite,nbr de caractere qui seron renvoyer)
Messages postés
29
Date d'inscription
jeudi 10 avril 2008
Statut
Membre
Dernière intervention
25 mai 2008

oui beaucoup plus claire
merci
Messages postés
29
Date d'inscription
jeudi 10 avril 2008
Statut
Membre
Dernière intervention
25 mai 2008

  

bonjour
Set Ct = New ADODB.Connection
    Ct.Provider = "Microsoft.Jet.Oledb.4.0"
    Ct.ConnectionString = App.Path & "\ZI.mdb"
    Ct.Open
    Set RcCombo = New ADODB.Recordset
      RcCombo.Open "SELECT NOM_GOUV FROM GOUVERNORAT ORDER BY NOM_GOUV", Ct, adOpenDynamic
    Combo1.Clear




     Do Until RcCombo.EOF
   Combo1.AddItem RcCombo!NOM_GOUV
   Combo2.AddItem RcCombo!NOM_DELEG
        RcCombo.MoveNext






      voila mon code tt marche comme il faut mais le probleme que ici je remplis un seul combobox alors j ai besoin d en renplir 2
 je veux ajouter une autre requette en plus de celle existante deja
j ai pense a ajoute une autre ligne au dessu RcCombo.open .... mais sa mmarche pas??
Messages postés
29
Date d'inscription
jeudi 10 avril 2008
Statut
Membre
Dernière intervention
25 mai 2008

MERCI
Messages postés
29
Date d'inscription
jeudi 10 avril 2008
Statut
Membre
Dernière intervention
25 mai 2008

bonjour  

Set Ct = New ADODB.Connection
    Ct.Provider = "Microsoft.Jet.Oledb.4.0"
    Ct.ConnectionString = App.Path & "\ZI.mdb"
    Ct.Open
     '___________________________________DELEGATION
    tmp = Combo4
    Select Case tmp
    Case "ARIANA"
    sql = "select NOM_DELEG from DELEGATION where CODE_GOUV=12"
    Case "TUNIS"
    sql = "select NOM_DELEG from DELEGATION where CODE_GOUV=11"
    Case "BEN AROUS"
    sql = "select NOM_DELEG from DELEGATION where CODE_GOUV=13"
    Case "MANOUBA"
    sql = "select NOM_DELEG from DELEGATION where CODE_GOUV=14"
    End Select
     '*****************************************
    Set RcCombo = New ADODB.Recordset
    RcCombo.Open sql, , Ct, adOpenDynamic
    Combo2.Clear
   
    Do Until RcCombo.EOF
        Combo2.AddItem RcCombo!NOM_DELEG
        RcCombo.MoveNext
    Loop
    RcCombo.Close
    '___________________________________GOUVERNORAT
    Set RcCombo = New ADODB.Recordset
    RcCombo.Open "SELECT NOM_GOUV FROM GOUVERNORAT ORDER BY NOM_GOUV", Ct, adOpenDynamic
    Combo4.Clear
   
    Do Until RcCombo.EOF
        Combo4.AddItem RcCombo!NOM_GOUV
        RcCombo.MoveNext
    Loop
    RcCombo.Close
   

voile mon code , bon avan de metre la boucle case tt marche comme sur des roulette
mais comme j avai besoin de filtre le contenu de mon conmbo j ai mit cette boucle
mais il me sort toujour le message ' type incompatible'