Tout à fait sur .
Je t'envoie le fichier, c'est sur "livraison gazole" en double cliquant sur une date en rouge tu a le formulaire de modifications, et si tu ferme sans rien faire, cela ajoutes une ligne à la table
Tout à fait sur .
Je t'envoie le fichier, c'est sur "livraison gazole" en double cliquant sur une date en rouge tu a le formulaire de modifications, et si tu ferme sans rien faire, cela ajoutes une ligne à la table
Regarde les tests que tu effectues au moins
tu fais exactement le contraire de ce que tu souhaites
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 If Me.zdtNom = "" And Me.zdtTICPrenom = "" And Me.zdtImmat = "" Then strSQL = "SELECT * FROM TbVehicules" RS.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic RS.AddNew 'et oui on ajoute RS.Fields("Nom") = Me.zdtNom RS.Fields("TICPrenom") = Me.zdtTICPrenom RS.Fields("Tel") = Me.zdtTel RS.Fields("Immat") = Me.zdtImmat RS.Update RS.Close Else If MsgBox("Vous n'avez pas ajouté de nouveau véhicule, voulez vous quittez cette fenêtre sans enregistrer ?", vbYesNo) = vbYes Then DoCmd.Close acForm, Me.Name End If End If
soit tu changes le test, soit tu intervertis le code
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
Pardon ?
Je comprends pas c'est pas :"Si les Me.zdt sont vides alors exécute le code sinon ..."
Code : Sélectionner tout - Visualiser dans une fenêtre à part If Me.zdtNom = "" And Me.zdtTICPrenom = "" And Me.zdtImmat = ""
Et là tu me parles du formulaire pour ajouter, ors je n'ai pas de problème avec, ça m'affiche les msg si je cliques sur ajouter sans rien ajouter si je cliques non ça reste sur le formulaire sinon ça quitte sans pour autant ajouter de ligne vierge.
C'est dans la modification que cela m'ajoutes une ligne vierge qd je quittes, en double cliquant sur une date en rouge dans le sous formulaire "FmEntreeGenerale" Nommé par le label "AJOUT DE GAZOILE"
OK, raisonnons autrement
explique moi comment tu comprends ceci :
que doit il y avoir dans partie 1 exactement ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 If Me.zdtNom = "" And Me.zdtTICPrenom = "" And Me.zdtImmat = "" Then 'partie 1 Else 'partie 2 End If
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
Si les Me.zdt sont vides, alors exécute le code pour ajouter les données, et si les champs sont vides en cliquant sur ajouter alors affiche les MsgBox, en cliquant sur oui on sort et rien ne ce passe, en cliquant sut non on reste sur le formulaire.
C'est ce que je comprends, mais là au vu de "mes énormes connaissances Access" je peux dire sans erreur que peut-être je me trompe.
Mais en soit c'est ce que je souhaiterais que cela fasse.
Si tout est vide, alors tu lances un ajout ?
n'est-ce pas plutot l'inverse que l'on souhaite (pas de renseignement = pas d'ajout).
Fais un schéma simple sur papier pour voir ca
Il est évident que la solution est déjà connue par certaines personnes qui suivent le sujet, mais il est important que tu progresses par la meme occasion, c'est d'une part le but du forum et d'autre part un énorme gain de temps sur l'avenir
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
???? Tu soulève un problème que je ne vois pas sur cela, car pour ce code ça à tout de même l'air de fonctionner, je veux dire si je ferme le formulaire sans rien ajouter il me l'indique me donne le choix de rester sur le formulaire ou de fermer, et cela ne m'ajoutes rien à la table, peut être dois je mal formuler mes dires. Car sinon ce serait comment ainsi :
Ce que je voulais dire, c'est si les champs sont vides alors ouvre la base pour en ajouter mais si tu cliques sur ajouter sans mettre de données alors affiche le MsgBox pour le signifier, et, ou rester sur le formulaire pour ajouter qq ch ou en sortir sans ajouter quoi que ce soit à la table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 If Me.zdtNom = "" And Me.zdtTICPrenom = "" And Me.zdtImmat = "" Then If MsgBox("Vous n'avez pas ajouté de nouveau véhicule, voulez vous quittez cette fenêtre sans enregistrer ?", vbYesNo) = vbYes Then DoCmd.Close acForm, Me.Name End If Else strSQL = "SELECT * FROM TbVehicules" RS.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic RS.AddNew 'et oui on ajoute RS.Fields("Nom") = Me.zdtNom RS.Fields("TICPrenom") = Me.zdtTICPrenom RS.Fields("Tel") = Me.zdtTel RS.Fields("Immat") = Me.zdtImmat RS.Update RS.Close End If
Voila, la c'est mieux déjà, vérifie pour les autres si c'est bien le cas pour commencer
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
Oki doki,
Mais le soucis de l'ajout venais au clique du btn fermer, cela ce peux que ce soit lié ?
Chaque chose en son temps
Pense à ajouter un
en haut de tes modules, c'est contraignant pour développer au début, mais ca aideà le faire "bien"
Code : Sélectionner tout - Visualiser dans une fenêtre à part Option Explicit
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
Et bien tu sais quoi
autant avant j'avais pas de pb avec :
Autant maintenant avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 Private Sub BtnAjout_Click() Dim RS As New ADODB.Recordset Dim strSQL As String If Me.zdtQteEntre = "" And Me.zdtPrixLitre = "" Then strSQL = "SELECT * FROM TbEntree" RS.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic RS.AddNew RS.Fields("DateEntree") = Me.zdtDateEntree RS.Fields("Qte") = Me.zdtQteEntre RS.Fields("PrixLitre") = Me.zdtPrixLitre RS.Update RS.Close Application.Echo False DoCmd.Close acForm, "FmAccueil" DoCmd.OpenForm "FmAccueil" Application.Echo True DoCmd.Close acForm, Me.Name Else If MsgBox("Il manque l'entrée de la quantité et/ou du prix du litre, voulez vous quittez cette fenêtre sans enregistrer ?", vbYesNo) = vbYes Then DoCmd.Close acForm, Me.Name End If End If End Sub
et bien ça ajoutes gentillement des lignes vides et ça ferme le formulaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 Private Sub BtnAjout_Click() Dim RS As New ADODB.Recordset Dim strSQL As String If Me.zdtQteEntre = "" And Me.zdtPrixLitre = "" Then If MsgBox("Il manque l'entrée de la quantité et/ou du prix du litre, voulez vous quittez cette fenêtre sans enregistrer ?", vbYesNo) = vbYes Then DoCmd.Close acForm, Me.Name End If Else strSQL = "SELECT * FROM TbEntree" RS.Open strSQL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic RS.AddNew RS.Fields("DateEntree") = Me.zdtDateEntree RS.Fields("Qte") = Me.zdtQteEntre RS.Fields("PrixLitre") = Me.zdtPrixLitre RS.Update RS.Close Application.Echo False DoCmd.Close acForm, "FmAccueil" DoCmd.OpenForm "FmAccueil" Application.Echo True DoCmd.Close acForm, Me.Name End If End Sub
Qq ch m'échappes
J'ai remis comme avant, code du dessus, et pas de soucis, si les champs sont vides il m'affiche le MsgBox et si je réponds oui il ferme le formulaire sans rien ajouter, mais ayant compris ce que tu voulais dire c'est vrai que le bloc de code N°2 est plus logique, alors pourquoi ça ne marche pas alors que le premier fonctionne ?
Bonsoir Jean Philippe,
Je me suis penché sur la base même en Access, les relations de tables et les tables, la vache, c'était un beau bazar, si je peux me permettre, la table TbVehicules ne sert strictement à rien, car la TbTech et la TbGestVehicule sont déjà là et ça fait doublon
J'ai donc fais un peu de ménage :
Supprimé la TbVehicule et je l'ai remplacée par TbAttributionVehicule avec 3 colonnes, IDAttributionVehicule / IDTech / IDGestVehicule.
j'ai mis le code comme tu me l'avais dit, et bien, du coup ça marche, est-ce possible que le bazar dans les tables provoquait tout le contraire de la logique recherchée ?
Par contre du coup dans mon form FmVehiculesModif j'ai un pb pour récuperer les valeurs des champs sur le chargement, j'ai essayé mais c'est clair ça va pas
Alors ma question est, à partir de ce code comment je récupère les données correspondantes aux 2 ID pour les champs : zdtNom, zdtPrenom, zdtTel et zdtImmat ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Private Sub Form_Load() Dim IDVehiculeAttribution As Double IDVehiculeAttribution = Nz(GetParam("IDVehiculeAttribution"), 0) If IDVehiculeAttribution <> 0 Then 'load existing data Me.zdtIDTech = Nz(DLookup("IDTech", "TbVehiculeAttribution", "IDVehiculeAttribution=" & IDVehiculeAttribution), "") Me.zdtIDGestVehicule = Nz(DLookup("IDGestVehicule", "TbVehiculeAttribution", "IDVehiculeAttribution=" & IDVehiculeAttribution), "") Else 'create new one Me.zdtIDTech = "" Me.zdtIDGestVehicule = "" End If End Sub
Bonne soirée, la je lâche le code ( 23h36 ) avant que
Cordialement,
Sylvain
Bonjour à tous,
Après m'être arraché les cheveux je répond à mon propre post, pour ceux ou celles débutants comme moi (les autres ils avaient trouvé la réponse depuis longtemps ).
Et bien en se servant des champs qui récupèrent les valeurs IDTech et IDVehiculeAttribution, nous récupérons les valeurs pour les champs recherchés pour les afficher. Tel que :
Voilou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Private Sub Form_Load() Dim IDVehiculeAttribution As Double IDVehiculeAttribution = Nz(GetParam("IDVehiculeAttribution"), 0) If IDVehiculeAttribution <> 0 Then 'On charge les données pour les ID Me.zdtIDTech = Nz(DLookup("IDTech", "TbVehiculeAttribution", "IDVehiculeAttribution=" & IDVehiculeAttribution), "") Me.zdtIDGestVehicule = Nz(DLookup("IDGestVehicule", "TbVehiculeAttribution", "IDVehiculeAttribution=" & IDVehiculeAttribution), "") 'On charge les données pour afficher les champs correspondant au ID, à savoir les données Tech et l'immat du véhicule. Me.zdtNom = Nz(DLookup("Nom", "TbTech", "IDTech=" & zdtIDTech), "") Me.zdtPrenom = Nz(DLookup("Prenom", "TbTech", "IDTech=" & zdtIDTech), "") Me.zdtTel = Nz(DLookup("Tel", "TbTech", "IDTech=" & zdtIDTech), "") Me.zdtImmat = Nz(DLookup("Immatriculation", "TbGestVehicule", "IDGestVehicule=" & zdtIDGestVehicule), "") Else 'Sinon on créé une nouvelle entrée Me.zdtIDTech = "" Me.zdtIDGestVehicule = "" End If End Sub
Bonjour Jean Philippe, bonjour à tous,
Je ne comprend pas malgré avoir blindé mon code (Merci Jean Philippe ) avec :
Mon formulaire ajoute tjrs une ligne vierge à la table sur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 If Me.monchamp1 = "" And Me.monchamp2 = "" And Me.monchamp3 = "" Then If MsgBox("Tous les champs nécessaires ne sont pas renseignés, voulez vous quittez cette fenêtre sans enregistrer ?", vbYesNo) = vbYes Then DoCmd.Close acForm, Me.Name End If Else
Où est donc ce fichu pb ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub BtnFermer_Click() DoCmd.Close acForm, Me.Name End Sub
Cordialement,
Sylvain
mets un point d'arrêt dans tes code sur click bouton. Et clique sur le bouton pour faire tes tests en pas à pas, la réponse viendra d'elle meme
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
Jean Philippe,
Merci mais j'ai beau mettre un point d'arrêt sur le clique je vois pas où est le pb, j'ai blindé le code comme tu me l'a conseillé, et pourtant ça ajoutes tjrs une ligne vierge à la table qd je quittes le formulaire.
Pourrais tu m'aiguiller un peu plus précisément stp ?
Cordialement,
Sylvain
Parcours le code en mode pas à pas, et regarde à quel moment tu passerais sur une ligne d'ajout d'enregistrement, si il existe comme tu le dis, tu dois le trouver
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
C'est bien F8 le mode pas à pas ?
Jean Philippe,
J'ai rien trouvé de spécial pas moyen de savoir qu'est ce qui fait ajouter une ligne vide à la table lors de la fermeture du formulaire ou du clique sur le btn fermer.
Mais j'ai trouvé une astuce qui fait l'affaire :
Juste dommage de ne pas comprendre la pourquoi du comment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub BtnFermer_Click() Me.Undo DoCmd.Close End Sub
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager