AIDE MOI A OPTIMISE LE CODE

Résolu
cs_ANOUCHKA8686 Messages postés 29 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 25 mai 2008 - 4 mai 2008 à 10:58
cs_ANOUCHKA8686 Messages postés 29 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 25 mai 2008 - 13 mai 2008 à 22:21
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

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
5 mai 2008 à 13:55
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
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 mai 2008 à 17:34
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
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 mai 2008 à 13:04
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
3
Le grand Zorro Messages postés 50 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 12 mai 2008
4 mai 2008 à 11:52
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 mai 2008 à 11:52
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
0
cs_ANOUCHKA8686 Messages postés 29 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 25 mai 2008
4 mai 2008 à 12:29
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
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 mai 2008 à 13:18
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
0
cs_ANOUCHKA8686 Messages postés 29 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 25 mai 2008
4 mai 2008 à 13:44
le probeme que cela remple mon combobox1 mais cela enpeche le fonctionelment du deuxieme , malgre que tt s execute sans prob
0
cs_ANOUCHKA8686 Messages postés 29 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 25 mai 2008
4 mai 2008 à 13:54
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
0
cs_ANOUCHKA8686 Messages postés 29 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 25 mai 2008
10 mai 2008 à 13:19
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??
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 mai 2008 à 13:37
DC_ZI.RowMember=
"zone_" 

LCase
$(sBuffer)


tu aurais pu corriger seul quand même !
0
cs_ANOUCHKA8686 Messages postés 29 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 25 mai 2008
10 mai 2008 à 15:38
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 mai 2008 à 15:58
çà 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
0
cs_ANOUCHKA8686 Messages postés 29 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 25 mai 2008
10 mai 2008 à 16:03
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

 
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 mai 2008 à 16:26
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
0
cs_ANOUCHKA8686 Messages postés 29 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 25 mai 2008
10 mai 2008 à 17:09
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)
0
cs_ANOUCHKA8686 Messages postés 29 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 25 mai 2008
10 mai 2008 à 17:43
oui beaucoup plus claire
merci
0
cs_ANOUCHKA8686 Messages postés 29 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 25 mai 2008
11 mai 2008 à 12:43
  

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??
0
cs_ANOUCHKA8686 Messages postés 29 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 25 mai 2008
11 mai 2008 à 13:33
MERCI
0
cs_ANOUCHKA8686 Messages postés 29 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 25 mai 2008
13 mai 2008 à 19:31
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'
0
Rejoignez-nous