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.

156test-01.xlsm (29.83 Ko)

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 Sub

pour 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 Sub

déjà un petit début ci-joint

crdlt,

André

v24 màj 11 12 2020 am

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 Sub

maintenant 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
zalerte

... 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.

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.

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 Sub

on 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 Sub

testé 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.

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é

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

ztestdoublon

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é

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

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:

  1. 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)
  2. pour l'onglet BD , j'ai alimenté les cellules pour voir si l'usf2 fonctionnait
  3. 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)
  4. pour l'usf2 : j'ai légèrement modifier le design de l'usf2
  5. pour l'Usf2 : il y en textbox nommé Enr (il ne faut surtout pas le supprimer)
  6. pour l'Usf2 : il me reste aussi pour les caractères de certaines textboxs à mettre à jour ()
  7. pour l'usf2: le 1 dans la textbox faut que je regarde
  8. 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égral
  9. pour l'usf2: dans la textbox recherche par NOM que je marque en minuscule ou majuscule la recherche par NOM s'effectue correctement
  10. pour l'usf2: les boutons précédent et suivant fonctionne
  11. 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)

z60

crdlt,

André

Merci pour votre retour. C'est un sacré boulot. Merci pour tout.

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.

Bonjour toutes et tous

Re, Lulu merci de ton retour

@placer dans la cellule x2 de l'onglet BD dans la barre de formule cela sera automatique, après on regardera pour l'usf1 et l'usf2

=SI([@[licence payé]]="Payé"; "Oui";SI([@[licence payé]]="Non payé"; "Non";SI([@[licence payé]]="";"";)))
zlicence

crdlt,

André

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 .

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é

Rechercher des sujets similaires à "code vba fichier creation modification base donnees"