Formulaire encore et toujours...

budboy

XLDnaute Nouveau
Bonjour à tous,

Encore un nouveau!!
Et oui, je découvre l'univers de VBA sous excel et bien que fasciné de mes maigres progrès je bute finalement sur la question suivante.

J'ai réaliser un formulaire très simple permettant d'enregistrer sur bdd les noms de concurrents devant s'inscrire à une manifestation sportive.

Parmis ces concurrents environ 60 % sont déjà connus car présents annuellement!
Pour ne pas me retaper toute la saisie du nom prénom adresse (...) car il faut aller vite, je souhaiterai, si le nom est connu (soit déja présent sur une BDD type années antérieurs) que le reste des infos soit proposé dans mon formulaire.

De cette manière, je devrais toujours pouvoir modifier ce qui mérite une mise à jour et enregistrer à la suite de ma feuille de saisie le concurrent.

Mais suis-je bien claire (?) et est-ce possible (?), par avance je m'excuse si ce sujet a déjà été traité, je suis d'ailleurs preneur de tout info.

Ci-joint mon modèle de formulaire inachevé faute de connaissance...

à tous merci,
 
Dernière édition:

porcinet82

XLDnaute Barbatruc
Re : Formulaire encore et toujours...

Salut,

Rajoute le code suivant dans le code de ton USF :
Code:
Private Sub CmdRechercher_Click()
Dim i%
'recherche sur le nom et le prénom
With Sheets("BDD")
    For i = 2 To .Range("A65536").End(xlUp).Row
        If .Cells(i, 1).Value = txtNom And .Cells(i, 2).Value = txtPrenom Then
            txtNom = .Cells(i, 1).Value
            txtPrenom = .Cells(i, 2).Value
            txtSexe = .Cells(i, 3).Value
            txtAdresse = .Cells(i, 4).Value
            txtCodepostal = .Cells(i, 5).Value
            txtVille = .Cells(i, 6).Value
            Exit Sub
        End If
    Next i
End With
End Sub

Et n'oublie pas de rajouter avant tout les codes Option Compare Text qui permet de ne pas tenir compte de la casse lors de la recherche.

@+
 

budboy

XLDnaute Nouveau
Re : Formulaire encore et toujours...

Merci beaucoup de ton aide Porcinet,

J'ai essayer ta formule qui marche comme je le souhaitais...

Sais tu s'il est possible de se passer du "clique" sur le bouton rechercher?

Je souhaiterai pouvoir ne pas décoller les mains du clavier par soucis de gain de temps sur PC portable...

Donc de déclencher cette recherche directement après la saisie du champ Nom (+ une touche s'il faut, ou + valide ??)


dans l'attente de te relire...
 

budboy

XLDnaute Nouveau
Re : Formulaire encore et toujours...

Tant que j'y suis j'en remet une...

Je veux pouvoir lancer une recherche à partir du nom ou du n° de Licence, j'ai donc dupliqué la formule qui ne marche pas, ce qui me rappel que je suis bien un débutant...

Private Sub CmdRechercher_Click()
Dim i%
'recherche sur le nom

With Sheets("BDD")
If txtNom <> "" Then
For i = 2 To .Range("A65536").End(xlUp).Row
If .Cells(i, 1).Value = txtNom Then
txtNom = .Cells(i, 1).Value
txtPrenom = .Cells(i, 2).Value
txtSexe = .Cells(i, 3).Value
txtClub = .Cells(i, 4).Value
txtCodeclub = .Cells(i, 5).Value
txtLicence = .Cells(i, 6).Value
txtAdresse = .Cells(i, 7).Value
txtCodepostal = .Cells(i, 8).Value
txtVille = .Cells(i, 9).Value

Exit Sub
End If
Next i
End With
'recherche sur N° de Licence
Else
With Sheets("BDD")

For f = 2 To .Range("F65536").End(xlUp).Row
If .Cells(f, 6).Value = txtLicence Then
txtNom = .Cells(f, 1).Value
txtPrenom = .Cells(f, 2).Value
txtSexe = .Cells(f, 3).Value
txtClub = .Cells(f, 4).Value
txtCodeclub = .Cells(f, 5).Value
txtLicence = .Cells(f, 6).Value
txtAdresse = .Cells(f, 7).Value
txtCodepostal = .Cells(f, 8).Value
txtVille = .Cells(f, 9).Value

Exit Sub
End If
Next f
End With
End Sub
 
Dernière édition:

porcinet82

XLDnaute Barbatruc
Re : Formulaire encore et toujours...

re,

Vire le code présent dans le bouton et rajoute ceci :
Code:
Private Sub txtLicence_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim i%
If txtLicence <> "" Then
    'recherche sur le num licence
    With Sheets("BDD")
        For i = 2 To .Range("A65536").End(xlUp).Row
            If .Cells(i, 6).Value = Val(txtLicence) Then
                txtNom = .Cells(i, 1).Value
                txtPrenom = .Cells(i, 2).Value
                txtSexe = .Cells(i, 3).Value
                txtClub = .Cells(i, 4).Value
                txtCodeclub = .Cells(i, 5).Value
                txtLicence = .Cells(i, 6).Value
                txtAdresse = .Cells(i, 7).Value
                txtCodepostal = .Cells(i, 8).Value
                txtVille = .Cells(i, 9).Value
                Exit Sub
            End If
        Next i
    End With
End If
End Sub
 
Private Sub txtPrenom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim i%
'si les 2 champs nom et prenom ne sont pas remplit, la recherche ne se fait pas
If txtNom <> "" And txtPrenom <> "" Then
    'recherche sur le nom et le prénom
    With Sheets("BDD")
        For i = 2 To .Range("A65536").End(xlUp).Row
            If .Cells(i, 1).Value = txtNom And .Cells(i, 2).Value = txtPrenom Then
                txtNom = .Cells(i, 1).Value
                txtPrenom = .Cells(i, 2).Value
                txtSexe = .Cells(i, 3).Value
                txtClub = .Cells(i, 4).Value
                txtCodeclub = .Cells(i, 5).Value
                txtLicence = .Cells(i, 6).Value
                txtAdresse = .Cells(i, 7).Value
                txtCodepostal = .Cells(i, 8).Value
                txtVille = .Cells(i, 9).Value
                Exit Sub
            End If
        Next i
    End With
End If
End Sub

@+
 

budboy

XLDnaute Nouveau
Re : Formulaire encore et toujours...

Bravo,

Je suis impressionné par ce résultat, je vais continuer à avancer sur ces bases et peut-être que je reviendrais te solliciter à la prochaine étape...

Mais dis moi? Comment acquiert-on ces bases de connaissance, ces formules tu les trouves ou?
Merci en tout cas et encore bravo!
 

porcinet82

XLDnaute Barbatruc
Re : Formulaire encore et toujours...

re,

Et bien, pour mon cas, j'ai débuté le vba duant mon dut il y a 4 ans (je ne savais meme pas ce que c'etait). Un prof nous a fait faire un projet que j'ai réalisé avec l'aide d'un ancien prof et qui m'a donné envie de m'impliquer un peu plus (je l'en remercie vivement aujourd'hui !!!).
Ensuite, c'est en quelque sorte une passion, du temps sur le forum a lire de nombreux posts et a chercher des solutions, quelques projets personnels...

Et puis, je ne te cache pas que je sui tres loin de tout connaitre par coeur. Il y a l'enregistreur de macro qui est bien utile, sans parlé de la touche F1 !!!!

Bon courage dans ton apprentissage?

@+
 

budboy

XLDnaute Nouveau
Re : Formulaire encore et toujours...

Merci de tes encouragements,

Je vais tacher d'être patient, je te pose une dernière petite et après je bucherais tout ca plus en profondeur :)

Pourquoi lorsque je copie ce que tu fais ca ne marche pas aussi bien...

En bas de mon formulaire j'ai mis un champ Recherche qui devra permettre de réafficher un ligne présente cette fois ci dans ma feuille de saisie...

je colle donc sauvagement un :

Private Sub txtDossard_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim i%
If TxtDossard <> "" Then
'recherche sur le Dossard
With Sheets("Saisie")
For i = 2 To .Range("A65536").End(xlUp).Row
If .Cells(i, 1).Value = TxtDossard Then
TxtDossardsuivant = .Cells(i, 1).Value
txtNom = .Cells(i, 2).Value
txtPrenom = .Cells(i, 3).Value
txtSexe = .Cells(i, 4).Value
txtClub = .Cells(i, 5).Value
txtCodeclub = .Cells(i, 6).Value
txtLicence = .Cells(i, 7).Value
txtAdresse = .Cells(i, 8).Value
txtCodepostal = .Cells(i, 9).Value
txtVille = .Cells(i, 10).Value
Exit Sub
End If
Next i
End With
End If
End Sub

à la suite des 2 formules que tu m'as gentillement concu... et là rien à part une sorte de "I" qui se place dans le champ Licence!?


J'ai beau relire ce que tu as fais et ce que j'ai pompé sauvagement, rien ne se passe...
Merci encore une fois.
 

budboy

XLDnaute Nouveau
Help

Bonsoir à tous,

Je "patoge" encore un peu dans mon problème de formulaire destiné à enregistrer des concurrents.

Voilà tout :
Mon problème : je l'avais résolu mais j'ai fais une modif et pas moyen de retrouver ce qui marchait... selon l'année de naissance on attribue une catégorie
' Transforme Naissance en catégorie

If Me.txtNaissance >= 1939 Then Naissanceconverti = "V4"
If Me.txtNaissance >= 1949 Then Naissanceconverti = "V3"
If Me.txtNaissance >= 1959 Then Naissanceconverti = "V2"
If Me.txtNaissance >= 1969 Then Naissanceconverti = "V1"
If Me.txtNaissance >= 1985 Then Naissanceconverti = "SE"
If Me.txtNaissance >= 1988 Then Naissanceconverti = "ES"
If Me.txtNaissance >= 1990 Then Naissanceconverti = "JU"
If Me.txtNaissance >= 1992 Then Naissanceconverti = "CA"
If Me.txtNaissance >= 1994 Then Naissanceconverti = "MI"
If Me.txtNaissance >= 2000 Then MsgBox "Vérifiez l'année de naissance!"
Exit Sub

Mais ça ne marche pas ou plus... dès que je pose un End If, j'ai droit à mon erreur de code?? A vrai dire je sais plus comment m'y prendre,

Merci de votre aide,
 
Dernière édition:

budboy

XLDnaute Nouveau
Solution Semble Ok

Voilà la nuit a portée conseil...

Je crois que j'ai résolu simplement en ajoutant des sauts de ligne après Then et ce qui suit, du coup chaque If est interprété et j'ai pu rajouter mais End If...

If Me.txtNaissance >= 1900 Then
Naissanceconverti = "V4"
If Me.txtNaissance >= 1939 Then
Naissanceconverti = "V3"
If Me.txtNaissance >= 1949 Then
Naissanceconverti = "V2"
If Me.txtNaissance >= 1959 Then
Naissanceconverti = "V1"
If Me.txtNaissance >= 1969 Then
Naissanceconverti = "SE"
If Me.txtNaissance >= 1986 Then
Naissanceconverti = "ES"
If Me.txtNaissance >= 1989 Then
Naissanceconverti = "JU"
If Me.txtNaissance >= 1991 Then
Naissanceconverti = "CA"
If Me.txtNaissance >= 1993 Then
Naissanceconverti = "MI"
If Me.txtNaissance > 1995 Then
MsgBox "Vérifiez l'année de naissance!"
Exit Sub
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
 

ChTi160

XLDnaute Barbatruc
Re : Formulaire encore et toujours...

Salut budboy
Bonjour le fil (Porcinet82 en particulier)
Bonjour le Forum
Voilà ce que j'ai mis dans la Procédure Exit du txtNaissance
cela permet de supprimer cette partie de texte dans la procédure du bouton Valider
Code:
Private Sub txtNaissance_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Var_Naiss As Integer 'Ici on crée une variable
'[COLOR=Green]on récupére la valeur du textBox dans cette variable[/COLOR]
Var_Naiss = Me.txtNaissance.Value 
[COLOR=Green] 'on teste si numerique sinon on sort après message[/COLOR]
If Not IsNumeric(Var_Naiss) Then _
    MsgBox "Attention veuilliez entrer une année valide": Exit Sub 
  Application.EnableEvents = False
With Me.txtNaissance
[COLOR=Green] 'Si inférieure à 1939 message et on sort[/COLOR]
    If Var_Naiss < 1939 Then _
              MsgBox "Attention veuillez vérifier l'Année": Exit Sub 
         If Var_Naiss >= 1939 And Var_Naiss < 1949 Then .Value = "V4"
          If Var_Naiss >= 1949 And Var_Naiss < 1959 Then .Value = "V3"
           If Var_Naiss >= 1959 And Var_Naiss < 1969 Then .Value = "V2"
            If Var_Naiss >= 1969 And Var_Naiss < 1985 Then .Value = "V1"
             If Var_Naiss >= 1985 And Var_Naiss < 1988 Then .Value = "SE"
              If Var_Naiss >= 1988 And Var_Naiss < 1990 Then .Value = "ES"
               If Var_Naiss >= 1990 And Var_Naiss < 1992 Then .Value = "JU"
                If Var_Naiss >= 1992 And Var_Naiss < 1994 Then .Value = "CA"
                 If Var_Naiss >= 1994 And Var_Naiss < 2000 Then .Value = "MI"
End With
'[COLOR=Green]Si supérieure à 2000 message et on sort[/COLOR]
If Var_Naiss >= 2000 Then MsgBox "Attention veuillez vérifier l'Année" 
Application.EnableEvents = True
End Sub
On remplace la variable de convertion par la valeur du textBox ainsi
Code:
 Range("A65536").End(xlUp).Offset(1, 0).Value = Me.txtDossardsuiv
    Range("B65536").End(xlUp).Offset(1, 0).Value = [COLOR=Blue]Me.txtNaissance[/COLOR]
    Range("C65536").End(xlUp).Offset(1, 0).Value = Prenomconverti
    Range("D65536").End(xlUp).Offset(1, 0).Value = Me.txtSexe.Text
en espérant avoir fait avancer le ChimilimBlick Arffff
Bonne Journée
Bon WeekEnd
 
Dernière édition:

budboy

XLDnaute Nouveau
Mon gros soucis du moment...

Merci Chti160 de ton aide,

En effet le chmilblik comme tu l'appel avance bon train...

Je prend bonne note de ta formule, mais en l'état elle ne fonctionne pas chez moi, je vais essayer de comprendre pourquoi j'ai du faire des milliers de modification ces dernières heures qui doivent être responsables de ca.


Mon gros soucis du moment : lorsque l'un des champs est vide lors de la validation de mon formulaire, la ligne se décale, et les informations de la saisie suivante ne correspondent plus à mon candidat car elles apparaissent décalées...

J'ai bien mis un espace dans tous les champs pour éviter ce décalage mais la formule est hasardeuse et dangereuse si l'espace venait à être effacé...

Y'a-t-il un moyen de faire pour que les données de mon formulaire restent alignés sur la même ligne?

Merci encore de votre aide, le fichier joint est le même que plus haut...
 

ChTi160

XLDnaute Barbatruc
Re : Formulaire encore et toujours...

Salut budboy
Bonsoir le fil
Bonsoir le forum

je crois me rappeler que tu détermimes la ligne ou coller les données pour chaque colonnes ,il est préférable de determiner cette ligne par rapport a une colonne ou la saisie et Obligatoire
Exemple
Code:
With WorkSheets("Feuil1")
  DerLigne= .Range("A65536").End(xLUp).Row+1
                .Cells(DerLigne,1) = Userform1.TextBox1
                .Cells(DerLigne,2) = Userform1.TextBox2
End With
ainsi , même si l'un des champs est vide, les données sont sur la même ligne
N'hésite pas si besoin

Bonne fin de Soirée
 

budboy

XLDnaute Nouveau
Re : Formulaire encore et toujours...

Salut Ch'ti 160,

Merci de ton renfort qui me vient là où il faut et qui réchauffe...

Voilà si j'ai bien compris c'est à ce niveau que ca se passe?

je remplace ce secteur là :
Range("A65536").End(xlUp).Offset(1, 0).Value = Me.txtDossardsuiv
Range("B65536").End(xlUp).Offset(1, 0).Value = Me.txtNaissance
(...)

par ce que tu viens de m'indiquer?
With WorkSheets("Feuil1")
DerLigne= .Range("A65536").End(xLUp).Row+1
.Cells(DerLigne,1) = Userform1.TextBox1
.Cells(DerLigne,2) = Userform1.TextBox2



Peux tu me dire si c'est la voix à suivre,

Merci pour tout,
 

ChTi160

XLDnaute Barbatruc
Re : Formulaire encore et toujours...

Salut budboy
bonjour le Fil
Bonjour le Forum

Oui,c'est la bonne Voie Tchou Tchou !!!!!!!!
il faut donc, que tu rendes par exemple la saisie du Nom obligatoire ,ainsi en colonne Nom tu seras toujours à la bonne distance Lol
si les noms sont en colonne A tu détermines la ligne où coller les données par rapport à elle.
DerLigne = La derniere ligne utiliser de la colonne A (en partant du bas)plus Une
soit
DerLigne= .Range("A65536").End(xLUp).Row+1

Bonne journée
 

Discussions similaires

H
Réponses
3
Affichages
908
HugoB99
H

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 519
dernier inscrit
Thomas_grc11