Access, mise à jour champ en fct liste déroul [Résolu/Fermé]

Signaler
Messages postés
23
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011
-
Messages postés
23
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011
-
Bonjour à tous et toutes,

Alors j'ai un soucis sur ma base access 2003, dans une table j'ai (pour résumé sur ce que j'ai besoin ici) une colonne référence et une colonne code, (certaines références différentes peuvent avoir le même code) j'aimerai, que lorsque je choisisse dans une liste déroulante une référence, sa m'affiche dans un champ les références qui ont le même code.

J'ai cherché sur google mais rien qui m'aide, je débute sous access et je galère un peu pour faire cette manip, donc si quelqu'un pouvait me filer un coup de main ça serait au poil.

(Actuellement j'ai dans mon formulaire uniquement la liste déroulante qui a l'air de fonctionner, je peux sélectionner ma référence, et une zone de texte, donc vide ...)

En vous remerciant d'avance

Maxime

26 réponses

Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
Salut à toi, voila ce que je te conseille:

Créé une requête dans laquelle tu affiches toute ta table, avec sur ton champ référence, le critère:
=Formulaires![nom_du_formulaire]![nom_de_la_liste_déroulante]
Ensuite sur le formulaire, tu insère un sous formulaire, dans lequel tu choisiras d'afficher ta requête.
Tu auras alors sous formes de tableau tous les résultats dont la référence est égale à celle choisie dans la liste.

Cordialement.
Messages postés
23
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011

Merci de ta réponse mais c'est pas tout à fait ça que je veux, en fait je rentre une référence dans ma liste déroulante, celle-ci est associée à un code (que je ne connais pas et qu'on ne voit pas spécialement sur la liste déroulante), et j'aimerais que dans une zone texte sa m'affiche les références qui possèdent le même code que la référence que j'ai entré dans ma liste. =/
Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
Ah ok je vois, tu t'y connais un peu en VBA ou n'importe quel langage de programmation? Je pense qu'on en aura besoin pour faire ça (en tout cas c'est ce que je ferais)
Messages postés
23
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011

ah pas vraiment non, je connais un peu la programmation mais c'est au niveau de logiciels d'automatisme, avec principalement des fonctions SI , mais autrement =s
Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
Et bien en gros, c'est ça.
Je vais te donner ce dont tu as besoin et pose des questions si tu veux :).
Si tu n'as pas tellement le temps, je pourrais te donner le code entier (mais je pars bientot, donc je te donne des pistes pour que tu puisses commencer ça).

Voici un cours sur le VB.NET.
Survole la 1ère partie, pour savoir utiliser les dim, if, while et les fonctions.

Ensuite, sur ton formulaire: sur ta liste déroulante, dans l'évènement "après MAJ", tu devras inserer un code VBA qui:
- Récupère la valeur de ta liste déroulante;
- Parcourt ta table;
- Récupère le code correspondant à ta référence;

- Repart au début de ta table;
- La reparcourt, et rajoute chaque référence trouvée dans ta zone de texte.

Un peu d'aide:
En vba, pour ouvrir une table, le type de variable sera DAO.Recordset2.
Il faudra ensuite rajouter une ligne:
Set ma_variable = CurrentDb.OpenRecordset("nomDeLaTable")


Puis, pour la parcourir:
ma_variable.Movefirst pour se placer au début.
ma_variable.Movenext pour se déplacer.

Pour connaitre la valeur d'un champ:
sur la table, tout simplement:
ma_variable.[nom du champ]
sur ton formulaire
maListeDéroulante.Value
monChampTexte.Value


Voila j'ai mis tout ce que je pouvais, c'est vraiment parce que je pars dans 1 minute, si tu n'y arrives pas dis le moi et je pourrai te poster un bout de code un peu plus tard (je comprend que ça soit difficilement faisable si tu n'en as jamais fait, mais tu verras avec quelques test, ça vient vite:) ! ).
Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
Bon, je suis resté 5 petites minutes de plus pour te faire ça :)

Private Sub listeChoix_AfterUpdate() 

    Dim table As DAO.Recordset2 
    Dim code As Integer 
    Dim found As Boolean 
     
    Set table = CurrentDb.OpenRecordset("maTable") 
     
    Me.zoneTexte = "" 
    found = False 
    table.MoveFirst 
    While table.EOF = False And found = False 
        If table.[Reference] = Me.listeChoix.Value Then 
            code = table.[code] 
            found = True 
        End If 
        table.MoveNext 
    Wend 
    table.MoveFirst 
    While table.EOF = False 
        If table.[code] = code Then 
            Me.zoneTexte = Me.zoneTexte & " " & table.[Reference] 
        End If 
        table.MoveNext 
    Wend 

End Sub


J'ai pas fait de table test pour essayer, si ça ne fonctionne pas préviens moi et j'aviserai :) .
J'ai mis en gras toutes les valeurs que tu devras adapter à ta base: nom de table, nom du champ texte et nom de la liste.
Pour les connaisseurs: désolé pour le boolean tout sale, pas le temps de chercher l'équivalent d'un break en VBA :D.
Messages postés
23
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011

Salut,

désolé, j'ai uniquement internet au boulot, et c'est pour une base access du boulot, donc j'ai pas pu te répondre plus tôt, je vais essayer de trouver ou rentrer cette magnifique ligne de code ^^

Bonne journée
Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
Salut,

c'est dans ton formulaire, tu selectionnes ta liste déroulante, et sur la feuille des propriétés trouves l'évènement: après mise à jour (ou after update).
Messages postés
23
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011

En tous cas merci de tes réponses rapides !

Mais ma zone texte reste désespérement vide, j'ai un doute sur quelque chose :

While table.EOF = False And found = False
If table.[Reference] = Me.listeChoix.Value Then
code = table.[code]
found = True
End If
table.MoveNext
Wend

If table.[reference]

reference c'est une colonne de ma table, et non une table à part entière, je sais pas si je dois changer table par colonne ?
Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
Non, table fait bien correspondà ta table, mais table.[reference] correspond à la valeur du champ "reference" dans la table.
Par contre ça reste vide.. aucun message d'erreur? essaie avec une ligne:
me.Requery
a la fin.
J'ai pas fais de test, mais si ça ne marche toujours pas je m'y mettrai.
Es tu sur que tu as bien modifié les mots en gras par tes valeurs?
As tu bien choisi une référence dont le code est commun à plusieurs références pour tester?
Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
Hmmm j'ai testé chez moi, et aucun problème tout fonctionne.
Voila ma petite table de test:
http://www.cijoint.fr/cjlink.php?file=cj201010/cijOsGte8i.jpg

Maintenant mon formulaire:
http://www.cijoint.fr/cjlink.php?file=cj201010/cijYVZ92pL.jpg

Je sais, c'est moche:)

Et enfin mon code complet:
Private Sub listeChoix_AfterUpdate()

    Dim table As DAO.Recordset2
    Dim code As Integer
    Dim found As Boolean
    
    Set table = CurrentDb.OpenRecordset("Table1")
    
    Me.zoneTexte = ""
    found = False
    table.MoveFirst
    While table.EOF = False And found = False
        If table.[Reference] = Me.listeChoix.Value Then
            code = table.[code]
            found = True
        End If
        table.MoveNext
    Wend
    table.MoveFirst
    While table.EOF = False
        If table.[code] = code Then
            Me.zoneTexte = Me.zoneTexte & " " & table.[Reference]
        End If
        table.MoveNext
    Wend

End Sub


Quand je selectionne une référence, toutes les références qui ont le même code que celle séléctionnée s'affichent dans la zone de texte
Salut chef !

Je te remercie pour tes réponses ! Malheureusement j'ai oublié de copier la base du boulot sur ma clef USB, sinon j'aurai essayé sa se week-end, sa aurait été plus simple avec internet à disposition =/ Me**e !

Je fais sa lundi à la première heure, je te tiendrai au courant des évolutions, mais si tu as réussi a le faire fonctionner, impeccable !

je revérifierai si j'ai changé toutes les valeurs en gras que tu as mis =]

En tous cas merci encore Gaunts ! au top !
Salut !

me voila de retour au boulot, alors ça marche toujours pas x] , ce que tu as mis en gras je dois bien le remplacer par le nom de mes tables, liste déroulante .... ?
Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
Salut!

Oui exactement, copie/colle moi tout le code ici, avec les balises < code> < /code> du site.
Private Sub listeChoix_AfterUpdate() 

    Dim table As DAO.Recordset2 
    Dim code As Integer 
    Dim found As Boolean 
     
    Set table = CurrentDb.OpenRecordset("0050_T_Stock") 
     
    Me.Broches_équivalentes = "" 
    found = False 
    table.MoveFirst 
    While table.EOF = False And found = False 
        If table.[Reference] = Me.Ref_broche.Value Then 
            code = table.[code] 
            found = True 
        End If 
        table.MoveNext 
    Wend 
    table.MoveFirst 
    While table.EOF = False 
        If table.[code] = code Then 
            Me.Broches_équivalentes = Me.Broches_équivalentes & " " & table.[Reference] 
        End If 
        table.MoveNext 
    Wend 

End Sub


Voila ce que ça donne avec mes noms de listes déroulantes/zone texte, après je sais pas, aussi bien je me suis planté en créant la liste déroulante ou la zone texte ? (j'ai associé la liste déroulante aux referencesde ma table afin que je puisse sélectionner une réf)
Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
Re,

Dans ton formulaire, selectionne ta liste déroulante.
Ensuite dans les propiétés, trouve l'évenement "après maj" et entre le code ici:
le problème vient de là je pense
Private Sub listeChoix_AfterUpdate()
Le nom de ta liste n'est pas listeChoix. Il faut bien passer par le formulaire pour acceder à la page de code.
Sinon, le nom de tes champs sont bien "Reference" et "code" dans ta table?
Messages postés
23
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011

Me revoilou,

alors, oui je rentre bien le code a partir de ma liste déroulante dans mon formulaire, dans l'évènement "Après MAJ".
Lorsque je change "listechoix" dans la première ligne Private Sub listeChoix_AfterUpdate() il me dit : "Erreur de compilation :Type défini par l'utilisateur non défini" :/ et il me surligne en jaune la première ligne.

Ralala, pas facile dis donc.

Et pour info, en mode création, je lis sur ma zone detexte et ma liste déroulante "indépendant" je sais pas si sa peut jouer ...
Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
Re, non 'indépendant" est normal :).
Bon au moins si il y a une erreur, c'est que le code s'exécute maintenant.
retire la ligne "Dim table As DAO.Recordset2" et essaie pour voir.
Je ne comprend pas pourquoi ça marche chez moi et pas chez toi
Messages postés
23
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011

Alors, j'ai retiré la ligne "Dim table As DAO.Recordset2" et nouveau message d'erreur : Erreur d'éxecution '13' : incompatibilité de type ???

et il me surligne la ligne : " Code = table.[Code] "

If you can help me again ... ^^
Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
ok, alors.
Ouvre ta table "0050_T_Stock" en mode création.
Quel est le type du champ Code?
Si c'est du texte, remplace
Dim code As Integer
par:
Dim code As String
Messages postés
23
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011

YEEEhhhh !!!

Very good job !

ça marche =D

me reste plus qu'a mettre en forme tout ça et ça sera au top !

Alors gaunts, au top du top ! réponses rapides, précises, claires, vraiment merci beaucoup ! j'y était dessus depuis 2-3 jours a essayer de magouiller avec les macros, requêtes et compagnie x] , j'aurai jamais pu pondre sa tout seul, j'ai ajouté ton site VB.net dans mes favoris, va falloir que je m'y mette ^^

Merci encore !

Bonne fin de journée
Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
Derien^^ tu peux mettre en résolu? Tu sauras faire une présentation plus "propre" pour ton champ texte?
Parce que là je rajoute un espace a chaque nouvelle valeur, c'est pas super :p
Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
Et attention avec le cours VB.Net: .NET est différent de VBA, seulement ce cours est très bien expliqué, et tu y retrouves les notions de conditions, boucles et fonctions qui s'utilisent de la même façon dans les deux langages.
Messages postés
23
Date d'inscription
dimanche 31 mai 2009
Statut
Membre
Dernière intervention
16 octobre 2011

Yep, je met ça en résolu.

pour la présentation, euuuh, il faut jouer dans les lignes de code pour ajouter une ligne plutôt qu'un espace ? ^^ je pensais que c'était dans le format de la zone de texte

A ok, bah je commencerais par ça pour avoir quelque bases puis je basculerais vers le VBA alors ^^
Messages postés
1143
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 mars 2012
113
Pour la présentation, essaie ça:
    Dim code As String  
    Dim found As Boolean  
      
    Set table = CurrentDb.OpenRecordset("0050_T_Stock")  
      
    Me.Broches_équivalentes = Me.Ref_broche.Value 
    found = False  
    table.MoveFirst  
    While table.EOF = False And found = False  
        If table.[Reference] = Me.Ref_broche.Value Then  
            code = table.[code]  
            found = True  
        End If  
        table.MoveNext  
    Wend  
    table.MoveFirst  
    While table.EOF = False  
        If table.[code] = code AND table.[Reference] <> Me.Ref_broche.Value Then  
            Me.Broches_équivalentes = Me.Broches_équivalentes & vbcrlf & table.[Reference]  
        End If  
        table.MoveNext  
    Wend  


---------------------------------------------------------------------------------------------

Si tu ne veux pas afficher la référence selectionnée dans ta liste, essaie ça:

    Dim code As String 
    Dim found As Boolean 
      
    Set table = CurrentDb.OpenRecordset("0050_T_Stock") 
      
    Me.Broches_équivalentes = "" 
    found = False 
    table.MoveFirst 
    While table.EOF = False And found = False 
        If table.[Reference] = Me.Ref_broche.Value Then 
            code = table.[code] 
            found = True 
        End If 
        table.MoveNext 
    Wend 
    table.MoveFirst 
    While table.EOF = False 
        If table.[code] = code And table.[Reference] <> Me.Ref_broche.Value Then 
            If Me.Broches_équivalentes = "" Then 
                Me.Broches_équivalentes = table.[Reference] 
            Else 
                Me.Broches_équivalentes = Me.Broches_équivalentes & vbCrLf & table.[Reference] 
            End If 
        End If 
        table.MoveNext 
    Wend