[Résolu] userform & base de données (écriture & lecture)

plouf

XLDnaute Nouveau
Bonjour à tous,

Je dois coder un userform afin qu'il envoie des données à sur une base de données (feuille "Base de données").

Il est important de noter que précédemment j'ai créé un post pour un besoin très proche de celui-ci, mais depuis ma problématique a changé et je ne sais pas l'adapter.
https://www.excel-downloads.com/threads/resolu-userform-ecriture-dans-une-base-de-donnees.171608/
Merci à Jean-Marcel qui m'a aidé pour mon précédent problème.


Il faudrait que lorsque je click sur le CommandButton1, les données contenues dans les Textbox (ou combobox) s'ajoute à la suite de ma base de données.

J'ai fait une règle concernant le nom des textbox (ou combobox):

  • Les combobox en dessous du Label: ID sont nommés: aa1; aa2; aa3; .. ; aa20
  • Les combobox en dessous du Label : véhicule sont nommés: bb1; bb2; bb3; .. ; bb20
  • Les combobox en dessous du Label : chauffeur sont nommés: cc1; cc2; cc3; .. ; cc20
  • Les textbox en dessous du Label : chargement1 sont nommés: dd1; dd2; dd3; .. ; dd20
  • Les textbox en dessous du Label : chargement2 sont nommés: ee1; ee2; ee3; .. ; ee20
  • Les textbox en dessous du Label : heure sont nommés: ff1; ff2; ff3; .. ; ff20
  • Les textbox en dessous du Label : ref1 sont nommés: gg1; gg2; gg3; .. ; gg20
  • Les textbox en dessous du Label : ref2 sont nommés: hh1; hh2; hh3; .. ; hh20

J'aimerai que pour chaque ligne (ex ligne 1: aa1;bb1;cc1;dd1;ee1;ff1;gg1;hh1), si au moins un des champs aa1 ou bb1 ou cc1 contient une valeur, alors les données de toute la ligne sont envoyées à la suite de la base de données.

via cette règle:
  • Le combobox Dateactivitésaisie1 envoie les données à la colonne A (cette valeur de "date" sera la même pour chacune des lignes envoyées)
  • aa envoie les données à la colonne B
  • bb envoie les données à la colonne C
  • cc envoie les données à la colonne D
  • dd envoie les données à la colonne E
  • ee envoie les données à la colonne F
  • ff envoie les données à la colonne G
  • gg envoie les données à la colonne H
  • hh envoie les données à la colonne I

Voici le code de mon ancien userform permettant d'écrire depuis des textbox vers la base de données. A savoir que ce code ne fonctionnait que pour une seule ligne de textbox or maintenant il y en a 20, et j'aimerai trouver quelque chose de moins manuel (comme une boucle) dans le cas où le nombre de ligne de textbox augmente.


Code:
Private Sub CommandButton1_Click()
    With Sheets("base de données")
        Derligne = .Range("A65536").End(xlUp).Row + 1
        .Cells(Derligne, 1) = TextBox1
        ' Etc pour la textbox2 , 3 , 4
    If Derligne = 101 Then
        .Cells(2, 1).EntireRow .Delete
    End If
    End With
    Unload Me
End Sub


Je reste disponible pour plus d'infos

Merci d'avance pour vos conseil & suggestions

plouf
 

Pièces jointes

  • userform.xls
    125 KB · Affichages: 101
  • userform.xls
    125 KB · Affichages: 94
  • userform.xls
    125 KB · Affichages: 108
Dernière édition:
C

Compte Supprimé 979

Guest
Re : userform & base de données (écriture & lecture)

Bonjour Plouf

Voici le code
Code:
Private Sub CommandButton1_Click()
  Dim Ind As Integer
  ' Avec la feuille BdD
  With Sheets("base de données")
    ' Trouver la dernière ligne vide
    Derligne = .Range("A65536").End(xlUp).Row + 1
    ' Pour chaque TextBox de 1 à 20
    For Ind = 1 To 20
      ' Inscrire la valeur dans la ligne
      .Cells(Derligne, Ind) = Me("TextBox" & Ind).Value
    Next Ind
    ' Etc pour la textbox2 , 3 , 4
    If Derligne = 101 Then
      .Cells(2, 1).EntireRow .Delete
    End If
  End With
  Unload Me
End Sub

A+
 

pierrejean

XLDnaute Barbatruc
Re : userform & base de données (écriture & lecture)

Bonjour plouf

A tester:

Code:
Private Sub CommandButton1_Click()
prefixes = Array("aa", "bb", "cc", "dd", "ee", "ff", "gg", "hh")
 For m = 1 To 10
   For n = LBound(prefixes) To UBound(prefixes)
      tot = tot & Controls(prefixes(n) & m)
   Next n
   If tot <> "" Then
    derlin = Sheets("Base de données").Range("A65536").End(xlUp).Row + 1
    Sheets("Base de données").Range("A" & derlin) = Dateactivitésaisie1
     For p = LBound(prefixes) To UBound(prefixes)
       Sheets("Base de données").Cells(derlin, p + 2) = Controls(prefixes(p) & m)
     Next p
   End If
   tot = ""
Next m
End Sub

Edit : Salut Bruno
 

plouf

XLDnaute Nouveau
Re : userform & base de données (écriture & lecture)

Bonjour BrunoM45, pierrejean,

Merci à vous deux pour vos réponses!

@BrunoM45: je pense qu'il y a un problème car le code n'écrit pas les bon prefixes de textbox aux bons endroits.. je pense que j'ai du mal expliquer ma problématique :(

@pierrejean: super code, il inscrit bien les données aux endroits attendus. super !
Si j'ai bien compris le fonctionnement du code, il vérifie que les valeurs des textboxs & comboboxs soient différents de "", et si c'est le cas il écrit la valeur dans la base de données?
Si c'est bien cela, j'aimerai qu'il vérifie uniquement les combo&textbox aa;bb;cc : en gros, si l'un des trois champs est différents de "" alors la ligne entière s'inscrit dans la base de données, sinon elle n'est pas comptabilisée.

Comment faire?

merci a vous deux !

plouf
 

plouf

XLDnaute Nouveau
Re : userform & base de données (écriture & lecture)

Salut Jean-Marcel, le forum,

Je viens d'essayer la modif mais ca ne marche pas car, ca "désactive" l'écriture des autres textboxs & combo

Enfaite, je souhaite que toutes textbox & combo écrivent comme le code de pierrejean, cependant, il faut qu'elles écrivent dans la base de données que si le (aa ou bb ou cc) est une valeur <>""

J'explique pourquoi:
car ma base de données a besoin essentiellement d'au moins un de ces 3 champs pour fonctionner (pour faire certaines stats) donc il ne faut absolument pas qu'une ligne soit écrite sans au moins un de ces 3 premiers champs.

merci d'avance

plouf
 

plouf

XLDnaute Nouveau
Re : userform & base de données (écriture & lecture)

Re pierrejean, Jean-Marcel,

Merci pour les réponses ! les deux codes marches mais je garderai celui de pierrejean (moins de ligne :D)

Au niveau de l'écriture des données dans la base de données, j'ai un autre point que j'aimerai améliorer.
J'aimerai (comme dans le poste précédent) que ma base de données se vide automatiquement lors de l'écriture des données:

J'avais pensé à ça pour effectuer la suppression de ligne:
A la fin de l'écriture, le code compte le nombre de ligne complétée (en A). Si ce nombre dépasse 100, alors il supprime les lignes à partir de la ligne 2 pour que la derniere ligne de la base soit de nouveau à 100.

Je vous remercie d'avance pour votre aide et vos suggestions.

plouf
 
Dernière édition:

plouf

XLDnaute Nouveau
Re : userform & base de données (écriture & lecture)

Re pierrejean, Jean-Marcel

@pirrejean: Merci beaucouppppp !!! c'est génial ta solution est parfaite et en plus ludique ! La suppression des lignes marche très bien, elle ne dépasse jamais le seuil défini. top !

@Jean-Marcel: Merci à toi, j'ai aussi testé le dernier code, la suppression marche bien, les fonctionnalités sont ok !!
Je ne sais pas laquelle prendre...lol les deux marches très bien.

Merci à vous deux pour votre aide, vous m'avez permis de régler la problématique de l'écriture dans mes base de données. Je vais pouvoir reproduire ce mécanisme sur plusieurs userforms.


Le nom des textbox & combobox étant le même, je reste sur ce topic pour poser ma seconde problématique:
Je souhaite également que utiliser mon userform pour lire des données.

Pour cela, j'ai un tableau fait sur la feuille "Recherche" (qui effectue des recherches dans la base de données et qui trie les résultats) grâce à l'aide de Paritec sur ce fil:
https://www.excel-downloads.com/threads/recherche-vba-condition-tri.171813/

J'aimerai que les textbox et combobox:
  • aa s'alimentent via la colonne D
  • bb s'alimentent via la colonne E
  • cc s'alimentent via la colonne F
  • dd s'alimentent via la colonne G
  • ee s'alimentent via la colonne H
  • ff s'alimentent via la colonne I
  • gg s'alimentent via la colonne J
  • hh s'alimentent via la colonne K

J'aimerai bien utiliser la méthode que vous utilisez en déclarant une variable "n" pour le numéro des textbox, c'est super pratique de "boucler" (c'est comme ca qu'on dit?).. mais je ne comprend pas assez bien les codes pour le créer tout seul..

Je vous remercie pour votre aide.

plouf
 

Pièces jointes

  • plouf_userform.xls
    142.5 KB · Affichages: 137
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : userform & base de données (écriture & lecture)

bonjour Plouf,Jean Marcel,Pierre Jean
voilà un code pour ta dernière demande
Code:
Private Sub UserForm_Initialize()
prefixes = Array("aa", "bb", "cc", "dd", "ee", "ff", "gg", "hh")
With Sheets("Recherche")
For i = 1 To 10 'index contrôles
For c = 4 To 11
Me.Controls(prefixes(c - 4) & i).Value = .Cells(i + 4, c).Text 'les 10 1ères lignes
Next c
Next i
End With

End Sub
à bientôt
 

plouf

XLDnaute Nouveau
Re : userform & base de données (écriture & lecture)

Bonsoir Bebere, le forum,

Je te remercie pour ce code, c'est exactement ce qu'il me fallait.

J'ai eu beaucoup de mal à l'adapter à d'autres situation, et j'aimerai savoir si il était possible de rendre plus manuel ce code pour un débutant comme moi :eek:

J'aimerai pouvoir modifier de manière simple l'équivalent de ca en vba:
avec une ligne à chaque fois pour désigner la colonne et le type de préfixe à utiliser..

Code:
  * aa s'alimentent via la colonne D
    * bb s'alimentent via la colonne E
    * cc s'alimentent via la colonne F
    * dd s'alimentent via la colonne G
    * ee s'alimentent via la colonne H
    * ff s'alimentent via la colonne I
    * gg s'alimentent via la colonne J
    * hh s'alimentent via la colonne K

Je vous remercie pour votre aide.

plouf
 

Bebere

XLDnaute Barbatruc
Re : userform & base de données (écriture & lecture)

bonjour Plouf
d'abord une question
y a t'il une raison pour que tu affiches toutes ces lignes dans des textbox
en général affichage dans une listbox ou listview et la sélection d'une ligne affiche dans les textbox
oui il y a moyen d'automatiser la correspondance textbox colonne
à bientôt
 

plouf

XLDnaute Nouveau
Re : userform & base de données (écriture & lecture)

Bonjour Bebere,


EDIT: Ooups enfaite ca marche l'erreur venait d'ailleurs :eek:
Ca marche très bien !

sorry

Je construit une base de données sous excel, que j'analyse via des tableaux excel.
Mon but est d'entrer des données avec le USF mais également de lire les données qui sont récoltées et transformées sur les tableaux (tout est dynamique).

Pourquoi utiliser autant de données à la fois:
car j'analyse une activité de chauffeurs (100 aine) dans mon exemple 20, sur plusieurs années. Il faut que je puisse observer chacun des chauffeurs.

Du coup, que ce soit pour l'écriture ou la lecture, il me faut des codes qui me permettent à la fois de d'automatiser la saisie que les lignes mais de facon manuelle pour les colonnes afin que je puisse adapter et modifier l'arrivée et l'envoie des données.

J'ai essayé de modifier le code mais ca bloque je comprend pas trop pourquoi :(
Code:
With Sheets("lecture activité")
For i = 1 To 20 'index contrôles
Me.Controls(("aa") & i).Value = .Cells(i + 4, 1).Text
Me.Controls(("bb") & i).Value = .Cells(i + 4, 2).Text
Me.Controls(("cc") & i).Value = .Cells(i + 4, 3).Text 'les 10 1ères lignes
Me.Controls(("dd") & i).Value = .Cells(i + 4, 4).Text
Me.Controls(("ee") & i).Value = .Cells(i + 4, 5).Text
Me.Controls(("ff") & i).Value = .Cells(i + 4, 6).Text
Me.Controls(("gg") & i).Value = .Cells(i + 4, 7).Text
Me.Controls(("hh") & i).Value = .Cells(i + 4, 8).Text

Next i
End With
End Sub

merci pour ton aide !

plouf
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : [Résolu] userform & base de données (écriture & lecture)

Bonjour Plouf
en premier il faudrait une correspondance entre les 2 tableaux exemple noms des chauffeurs
ensuite un exemple de demande
choix d'un chauffeur dans base de données
recherche dans la feuille recherche
le résultat de la recherche est affichée dans les contrôles
tu fais les changements
tu enregistres les changements dans base de données sous les conditions que tu souhaites
à bientôt
 

Discussions similaires

Statistiques des forums

Discussions
312 275
Messages
2 086 707
Membres
103 377
dernier inscrit
fredy45