Problème VBA: Saisie BDD : lecture/sauvegarde
Bonjour,
Fichier d’exemple en annexe.
J’aimerai crée une base de données avec des critère de saisie, j’ai besoin d’un peu d’aide pour bien faire des choses, pour ne pas trop chargé le programme, je pense qu’il y a les moyens de faire plus rapidement.
Je tape la valeur d’une ligne dans le textbox « Epuipement » et on vient charger les donné dans les textbox prévue dans frame « Caractéristique » depuis la feuille "Filtered Data SAP"
Et les bouton Next et Previous permet de lire les ligne haut et en bas depuis la ligne sélectionné, la ligne sélectionné à un tour de retard je ne sais pas pourquoi ?
Ce que j’aimerai faire c’est saisir les données dans les autres champ vides et les enregistrés avec le bouton « Save Data » dans la feuille « DataBase Application » avec les critères défini.
À chaque valeur saisie dans le textbox « Epuipement » charger les données de tous les champs.
Je ne sais pas s’il y a un moyen avec des boucles pour ne pas copier 100 lignes.
Merci de votre aide.
Salutations.
Bonjour,
Pour ton remplissage de champs avec l'événement "Change()" du TextBox "TextBox_EquipementSAP" j'utiliserai l'astérisque avec l'opérateur Like et une fois les champs remplis, sortir de la boucle :
Private Sub TextBox_EquipementSAP_Change()
Dim nom As Range
With ThisWorkbook.Sheets("Filtered Data SAP")
For Each nom In .Range("A2", .Cells(Rows.Count, "A").End(xlUp)) ' Read the value in colum A
If nom.Value Like Me.TextBox_EquipementSAP.Value & "*" Then
' charge lss données depuis la feuille Filtred data SAP
Me.TextBox_Sortfield = .Cells(nom.Row, "B")
Me.TextBox_Description1 = .Cells(nom.Row, "C")
Me.TextBox_FunctLocation = .Cells(nom.Row, "D")
Me.TextBox_Description2 = .Cells(nom.Row, "E")
Me.TextBox_ManufPartNo = .Cells(nom.Row, "F")
Me.TextBox_ManufSerialNo = .Cells(nom.Row, "G")
Me.TextBox_Manufacturer = .Cells(nom.Row, "H")
Me.TextBox_ModelNumber = .Cells(nom.Row, "I")
Me.TextBox_Room = .Cells(nom.Row, "J")
Me.TextBox_UserStatus = .Cells(nom.Row, "K")
Me.TextBox_AcquistionDate = .Cells(nom.Row, "L")
Me.TextBox_AcquistionDate = Format(TextBox_AcquistionDate, "dd.mm.yyyy")
Me.TextBox_CostCenter = .Cells(nom.Row, "M")
Me.TextBox_CreatedOn = .Cells(nom.Row, "N")
Me.TextBox_CreatedOn = Format(TextBox_CreatedOn, "dd.mm.yyyy")
Me.TextBox_EquipCategory = .Cells(nom.Row, "O")
Me.TextBox_Location = .Cells(nom.Row, "P")
Me.TextBox_MainEquipment = .Cells(nom.Row, "Q")
Me.TextBox_MainWorkCtr = .Cells(nom.Row, "R")
Me.TextBox_MaintPlant = .Cells(nom.Row, "S")
Me.TextBox_Miscellaneous1 = .Cells(nom.Row, "T")
Me.TextBox_Miscellaneous2 = .Cells(nom.Row, "U")
Me.TextBox_StartUpDate = .Cells(nom.Row, "V")
Me.TextBox_StartUpDate = Format(Me.TextBox_StartUpDate, "dd.mm.yyyy")
Exit For 'sortie de boucle !
End If
Next
'paramètre la cazse à cocher fonction de la valeur du TextBox
CheckBox_MainEquipment = TextBox_MainEquipment = "X"
End With
End SubRe,
Finalement, j'ai un peu modifié ton UserForm pour y introduire une barre de défilement ! Testes pour voir si ce que j'ai fais pourrai te convenir :
bonjour,
Merci pour la réponse, c'est intéressant.
Re,
Finalement, j'ai un peu modifié ton UserForm pour y introduire une barre de défilement ! Testes pour voir si ce que j'ai fais pourrai te convenir :
Inventaire Test version 2.xlsm
Bonjour,
C'est intéressant ce que vous avez fait.
Il n'y a pas un moyen de faire le remplissage automatique par un boucle de tableau ou qqch comme ça, au lieu de faire ligne par ligne, plus tard je dois aussi remplir les autres champs qui sont vide selon l'équipement recherché.
Merci pour la réponse.
Bonjour,
Il n'y a pas un moyen de faire le remplissage automatique par un boucle de tableau ou qqch comme ça, au lieu de faire ligne par ligne, plus tard je dois aussi remplir les autres champs qui sont vide selon l'équipement recherché.
Tu peux par exemple utiliser la propriété "Tag" des contrôles pour y stocker les lettres des colonnes et dans ce cas, tu peux boucler !
Comme tu as mis des Frames pour poser tes contrôles, il te faut boucler sur les contrôles des Frames et non directement sur les contrôles de l'UserForm ! Ici, bouclage sur le Frame "Frame_caratcSAP" pour parcourir sa collection de contrôles :
Sub RemplirChamps(Index As Long)
Dim Ctrl As Control
With Worksheets("Filtered Data SAP")
For Each Ctrl In Me.Frame_caratcSAP.Controls 'seulement sur le Frame "Frame_caratcSAP"
If TypeName(Ctrl) = "TextBox" Then If Ctrl.Tag <> "" Then Ctrl.Text = .Cells(Index, Ctrl.Tag)
Next Ctrl
End With
End SubPour remplir les propriété "Tag" des contrôles du Frame "Frame_caratcSAP", j'ai utiliser ce code (voir plus bas pour une saisie en mode création) :
Sub RemplirTag()
Me.TextBox_EquipementSAP.Tag = "A"
Me.TextBox_Sortfield.Tag = "B"
Me.TextBox_Description1.Tag = "C"
Me.TextBox_FunctLocation.Tag = "D"
Me.TextBox_Description2.Tag = "E"
Me.TextBox_ManufPartNo.Tag = "F"
Me.TextBox_ManufSerialNo.Tag = "G"
Me.TextBox_Manufacturer.Tag = "H"
Me.TextBox_ModelNumber.Tag = "I"
Me.TextBox_Room.Tag = "J"
Me.TextBox_UserStatus.Tag = "K"
Me.TextBox_AcquistionDate.Tag = "L"
Me.TextBox_CostCenter.Tag = "M"
Me.TextBox_CreatedOn.Tag = "N"
Me.TextBox_EquipCategory.Tag = "O"
Me.TextBox_Location.Tag = "P"
Me.TextBox_MainEquipment.Tag = "Q"
Me.TextBox_MainWorkCtr.Tag = "R"
Me.TextBox_MaintPlant.Tag = "S"
Me.TextBox_Miscellaneous1.Tag = "T"
Me.TextBox_Miscellaneous2.Tag = "U"
Me.TextBox_StartUpDate.Tag = "V"
End Subque j'appelle dans la procédure "Initialize" de l'UserForm dont voici les premières lignes avec l'appel :
Private Sub UserForm_Initialize()
Dim Lig As Long
Dim i_cb As Integer
'cherche le nombre de lignes pour définir la valeur max de la barre de défilement
With Worksheets("Filtered Data SAP"): Lig = .Cells(.Rows.Count, 1).End(xlUp).Row: End With 'sur colonne A
BarreDefil.Max = Lig
BarreDefil.Min = 2
RemplirTag '<---- appel de la sub "RemplirTag"
'rempli les champs avec la première ligne de la base
RemplirChamps 2
TextBox_Observation.MultiLine = True
'...
'...
'...Mais pour éviter d'utiliser une Sub pour définir les "Tag", tu peux le faire en mode création, tu sélectionnes ton premier TextBox, en bas à gauche dans la fenêtre des propriétés tu cherche la propriété "Tag" et tu entres la ou les lettres de la colonne correspondante
Bonjour,
Est-ce que vous pouvez envoyer le fichier de test où vous avez fait le test.
Merci
Re,
Je te poste le fichier mais si tu ne sais pas gérer ceci, j'ai bien peur que tu te sois attaqué à un trop gros morceau pour toi !