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

IHM Discussion :

Formulaire et attribution automatique d'un numéro dans un code [AC-2010]


Sujet :

IHM

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Formulaire et attribution automatique d'un numéro dans un code
    Bonjour à tous!

    Je débute dans access, j'ai lu pas mal de sites et documents généralistes, et je dois maintenant créer mon propre formulaire.
    Et là, je coince sur un souci qui va peut-être vous paraître tout bête

    L'objectif de mon formulaire est de créer des enregistrements de différents types de voitures dans une type qui comprend les champs suivants (pour ceux qui nous interessent)
    - IDCar: un code identifiant chaque enregistrement et qui me sert de clé primaire
    - Marque de la voiture: Audi, Renault, Skoda...
    (et d'autres champs ici inutiles)
    Mon code IDCar correspond au code de la marque sur 3 lettres (Etc: AUD, REN, SKO) et un numéro (1, 2, 3...) selon l'ordre d'enregistrement. Ex: AUD1 correspond à la première Audi entrée dans la base de donnée.

    Donc, dans mon formulaire, j'ai créé une première liste déroulante avec la marque de la voiture, qui fait apparaître la marque en toute lettre (chaque marque étant associée dans la liste à son code). En dessous, j'ai mis un champ dans lequel j'ai pu obtenir le code de la marque (avec =[Modifiable33], cf la liste déroulante)

    Mais maintenant, je voudrais qu'Access accole automatiquement un numero à la suite du code, qui n'existe pas encore et qui, tant qu'à faire, suit l'ordre logique des enregistrements.
    En d'autres termes, si je veux entrer une quatrième Audi (Donc AUD1, AUD2, AUD3 existent déjà), je voudrais sélectionner la marque et qu'automatiquement, Access m'écrivent "AUD4" dans IDCar (et non AUD123 si j'ai déjà 122 véhicules enregistrés).

    Voilà. Ça fait pas mal de temps que je bloque, et j'ai cherché vainement sur le forum (mais sans doute sans connaitre les bons mots-clés, je n'ai rien trouvé).
    Si vous auriez une solution à me proposer, je vous en serai très reconnaissant

    Petit PS: Je n'ai encore jamais touché à VBA, si la solution viendrait à passer par là

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    Un des moyens de faire (pas la seule et avec VBA) est dans la base proposée en pièce jointe.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Je regarde ça immédiatement! Merci beaucoup Madefemere!

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Rebonjour!

    Merci beaucoup! C'est super, ce que vous avez codé!
    J'aurais juste une dernière courte question. J'essaye de bien saisir ce qui se passe, je bute juste sur un truc.
    Dans le code VBA du bouton:
    Private Sub btnvalider_Click()
    Dim nummax As Integer
    nummax = Nz(DMax("Right([IdVehicule],Len([IdVehicule])-3)", "[T_Arrivee]", "[IdMarque_FK]=" & Me.CboMarque.Column(0)), 0)
    Debug.Print nummax
    Me.IdVehicule = Left(Me.CboMarque.Column(1), 3) & Format(nummax + 1, "000")
    End Sub
    A quoi correspond le "Me.CboMarque.Column(X)". Je ne vois aucun champ portant ce nom là, et quand j'essaye de réécrire le code pour un travail similaire, Access bloque dessus et ouvre le déboggueur.
    Merci encore!

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    CboMarque est le nom de la zone de liste déroulante Marque.
    Column(X) est une de ses propriétés qui permet de faire référence à l'une de ses colonnes. Attention, la numérotation commence à 0.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour (de nouveau!)

    C'est vraiment génial! J'ai réussi à répliquer entièrement l'exemple avec ma propre base de donnée, et ça fonctionne!

    J'ai essayé de m'émanciper un peu, mais ce n'est pas encore très probant. En fait, en prenant l'ensemble de mes infos, j'ai réalisé que les ID des marques n'étaient les 3 premieres lettres mais bien un code à 3 lettres, sans doute à cause des problèmes de doublons (ex: Ford, c'est Ford, mais Ford Mustang, c'est FMU; Volvo, c'est VOL, VolsWagen, c'est VOW). Du coup, ça fonctionne moins bien, et j'ai essayé de m'en dépatouiller seul.

    Dans la table T_Voiture, j'ai crée le champ CodeVoit (texte sans doublons), et j'ai intégré les codes devant le nom des marques correspondantes.
    Dans IDMarque_FK de la table T_Arrivée, j'ai repris ma liste déroulante à deux colonnes (réalisé avec l'assistant: choix à partir de la table T_Voiture, les 2 colonnes CodeVoit et NomVoiture, enregistrement de CodeVoit, cad le code en 3 lettres et "mémoriser pour un usage ulterieur")
    J'ai modifié le formulaire pour que la liste déroulante soit basée sur les code voiture avec en contenu "SELECT [T_Voiture].[CodeVoit], [T_Voiture].[NomVoiture] FROM [T_Voiture]; "

    Juste que là, tout marche!! Je peux selectionner dans la liste déroulante la marque de la voiture, et c'est son code qui apparait (*Joie, Bonheur, Félicité)

    Le bouton valider, maintenant.
    Onglet "évenement", Sur clic (ouverture de VBA), pour remplacer IdMarque_FK par son remplaçant CodeVoit, et le remplaçant de CboMarque appelé CboCode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub btnvalider_Click()
    Dim nummax As Integer
    nummax = Nz(DMax("Right([IdVehicule],Len([IdVehicule])-3)", "[T_Arrivee]", "[CodeVoit]=" & Me.CboCode.Column(0)), 0)
    Debug.Print nummax
    Me.IdVehicule = Left(Me.CboCode.Column(1), 3) & Format(nummax + 1, "0000")
    End Sub
    Et là, ça lui plait pas du tout (*Enfer, Banqueroute, Damnation )
    En cliquant sur le bouton, il me dit:
    "Erreur d'exécution '2471' : L'expression entrée comme parametre de requete est à l'origine de l'erreur suivante: "PEU"
    (PEU pour peugeot, mais c'est pareil pour toutes les marques)
    Et il surligne l'expression de nummax. Message reçu, il n'aime pas ma modification.

    Donc voilà, je me dis que je touche presque au but, mais je ne vois pas comment modifier le code pour que ça lui convienne.
    Merci d'avance pour le coup de main. J'imagine qu'après ça, ça devrait fonctionner et je pourrai revenir à des choses plus simples

    Piece jointe: BDD de travail
    CodeVoit.zip

  7. #7
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Trantsyx2 bonjour,

    A la lecture, je suppose que Me.CboCode.Column(0) est de type texte, tu dois donc protégé ta valeur par des simple ou double quotes, regarde la correction ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nummax = Nz(DMax("Right([IdVehicule],Len([IdVehicule])-3)", "[T_Arrivee]", "[CodeVoit]='" & Me.CboCode.Column(0) & "'"), 0)
    JimBolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Et en écrivant
    Me.IdVehicule = Left(Me.CboCode.Column(0), 3) & Format(nummax + 1, "0000"),
    ça me donne exactement ce que je souhaite.

    Problème résolu!!! Merci à vous deux!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/07/2010, 15h18
  2. Réponses: 2
    Dernier message: 07/06/2007, 14h22
  3. Réponses: 6
    Dernier message: 30/04/2007, 23h36
  4. Réponses: 9
    Dernier message: 08/04/2007, 22h11
  5. Réponses: 2
    Dernier message: 03/05/2006, 08h33

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