Code VBA pour fichier création modification dans base de données
Bonjour à tous,
Etant un novice dans l'exercice de code VBA je viens demander votre aide. Voici un fichier joint.
1ere demande dans le code du bouton créer l'UserForm 1 devrait s'ouvrir (la y a déjà un souci)
2e demande dans le code du bouton valider de l'UserForm 1 il faut que toutes les TextBox soit remplie jusqu'a la fin de "portable" sous le label Tuteur 1
et il faudrait un message d'erreur si tout n'et pas rempli et il faudrait aussi que ça n'ajoute pas la validation des TextBox si l'enfant est déjà créé (pas de doublons dans ma base de données)
Voila pour le début car je voudrais aussi ajouter un bouton "Rechercher" dans la feuille accueil qui ouvrirait la ligne dans la BD avec en plus un bouton modifier car il faut que la feuille BD soit protégé afin qu'on ne puisse pas effacé de donné sans passer par le bouton modifier.
Voilà un joli boulot pour un "noob" comme moi
Merci d'avance de l'aide que vous pourrez m'apporter.
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour toutes et tous
Bonjour Lulu
pour le bouton de commande de l'userform1 ( c'est mieux de mettre un commentaire de ' tes Texbox
Option Explicit
Private Sub CommandButton1_Click()
'bouton valider on doit forcément remplir toutes les TextBox jusqu'à la fin de Tuteur1 sinon message d'erreur et une fois tout rempli et click sur bouton valider l'userform se ferme
Dim derligne As Integer
If MsgBox("Confirmez vous l'ajout?", vbYesNo, "confirmation") = vbYes Then
derligne = Sheets("BD").Range("BD!H456541").End(xlUp).Row + 1
Cells(derligne, 8) = TextBox1.Value ' ENFANT: Prénom de l'enfant
Cells(derligne, 9) = TextBox2.Value ' ENFANT: NOM de l'enfant
Cells(derligne, 10) = TextBox3.Value ' ENFANT: E-mail de l'enfant
Cells(derligne, 11) = TextBox4.Value ' ENFANT: N° portable de l'enfant
Cells(derligne, 12) = TextBox5.Value ' ENFANT: Date de naissance de l'enfant
Cells(derligne, 13) = TextBox6.Value ' ENFANT: Rue
Cells(derligne, 14) = TextBox7.Value ' ENFANT: Code Postal
Cells(derligne, 15) = TextBox8.Value ' ENFANT: Ville
Cells(derligne, 16) = TextBox9.Value ' TUTEUR1 : Prénom
Cells(derligne, 17) = TextBox10.Value ' TUTEUR1 : NOM
Cells(derligne, 18) = TextBox11.Value ' TUTEUR1 : E-mail
Cells(derligne, 19) = TextBox12.Value ' TUTEUR1 : N° portable
End If
End Subpour le bouton de commande afin de lancer ton userform tu peux créer un bouton de commande ActiveX (CommandButton1) dans ton Vbe de ta feuille Accueil mettre :
Private Sub CommandButton1_Click()
UserForm1.Show
End Subdéjà un petit début ci-joint
crdlt,
André
v24 màj 11 12 2020 am
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
v24 màj 11 12 2020 am
Maintenant on va s'occuper des textboxs de l'userform1 de l'enfant uniquement, j'ai taggué (Tag) dans chaque Textbox de l'enfant Textbox 1 à textbox 8 mis le Tag sur les propriétés de ces 8 Textbox à O (la lettre o en Majuscule), j'ai ensuite déclaré la variable L voici le code :
Option Explicit
Dim L
Private Sub CommandButton1_Click()
For L = 1 To 8
If Controls("Textbox" & L).Value = "" And Controls("Textbox" & L).Tag = "O" Then
MsgBox "Champs Obligatoire", , "Alerte"
Controls("Textbox" & L).SetFocus
Exit Sub
End If
Next
'bouton valider on doit forcément remplir toutes les TextBox jusqu'à la fin de Tuteur1 sinon message d'erreur et une fois tout rempli et click sur bouton valider l'userform se ferme
Dim derligne As Integer
If MsgBox("Confirmez vous l'ajout?", vbYesNo, "confirmation") = vbYes Then
derligne = Sheets("BD").Range("BD!H456541").End(xlUp).Row + 1
Cells(derligne, 8) = TextBox1.Value ' ENFANT: Prénom de l'enfant
Cells(derligne, 9) = TextBox2.Value ' ENFANT: NOM de l'enfant
Cells(derligne, 10) = TextBox3.Value ' ENFANT: E-mail de l'enfant
Cells(derligne, 11) = TextBox4.Value ' ENFANT: N° portable de l'enfant
Cells(derligne, 12) = TextBox5.Value ' ENFANT: Date de naissance de l'enfant
Cells(derligne, 13) = TextBox6.Value ' ENFANT: Rue
Cells(derligne, 14) = TextBox7.Value ' ENFANT: Code Postal
Cells(derligne, 15) = TextBox8.Value ' ENFANT: Ville
Cells(derligne, 16) = TextBox9.Value ' TUTEUR1 : Prénom
Cells(derligne, 17) = TextBox10.Value ' TUTEUR1 : NOM
Cells(derligne, 18) = TextBox11.Value ' TUTEUR1 : E-mail
Cells(derligne, 19) = TextBox12.Value ' TUTEUR1 : N° portable
End If
End Submaintenant si je lance l'userform1 et que j'oubli de remplir un des champs des textbox enfant j'ai une alerte vu ici ce code merci à Archer :
https://forum.excel-pratique.com/excel/userform-verifier-remplissage-des-textbox-t100405.html
le code
For L = 1 To 8
If Controls("Textbox" & L).Value = "" And Controls("Textbox" & L).Tag = "O" Then
MsgBox "Champs Obligatoire", , "Alerte"
Controls("Textbox" & L).SetFocus
Exit Sub
End If
Next
... Facultatif mais conseillé : il ne reste plus qu'à mettre le code pour les textbox NOM & VILLE en Majuscule, pour la première lettre en Majuscule pour Prénom, le nombre de limitation pour le Code postal (5 ou 6 MaxLenght), et pour la date textbox qui te causera sans doute un souci par la suite
Waouh merci beaucoup pour tout ce travail désolé de ne répondre que maintenant "Dimanche c'est jour de match !!!"
J'ai du boulot j'avais avancé un peu sur la restructuration de mon Userform1. Grâce a votre code je vais continuer dans la construction de ce fichier.
Encore un grand merci pour votre aide.
Je reviens vers vous dans la journée, car c'est sûr j'aurai encore besoin de votre aide précieuse.
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour toutes et tous
De rien, merci de ton retour
bonne journée
crdlt,
André
Rebonjour,
Voici le fichier avec quelques modifications apportées. "Merci Youtube". Mais j'ai encore besoin de votre aide.
- "Prénom de l'enfant" si le clavier est en Majuscule du coup le format de caractère est en Majuscule (alors qu'on voudrait que la 1ere lettre)
-Date de naissance de l'enfant Pourquoi ça affiche la date du jour? (même si c'est modifiable après)
- Toujours pas réglé le souci de doublons dans la BD
Je continue de mon coté.
Il faut encore:
* Quand le fichier s'ouvre on tombe sur la feuille "Accueil"
* Verrouiller le BD pour ne pas pouvoir effacer les données simplement et aussi un bouton "Supprimer enfant" pour pouvoir l'effacer de la BD
* Un bouton Rechercher et/ou Modifier
et encore pleins de choses mais on va déjà traiter tout ça
Encore merci de votre aide.
Cordialement.
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Re,
pour que la feuille accueil du classeur s'affiche lors de l'ouverture du classeur :
1/ les touches du clavier ALT + F11 (sur le menu de gauche il y a ThisWorkbook on clique dessus, vers la page centrale légèrement sur la droite dans la liste déroulante 'Général' on recherche Workbook et Workbook Open s'affiche et s'est à l'intérieur qu'on ajoute ce petit bout de code:
Private Sub Workbook_Open()
Worksheets(2).Activate
End Subon sauvegarde le classeur et on test
Note: le (2) de Worksheets représente la Feuille 2 de ton classeur
----------------
pour le Prénom à modifier Textbox1-change() de l'userform1 par :
Private Sub TextBox1_Change()
' Prénom de l'enfant Première lettre en Majuscule ' maj 12/10/2020 Andre13
Dim Initiale As String, Reste As String
If Len(TextBox1) > 1 Then
Initiale = UCase(Left(TextBox1, 1))
Reste = LCase(Right(TextBox1, Len(TextBox1) - 1))
TextBox1 = Initiale & Reste
End If
End Subtesté fonctionnel,
idem pour le Tuteur1 Textbox13 pour le Prénom (changer juste Textbox1 par Texbox13) et les variables
Private Sub TextBox13_Change()
' Prénom du Tuteur1 Première lettre en Majuscule ' maj 12/10/2020 Andre13
Dim Initiale1 As String, Reste1 As String
If Len(TextBox13) > 1 Then
Initiale1 = UCase(Left(TextBox13, 1))
Reste1 = LCase(Right(TextBox13, Len(TextBox13) - 1))
TextBox13 = Initiale1 & Reste1
End If
End Sub----------------------
Merci j'ai rentré votre bout de code.
Du coup je reposte le fichier pour la suite
Merci vous êtes super sympa de m'aider.
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Re,
merci du retour
le classeur modifié le tout ci-dessus, comme cela, on repars sur de bonne base
je réfléchis pour les autres requêtes également -;)
ci-joint:
v24 màj 11 12 2020 am
crdlt,
André
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Re,
un petit test :
on test sur l'userform1 en cliquant sur check doublon, on se redirige systématiquement sur l'onglet BD, la textbox txt1 affiche toutes les adresses des cellules des doublons (j'ai désactiver la couleur des cellules si doublons existants)
ci-joint new version
pour l'instant car, je pense qu'après une listbox sera préférable en cas de suppression de doublon sur la feuille après confirmation
Note: le bouton supprimer et pour l instant inactif
Merci à Thebenoit59 pour le code doublon ci-dessous
Sub Doublon()
Dim Plage As Range
Dim Cel As Variant
Set Plage = Worksheets(3).Range("h3:h" & [h65000].End(xlUp).Row)
Set d = CreateObject("Scripting.Dictionary"): Set d2 = CreateObject("Scripting.Dictionary")
For Each Cel In Plage
If Cel.Value <> 0 And d.exists(Cel.Value) Then
' Cel.Interior.ColorIndex = 3:
d2(Cel.Address) = Cel.Value
Else: d(Cel.Value) = ""
End If
Next Cel
For Each Cel In d2.Keys
m = m & Chr(10) & d2(Cel) & " en " & Cel
UserForm1.txt1.Value = ""
UserForm1.txt1.Value = m
Next Cel
MsgBox "Les valeurs suivantes sont en doublons, les supprimer manuellement" & m, vbCritical
End Sub
crdlt,
André
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour toutes et tous
je me suis aidé des USF* .de Jacques Boisgontier que, je remercies ( Formulaire* ==> TexboxchercheID<===)
---
1/ en cliquant sur le bouton modifier de l'usf1 on ouvre l'usf2 et là on peut directement modifier, supprimer la ligne correspondante de la feuille BD, il restera à remettre dans les textboxs adéquates, les codes pour les majuscules et minuscules (Prénom NOM)+... de l' usf2
(Note perso: j'ai trouvé plus pratique de faire comme cela en créant un autre usf)
ci-joint tenez moi au courant
v24 màj 11 12 2020 am
crdlt,
André
Bonjour,
Super merci pour vos recherches, bien pensé pour l'usf2.
Du coup il faut reprendre toutes les données de l'usf1 pour pouvoir les modifier aussi. Et la vu la taille du code je suis complétement perdu
Je n'ai pas compris a quoi sert le bouton "Ajout vierge".
Dans l'usf2 c'est quoi la technique car quand on ouvre l'usf2 dans Visual basic c'est noté label 1 label 2 etc, et le caption a le même intitulé mais du coup en mode lecture ça reprend toute les infos de l'usf1. C'est magique !!!!
En tout cas super boulot.
Je
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Re,
merci du retour
à vrai dire, je bataille un peu lol!
je place la dernière version des trucs modifiés
v24 màj 11 12 2020 am
Note(s) j'ai barré certaines lignes qui sont ou me semble ok:
pour l'onglet BD , il faut remarquer que la largeur des colonnes correspondent exactement aux Textboxs de l'usf2 (les labels se mettent automatiquement avec les intitulés)pour l'onglet BD , j'ai alimenté les cellules pour voir si l'usf2 fonctionnait- pour l'usf2 : je n'ai pas encore trouver pour mettre à jour le bouton 'Ajout ' (j'ai du raté une étape, je re-reregarderai l'usf de JB)
pour l'usf2 : j'ai légèrement modifier le design de l'usf2pour l'Usf2 : il y en textbox nommé Enr (il ne faut surtout pas le supprimer)- pour l'Usf2 : il me reste aussi pour les caractères de certaines textboxs à mettre à jour ()
- pour l'usf2: le 1 dans la textbox faut que je regarde
pour l'usf2: dans la textbox recherche par NOM par double clic gauche on efface le contenu, ainsi on peut revoir le contenu de la listbox dans son intégralpour l'usf2: dans la textbox recherche par NOM que je marque en minuscule ou majuscule la recherche par NOM s'effectue correctementpour l'usf2: les boutons précédent et suivant fonctionne- pour l'USF1 : il faut que je regarde car là j'étais trop sur le usf2
une petite capture d'écran de l'usf2 (non fini)
crdlt,
André
Merci pour votre retour. C'est un sacré boulot. Merci pour tout.
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Re,
J'opte pour un multiple page je trouve que cela va être plus pratique
ci-joint
toujours je suis sur l'usf2
Note: j'ai corrigé un bug sur un textbox de l'usf1 et sur l'usf2 les minuscules aux Emails des textboxs
crdlt,
André
classeur supprimé new version
Bonsoir,
Merci beaucoup, je viens de m'apercevoir que j'ai fait une boulette à la création de l'usf1de mon fichier. Il faut que quand on coche licence "Non payé" il y ai un autre "truc" (usf ou message a cocher je ne connais pas trop le terme technique) pour choisir "Etape 3 validée" "Oui" / "Non" et qu'il y est un retour dans la colonne X
Ce qui donnerai dans la colonne "X" sur la même ligne si il y a N° de licence dans la cellule "Y" alors "Oui", Si cellule vide voir si "Etape 3" oui ou non si oui = "En cours" si non laissé cellule vide.
Et tout ça bien sûr en modifiable dans l'usf 2 .
J'espère être assez clair dans mes explications.
Encore merci.
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour, je vais tester cette modif.
Petite question pour une autre feuille il y a peut être une formule simple que je ne connais pas. Je cherche a recopier toutes les lignes ou il y aurai "1" dans la colonne "U14" dans une autre feuille .
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour toutes et tous
Euh, vous voulez dire la colonne U paracerque ' U14 'la c'est une cellule
j'ai mis un exemple de 4 onglets la feuil1 est le tableau si dans colonne U il y a le chiffre 1 en cliquant sur le bouton va retranscrire les lignes correspondantes
et les onglets 3 avec filtre idem et va retransférer si valeur 1 de la colonne U dans la feuil4
ci-joint
classeur supprimé new version
crdlt,
André
