Userform en lecture seule et userform pour saisir données ds BDD

aureliedavid

XLDnaute Nouveau
Bonjour,

J'ai développé avec l'aide de certains d'entre vous un userform pour visualiser les résultats d'analyse d'une ligne d'une BDD. j'ai 2 questions et n'ai pas trouvé les réponses globales sur le forum :
1/ je souhaite maintenant mettre cette userform en lecture seule, j'ai réussi à le faire pour 1 seul textbox (Me.textbox1.enabled = false) mais ne sais pas lui dire de le faire pour la textbox de 1 à xx : comment faire ?
2/ je souhaite faire une autre userform sous le même format mais qui permettrai de faire les saisies des données, qui iraient se mettre dans la BDD excell.

Je vous joins le fichier.

Merci d'avance

Aurélie:)
 

Pièces jointes

  • test userform 19 06 12.zip
    249.9 KB · Affichages: 81

Papou-net

XLDnaute Barbatruc
Re : Userform en lecture seule et userform pour saisir données ds BDD

Bonjour Aurélie,

Ci-dessous le début de ta macro à modifier (boucle For Each...Next). Tout ce qui est après les points de suite reste inchangé.

Code:
Private Sub UserForm_Activate()

L = ActiveCell.Row
Me.TextBox1 = Range("L" & L) 'n° lot
For Each tb In Me.Controls
     If TypeOf tb Is MSForms.TextBox Then tb.Enabled = False
Next
Me.TextBox2 = Range("A" & L) 'date
Me.TextBox18 = Range("P" & L)
...
...
End Sub
Pourquoi créer un deuxième formulaire identique pour saisir des informations ? Il est possible d'ouvrir le même UserForm en ne protégeant pas les TextBox qu'il contient. Il suffirait pour cela de poser une condition pour exécuter la boucle que je t'ai proposée.

Ex :

Code:
Private Sub UserForm_Activate()

L = ActiveCell.Row
Me.TextBox1 = Range("L" & L) 'n° lot
If Modif = True Then
   For Each tb In Me.Controls
       If TypeOf tb Is MSForms.TextBox Then tb.Enabled = False
   Next
End If
Me.TextBox2 = Range("A" & L) 'date
Me.TextBox18 = Range("P" & L)
...
...
End Sub
Espérant avoir répondu.

Cordialement.
 

aureliedavid

XLDnaute Nouveau
Re : Userform en lecture seule et userform pour saisir données ds BDD

RE,

Pour le blocage de la userform, super, ça marche. Pour le second programme, je n'ai pas vu de différences. Je suis d'accord qu'il n'y a pas forcément besoin d'en faire une autre mais il faut pouvoir programmer l'ouverture sans protection quand toutes les cases de la ligne sont vides et à ce moment, pouvoir saisir les données dans la userform afin qu'elles aillent se mettre dans la base de données excel après validation de la userform remplie (il faut donc rajouter un bouton "SAISIR"). Puis, quand on re-clique dessus, ça se mette en lecture seule.

Penses-tu que cela est possible d'utiliser cette userform dans les 2 sens ?

Merci d'avance et merci pour la résolution de la première étape !

Aurélie
 

Papou-net

XLDnaute Barbatruc
Re : Userform en lecture seule et userform pour saisir données ds BDD

Bonsoir Aurélie,

Si j'ai bien compris la question, le code suivant devrait répondre à la demande.

Si ce n'est pas le cas, n'hésites pas à reformuler ta question.

Bonne soirée.

Cordialement.

Code:
Private Sub UserForm_Activate()
L = ActiveCell.Row
Me.TextBox1 = Range("L" & L) 'n° lot

Me.TextBox2 = Range("A" & L) 'date
Me.TextBox18 = Range("P" & L)
Me.TextBox19 = Range("Q" & L)
Me.TextBox20 = Range("R" & L)
Me.TextBox23 = Range("S" & L)
Me.TextBox29 = Range("T" & L)
Me.TextBox21 = Range("L" & L) 'produit
Me.TextBox1 = Range("H" & L)
Me.TextBox17 = Range("O" & L)
Me.TextBox28 = Range("U" & L)
Me.TextBox29 = Range("S" & L)
Me.TextBox27 = Range("W" & L)
Me.TextBox31 = Range("V" & L)
Me.TextBox26 = Range("x" & L)
Me.TextBox30 = Range("AI" & L)
Me.TextBox34 = Range("AJ" & L)
Me.TextBox33 = Range("AK" & L)
Me.TextBox32 = Range("AM" & L)
Me.TextBox36 = Range("AT" & L)
Me.TextBox41 = Range("AY" & L)
Me.TextBox40 = Range("AZ" & L)
Me.TextBox39 = Range("BA" & L)
Me.TextBox42 = Range("bb" & L)
Me.TextBox43 = Range("BC" & L)
Me.TextBox45 = Range("BD" & L)
Me.TextBox44 = Range("BN" & L)
Me.TextBox46 = Range("BD" & L)
Me.TextBox35 = Range("AV" & L)
Me.TextBox37 = Range("AU" & L)
Me.TextBox38 = Range("AW" & L)
Me.TextBox25 = Range("y" & L)
Me.TextBox24 = Range("z" & L)
Me.TextBox47 = Range("BE" & L)
Me.TextBox46 = Range("BF" & L)
Me.TextBox51 = Range("BG" & L)
Me.TextBox50 = Range("BH" & L)
Me.TextBox49 = Range("BI" & L)
Me.TextBox48 = Range("BJ" & L)
Me.TextBox53 = Range("BK" & L)
Me.TextBox52 = Range("BL" & L)
Me.TextBox55 = Range("BM" & L)
Me.TextBox54 = Range("BN" & L)
For Each tb In Me.Controls
    If TypeOf tb Is MSForms.TextBox And TextBox21 = "" Then
      tb.Enabled = True
      Else
      tb.Enabled = False
    End If
Next
End Sub
 

aureliedavid

XLDnaute Nouveau
Re : Userform en lecture seule et userform pour saisir données ds BDD

Bonjour,

Je reviens dans la discussion, pas mal de boulot en ce moment. J'ai créé une seconde UForm (userform2) car en fait, elle est plus complète. Je souhaite qu'en double cliquant sur la date (colonne A de la BDD), elle s'ouvre, qu'on puisse saisir toutes les infos dessus et appuyer sur un bouton valider pour que ces informations saisies dans la userform aille se mettre dans les cases correspondantes de la BDD.
J'espère être bien claire, je joins le fichiers

Merci d'avance et bon après midi

Aurélie
 

Pièces jointes

  • test userform 19 06 12.xlsm
    194.7 KB · Affichages: 81

Papou-net

XLDnaute Barbatruc
Re : Userform en lecture seule et userform pour saisir données ds BDD

Bonsoir Aurélie,

Je te renvoie le copie modifiée de ton fichier.

Si je pense avoir compris la demande, il reste des points d'ombre dans la résolution. En effet, je n'ai pas trouvé toutes les concordances entre les textbox de ton formulaire et les colonnes correspondantes sur la feuille RESULTATS. J'ai donc grisé les zones de texte incriminées en mettant leur propriété BackStyle à 0 (transparent). Une fois la question réglée, il suffira de la remettre à 1 (Opaque) pour rétablir la présentation initiale.

Il faut maintenant que je t'explique comment j'ai procédé pour établir les liaisons entre le formulaire et la feuille de calcul : dans la propriété Tag de chacun des textbox j'ai indiqué l'en-tête de la colonne correspondante en toutes lettres. Les zones grisées ne contiennent donc aucune référence dans la case Tag, c'est ce qu'il te reste à compléter. Par ailleurs, n'étant pas initié aux finesses de ton métier, je pense qu'il serait également que tu vérifies tous les autres contrôles car j'ai relevé quelques divergences apparentes sur certaines données.

J'utilise ensuite la propriété Tag de chaque contrôle pour désigner la cellule correspondante au sein de la boucle à l'activation et à la validation du formulaire. Tu remarqueras au passage combien le code s'en trouve simplifié.

Étant donné qu'il reste des zones d'ombre, j'ai introduit une condition dans les boucles afin de ne pas planter lors des essais. Une fois les données complétées, on pourra supprimer cette condition. Le code suivant du CommandButton1

Code:
For Each tb In Me.Controls
  If TypeOf tb Is MSForms.TextBox Then
    If Not tb.Tag = "" Then Feuil2.Range(tb.Tag & ActiveCell.Row) = tb.Value
  End If
Next
Deviendra donc

Code:
For Each tb In Me.Controls
  If TypeOf tb Is MSForms.TextBox Then
    Feuil2.Range(tb.Tag & ActiveCell.Row) = tb.Value
  End If
Next
Idem pour la procédure Activate du formulaire.

Je ne pense pas avoir oublié quelque chose mais si tu as des questions ou des remarques, n'hésite pas à y revenir.

Cordialement.
 

Pièces jointes

  • Copie de test userform 19 06 12.xlsm
    201 KB · Affichages: 105

aureliedavid

XLDnaute Nouveau
Re : Userform en lecture seule et userform pour saisir données ds BDD

Bonjour,

Merci beaucoup de ton retour, je prendrai le temps nécessaire pour bien comprendre les manip ce soir, je ne vais pas avoir le temps dans la journée. J'aurai sans doute quelques questions car le code est un peu mystérieux pour moi ! En tout cas, ça fonctionne. Je ferai quelques modif comme ajouter des menus déroulants mais je vais essayer de le faire seule !! (au début en tout cas !)

Merci et à bientôt

Bonne journée
 

aureliedavid

XLDnaute Nouveau
Re : Userform en lecture seule et userform pour saisir données ds BDD

Bonsoir,

Je reviens vers toi pour une petite question concernant mes userforms, tout fonctionne bien (grâce à toi), j'ai réussi à y mettre des menus déroulants aussi.
Je cherche maintenant à faire en sorte que si la ligne est déjà remplie (colonne L déjà saisie), s'affiche un message du genre "êtes-vous sûr de vouloir modifier cette saisie de résultats ?" et qu'on soit obligé de cliquer sur un oui pour continuer, et ce quand on double clique sur la colonne A pour afficher cette userform2.

voici le programme que tu avais mis :

Private Sub CommandButton1_Click()
For Each tb In Me.Controls
If TypeOf tb Is MSForms.TextBox Then
If Not tb.Tag = "" Then Feuil2.Range(tb.Tag & ActiveCell.Row) = tb.Value
End If
If TypeOf tb Is MSForms.ComboBox Then
If Not tb.Tag = "" Then Feuil2.Range(tb.Tag & ActiveCell.Row) = tb.Value
End If
Next
Unload Me
End Sub



Private Sub TextBox26_Change()

End Sub

Private Sub UserForm_Activate()
A = ActiveCell.Row
For Each tb In Me.Controls
If TypeOf tb Is MSForms.TextBox Then
If Not tb.Tag = "" Then tb.Value = Feuil2.Range(tb.Tag & ActiveCell.Row)
End If
Next


For Each tb In Me.Controls
If TypeOf tb Is MSForms.ComboBox Then
If Not tb.Tag = "" Then tb.Value = Feuil2.Range(tb.Tag & ActiveCell.Row)
End If
Next

End Sub


C'est juste une sécurité pour ne pas écraser des données déjà saisies mais quand même pouvoir compléter si des analyses sont faites après.

Je me dit qu'on peut ouvrir une autre userform mais je ne sais pas faire le repérage d'une case vide ou non et bloquer ou non la saisie !

Merci d'avance et bon dimanche

Aurélie
 

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 093
Membres
104 029
dernier inscrit
Neozz14