IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Remplir automatiquement un champ sous condition.


Sujet :

Access

  1. #1
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut Remplir automatiquement un champ sous condition.


    J'aurais une petite question au sujet d'une facilité de saisie.
    Voila j'ai un formulaire présenté de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Id_Casier        Id_Cycle       Id_Variete      Etat           Surface 
    101                 2006_2            2             Semé                  10
    201                 2006_2            2             Semé                  11 
    202                 2006_2            0            Jachère                 0
    désolé pour la présentation, les espaces ne sont pas conservés je vous ai mis des couleurs pour mieux comprendre

    donc je saisie l'identifiant du casier, du cycle et de la variété.
    Ensuite je voudrais que les 2 derniers champs (l'état et la surface) se remplissent de manière automatique.
    Pour l'état du casier, c'est bon j'utilise le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Etat_Casier_GotFocus()
        If Variete > "Aucune" Then
            Me.Etat_Casier = "Semé"
     
        Else
            Me.Etat_Casier = "Jachère"
        End If
    End Sub
    Par contre, je ne sais pas du tout comment faire pour remplir le dernier champ, surface semée.
    A savoir que lorsque l'Id_Variété = 0 (çàd "Aucune") la surface doit être égale à 0 (cette valeur n'est contenue dans aucun champs) et que lorsque l'Id_Variete est égale à tout sauf 0 alors la surface semée doit prendre la valeur contenue dans un champs (Ha_Net contenu dans une table Casier qui est propre à chaque casier)

    Voilà j'espère avoir était assez claire, sinon n'hésiter pas à me demander des précisions.
    Merci d'avance pour vos réponses.

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    un petit truc qui me choque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If Variete > "Aucune" Then
    ça veut dire quoi supérieur à une chaine de caractères ?
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  3. #3
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut euhhhh.....
    Bonjour,

    A vrai dire cela fonctionne bien mais c'est vrai que c'est pas très logique
    En fait je ne maîtrise pas très bien l'écriture de code et je m'insipire pas mal de tout ce que je trouve sur le site que j'arrange un peu à ma sauce...
    En fait je voudrais que si Variete est différente de "Aucune" alors l'état du casier doit être "Semé".

    J'ai corrigé mon code par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Variete <> "Aucune" Then
    cela fonctionne également mais est-ce la bonne écriture ?

    Par contre ma question tient toujours donc si quelqu'un avait une idée..
    Merci

  4. #4
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Citation Envoyé par popoliline
    Bonjour,

    A vrai dire cela fonctionne bien mais c'est vrai que c'est pas très logique
    En fait je ne maîtrise pas très bien l'écriture de code et je m'insipire pas mal de tout ce que je trouve sur le site que j'arrange un peu à ma sauce...
    En fait je voudrais que si Variete est différente de "Aucune" alors l'état du casier doit être "Semé".

    J'ai corrigé mon code par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Variete <> "Aucune" Then
    cela fonctionne également mais est-ce la bonne écriture ?

    Par contre ma question tient toujours donc si quelqu'un avait une idée..
    Merci
    Bonjour,

    Oui, c'est la bonne écriture. ET par ailleurs je ne comprends pas ce qu'il te reste à faire. Tu voulais que si Variete est différente de null et bien un champ prenne la valeur que tu voulais! C'est bien ça? Et ça ne marche pas ce que tu as fait?

  5. #5
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut
    salut milia,

    Merci pour ta confirmation.
    A vrai dire, une partie de mon problème est résolu (mon champs "état" prend bien la bonne valeur en fonction de l'Id_Variete)
    Par contre il me reste un point à résoudre:

    si mon Id_Variete <> 0 alors mon champs "Ha_Seme_Casier" doit prendre la valeur contenue dans une table "Casier" dans un champs "Ha_Net"
    donc mon problème est que je ne sais pas comment faire référence à ce champs contenu dans la table.

    mon code devait avoir cette tête mais le problème c'est le ???:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Etat_Casier_GotFocus()
        If Variete <> "Aucune" Then
            Me.Etat_Casier = "Semé"
            Me.Ha_Seme_Casier = ????
     
        Else
            Me.Etat_Casier = "Jachère"
            Me.Ha_Seme_Casier = "0"
        End If
    End Sub
    donc voilà....si quelqu'un aurait une idée

  6. #6
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Si j'ai bien compris tu veux que ton champ "Me.Ha_Seme_Casier" soit égal au résultat d'une requête non?

  7. #7
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut
    Désolé,
    mais je pensais que mon problème était clair,
    je vois pas trop vraiment comment le redéfinir.
    En gros je voudrais que:
    si mon Id_Variete = 0 alors "Surface semée" = 0
    si mon Id_Variete > 0 alors "Surface semée" = Ha_Net (de ma table "13_Casier")

    j'ai essayé ceci mais cela ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Etat_Casier_GotFocus()
        If Variete <> "Aucune" Then
            Me.Etat_Casier = "Semé"
            Me.Ha_Seme_Casier = "13_Casier.Ha_Net_Casier"
     
        Else
            Me.Etat_Casier = "Jachère"
            Me.Ha_Seme_Casier = "0"
        End If
    End Sub
    il me manque la syntaxe pour faire le line avec le champs de ma table.

    je n'avais pas pensé passer par une requête mais si tu as la solution, pourquoi pas.
    merci

  8. #8
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    si mon Id_Variete > 0 alors "Surface semée" = Ha_Net (de ma table "13_Casier")
    déjà si tu veux àa c'est pas ce que tu as fait et puis ton 13_Casier.Ha_Net_Casier n'a pas qu'une seule valeur je suppose, c'est pour cela qu'il faut faire une requête.

    req = "SELECT Ha_Net_Casier FROM 13_Casier WHERE ???"

    mais sinon je vois pas trop comment tu veux récupérer la valeur d'une table sans requête!

  9. #9
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut
    oui je te confirme que le champs ne dispose pas d'une seule valeur et c'est là mon problème
    je ne sais pas du tout comment faire pour la syntaxe à utiliser.
    donc si j'utilise une requête, comment fait-on pour y faire référence dans mon code ?

    le SQL de ma requête serait le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT [13_Casier].Id_Casier, [13_Casier].Ha_Net_Casier
    FROM 13_Casier;
    Merci

  10. #10
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim rsStat As New ADODB.Recordset
    Dim strSQL as string
    
    strSQL = "..."  //Ta requête
    rsStat.Open reqSQL, connec, adOpenDynamic, adLockOptimistic
    
    (ou rsStat.Open strSQL, CurrentProject.Connection)
    Par contre je pense que ta requête ne va pas aller, car si tu selectionne deux champ alors tu veux qu'il soit égal à un seul et puis vu que là tu vas avoir plusieurs valeurs il faut faire une boucle!
    Mais là je suis un peu perdu car je suis pas sur que c'est vraiment ça veut que je ne compris pas tout à ton projet.

    Bon courage

  11. #11
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut
    bonjour Milia

    et pour ton aide
    par contre, il est vrai que là je suis perdu, je ne sais pas du tout quoi utiliser comme syntaxe et en ce qui concerne les boucles, c'est pire...

    j'ai quand même essayé de bidouiller un peu le code que tu m'a donné.
    Voici ce que j'utilise, par contre, j'ai un message d'erreur de type 3001 (les arguments sont de types incorrect en dehors des limites autorisées ou en conflit avec les autres)(en rouge dans le code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Ha_Seme_Casier_GotFocus()
    Dim rsStat As New ADODB.Recordset
    Dim strSQL As String
    
    strSQL = ("SELECT [13_Casier].Id_Casier, [13_Casier].Ha_Net_Casier " & _
    "FROM 13_Casier;")
    rsStat.Open reqSQL, connec, adOpenDynamic, adLockOptimistic
    End Sub
    donc si quelqu'un sait comment faire je l'en remercie d'avance...
    car là je suis vraiment perdu et j'aimerai bien pourvoir résoudre ce problème pour faciliter la saisie, car j'aurai au moins 400 surfaces semées à rentrer chaque année donc si cela pouvait être automatique, ce serait super...

    meric beaucoup par avance

  12. #12
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Regarde cette discussion peut être que ça t'aidera:

    http://www.developpez.net/forums/sho...d.php?t=209561

  13. #13
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Salut,
    Est-ce que Ha_Net correspond à la valeur contenue dans le premier enregistrement rencontré dans la table ou à un enregistrement spécifique (donc à un critère spécifique).
    Dans le premier comme dans l'autre, un DLookUp suffit. pur pouvoir t'aider un peu, je voudrais avoir confirmation...

    Donc, si mon Id_Variete > 0 alors "Surface semée" = Ha_Net (de ma table "13_Casier" ... de n'importe quel enregistrement (qui serait insensé!) ou d'un enregistrement particulier (qui est plus logique!)?)

    Citation Envoyé par popoliline
    Désolé,
    mais je pensais que mon problème était clair,
    je vois pas trop vraiment comment le redéfinir.
    En gros je voudrais que:
    si mon Id_Variete = 0 alors "Surface semée" = 0
    si mon Id_Variete > 0 alors "Surface semée" = Ha_Net (de ma table "13_Casier")

    j'ai essayé ceci mais cela ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Etat_Casier_GotFocus()
        If Variete <> "Aucune" Then
            Me.Etat_Casier = "Semé"
            Me.Ha_Seme_Casier = "13_Casier.Ha_Net_Casier"
     
        Else
            Me.Etat_Casier = "Jachère"
            Me.Ha_Seme_Casier = "0"
        End If
    End Sub
    il me manque la syntaxe pour faire le line avec le champs de ma table.

    je n'avais pas pensé passer par une requête mais si tu as la solution, pourquoi pas.
    merci
    La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
    Albert Einstein

  14. #14
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut
    Mahefasoa,

    alors je te donne quelques précisions:
    je dispose d'une table "Casier" sur le quel j'ai les champs
    Id_Casier (clè primaire)
    Ha_Net (numérique)

    et une table "Casier_Cycle" remplie à l'aide du form qui associe au casier, une variéte et une surface semée

    donc je souhaiterai que lorsque mon Id_Variete <> 0
    alors "Surface semée" (champs contenu dans ma table "Casier_Cycle") = Ha_Net (de ma table "Casier" qui correspond alors au casier sur lequel je rentre l'information)

    un exemple
    Table Casier
    Id_Casier Ha_net
    101 5
    102 4
    201 6

    Table Casier_Cycle (remplie à l'aide du form)
    Id_Casier Id_Variete Ha_Semé
    101 0 0(car Id_Variete = 0)
    102 1 4
    201 3 6

    (désolé je n'arrive toujours pas à laisser les espaces entre les colonnes, d'où les couleurs)

    donc lorsque l'Id_Variete est différent de 0 alors il faudrait que le champs Ha_semé aille chercher l'information dans ma table Casier (l'enregistrement est alors associé, relié au champ Id_Casier)
    si tu avais une petite idée du comment du pourquoi ...merci beaucoup
    Pauline

  15. #15
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Salut,

    Excuses pour la réponse tardive. Mon PC est tombé en panne!
    Bon, tu peux bien entendu utiliser la fonction DLookUp comme ceci: (je reprend une partie de ton code dans plusieurs posts précédents)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Etat_Casier_GotFocus()
        If Variete <> "Aucune" Then
            Me.Etat_Casier = "Semé"
            Me.Ha_Seme_Casier = nz(DLookUp("[Ha_net]","Casier","[Id_Casier]=" & Me.NomDuContrôleContenantID_CasierDansTonFormulaire),0)
     
        Else
            Me.Etat_Casier = "Jachère"
            Me.Ha_Seme_Casier = "0"
        End If
    End Sub
    Explication du code en rouge: Si DLookUp renvoie Null; alors il met zéro (0). Sinon, DLookUp affichera la valeur du champ Ha_net de la table Casier dont le champ Id_casier correspond au contenu du contrôle du formulaire en cours contenant id_casier.

    Cela devrait suffire!
    Bon courage et @+
    La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
    Albert Einstein

  16. #16
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut il n'y a pas de mal..
    Mahefasoa,

    Un grand très grand une fois de plus
    je ne saurai comment te remercier, je commencais un peu à désespérer aprés de longues et maintes recherches et à me dire que je me passerai de ce petit champs de rien du tout mais qui me facilitait quand même la vie.

    merci beaucoup
    ton code marche nickel, quelle joie de se voir remplir automatiquement ces 250 champs

    PS:j'espère que cela a pu s'arranger avec ton PC ?
    @+
    Pauline

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 29/10/2013, 12h10
  2. [PHP-JS] accessibilité d'un champ sous condition
    Par maraly dans le forum Langage
    Réponses: 1
    Dernier message: 08/08/2006, 16h31
  3. Remplir automatiquement un champ dans une table
    Par en_stage dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 03/08/2006, 20h57
  4. Somme de champs sous condition
    Par Nicola dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 01/08/2006, 14h47
  5. Afficher un champ sous condition
    Par Cantalou dans le forum Access
    Réponses: 24
    Dernier message: 01/02/2006, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo