[VBA] Userform à partir d'une BDD répartie sous plusieurs onglets

M_2193

XLDnaute Nouveau
Bonjour,

Je dispose d'une base de données de matériel répartis sous 3 onglets différents d'un même classeur. J'utilise un Userform afin que je puisse renseigner les prêts de matériels pour un utilisateur. J'y renseigne entre autre le nom-prénom de l'utilisateur ainsi que le matériel désiré après 3 filtres opérés sur cet Userform : tout d'abord le Type de l'appareil qui fait référence "Electrique" ou "Mécanique" ou "Bancs" qui fait référence aux 3 onglets différents, ensuite la désignation de l'appareil, le constructeur puis le modèle. C'est ainsi que ces champs sont renseignés sur un nouvel onglet ayant des cellules éponymes.

Mon principal problème repose sur l'utilisation de ces filtres. En effet chaque appareil a un numéro de référence. C'est celui-ci qui m'est donné lorsque je souhaite y inscrire un appareil emprunté. Mais n'ayant que la référence, il me faut au préalable regarder "manuellement" de quel appareil il s'agit avant d'utiliser le formulaire. J'aimerais donc pouvoir uniquement renseigner le numéro de référence dans l'Userform afin qu'il inscrive sur le nouvel onglets les champs associés à cet référence, ce serait un gros gain de temps pour moi ! ( Ainsi qu'il me dise si le numéro est déja emprunté ou inexistant dans la BDD)

Si il y a des spécialistes en Userform ici, je suis tout ouïe !

Cordialement,
 

Hervé

XLDnaute Barbatruc
Re : [VBA] Userform à partir d'une BDD répartie sous plusieurs onglets

re

la référence dont tu parles, c'est le numéro d'immat colonne A des trois onglets Type ?

tu veux donc saisir ce numéro dans ton usf, que ceci remplissent les differents champs et te renvoi le tout sur l'onglet "formulaire de pret" ?

a plus
 

M_2193

XLDnaute Nouveau
Re : [VBA] Userform à partir d'une BDD répartie sous plusieurs onglets

Exactement ! D'une part...
Et d'autre part il aurait fallu que mon Userform permette à l'utilisateur de renseigner plusieurs appareils sur une seule ouverture de l'Usf ( dans l'ordre de 4 ou 5 )

A+
 

Hervé

XLDnaute Barbatruc
Re : [VBA] Userform à partir d'une BDD répartie sous plusieurs onglets

salut :)

je vois à travers ton fichier que tu maitrises bien le VBA, je vais donc pas te faire le boulot ^^

j'ai crée en tête de l'userform une textbox1 avec un commandbutton

et j'ai mis ce code :

Code:
Private Sub CommandButton1_Click()
Dim ws As Worksheet
Dim c As Range

If TextBox1 = "" Then Exit Sub

For Each ws In Worksheets
    If ws.Name Like Str_Type & "*" Then
        With ws
            Set c = .Columns(1).Find(TextBox1)
            If Not c Is Nothing Then Exit For
        End With
    End If
Next ws

If c Is Nothing Then
    MsgBox "Référence non trouvée": Exit Sub
Else
    MsgBox "référence ok"
End If

End Sub

il s'agit ensuite pour toi de renseigner les autres controls a l'aide de la variable objet C.

code à placer en remplacement des 2 msgbox

a plus
 

Pièces jointes

  • formulaire_gestion_matos.zip
    113.6 KB · Affichages: 63

M_2193

XLDnaute Nouveau
Re : [VBA] Userform à partir d'une BDD répartie sous plusieurs onglets

Bonsoir !!

Maîtriser est un mot bien plus grand que moi je vous assure, je n'ai fait que récupérer un fichier déjà bien ficelé et j'ai un peu bricolé derrière :)

Merci pour ce que vous avez fait tout d'abord ! Toutefois ce n'est pas exactement ce à quoi je m'attendais: votre code me permet uniquement de vérifier si le produit est existant dans l'une des bases de données (ce qui est un bon gain de temps en soit ! ^^ ), mais il ne me précise pas à quoi il correspond ( par sa désignation-modèle-constructeur) et qui plus est, l'essence même de mon problème était de renseigner le ces champs, juste en tapant la référence.

Quant à mon deuxième problème, j'aurais aimé avoir votre avis : si je veux enregistrer plusieurs appareils pour un même utilisateur, est-il judicieux d'ajouter de nouvelles textbox conditionnées pour enregistrer sur des "Range +1", "Range + 2", "Range +3"..? Je ne sais pas si je me suis bien fait comprendre sur ce coup, c'est pas évident à expliquer !
 

Hervé

XLDnaute Barbatruc
Re : [VBA] Userform à partir d'une BDD répartie sous plusieurs onglets

salut :)

mais il ne me précise pas à quoi il correspond ( par sa désignation-modèle-constructeur) et qui plus est, l'essence même de mon problème était de renseigner le ces champs, juste en tapant la référence.

si si ^^

je t'ai simplement donné la routine pour rechercher ta référence parmi 3 onglets.

le code te trouve la ligne de la référence et la place dans la variable C.

il te suffit ensuite de parcourir la ligne en question pour trouver l'ensemble de tes renseignements :

c.offset(0,1) va te donner l'info se trouvant une cellule à droite de ta référence.
c.offset(0,2) la troisième colonne, etc....

il te faut donc juste parcourir la ligne, et placer les infos dans les bons controles.

dis moi si tu n'y arrives pas, je te ferai voir

a plus
 

M_2193

XLDnaute Nouveau
Re : [VBA] Userform à partir d'une BDD répartie sous plusieurs onglets

Bonjour !
il te suffit ensuite de parcourir la ligne en question pour trouver l'ensemble de tes renseignements :

c.offset(0,1) va te donner l'info se trouvant une cellule à droite de ta référence.
c.offset(0,2) la troisième colonne, etc....

il te faut donc juste parcourir la ligne, et placer les infos dans les bons controles.

Cela sous entend-il de les placer de la manière suivante ?

Private Sub enreg_Click()
Dim lr As ListRow
Dim c As Range

If IsDate(empr) = True Then
Range("a1") = empr
Else
MsgBox "Format de date incorrect !" & Chr(10) & "La saisie doit être de type jj/mm/aaaa"

End If

If IsDate(retour) = True Then
Range("a1") = retour
Else
MsgBox "Format de date incorrect !" & Chr(10) & "La saisie doit être de type jj/mm/aaaa"

End If
Set lr = Feuil5.ListObjects(1).ListRows.Add(1)
lr.Range(1, 1) = Me.nom
lr.Range(1, 2) = Me.prenom
lr.Range(1, 3) = Me.service
c.Offset(0, 3) = Me.CmbB_Designations
c.Offset(0, 2) = Me.CmbB_Constructeurs
c.Offset(0, 4) = Me.CmbB_Modeles
lr.Range(1, 7) = Me.numeroate
lr.Range(1, 8) = DateValue(Me.empr)
lr.Range(1, 9) = DateValue(Me.retour)
lr.Range(1, 10) = Me.zone




ThisWorkbook.Save
Unload Me

End Sub

Ou de celle-ci :
Private Sub CommandButton1_Click()
Dim ws As Worksheet
Dim c As Range

If TextBox1 = "" Then Exit Sub

For Each ws In Worksheets
If ws.Name Like Str_Type & "*" Then
With ws
Set c = .Columns(1).Find(TextBox1)
If Not c Is Nothing Then Exit For
End With
End If
Next ws

If c Is Nothing Then
MsgBox "Référence non trouvée": Exit Sub
Else
MsgBox "référence ok"
c.Offset(0, 3) = Me.CmbB_Designations
c.Offset(0, 2) = Me.CmbB_Constructeurs
c.Offset(0, 4) = Me.CmbB_Modeles
c.Offset(0, 0) = Me.numeroate
End If

Car ni l'une ni l'autre ne fonctionnent..
 

Hervé

XLDnaute Barbatruc
Re : [VBA] Userform à partir d'une BDD répartie sous plusieurs onglets

salut :)

j'ai des difficultés à comprendre ce que tu veux.

pour moi c'etait completer les contrôles le l'usf suivant une référence à trouver parmi 3 onglets;

tes codes font le contraire, renvoi vers des cellules, les contrôles.

en pièce jointe, un exemple, tu saisis une référence, la désignation, le modèle et le constructeur se remplisses.

j'ai remplacé les combo par des textbox

dis moi si j'ai rien compris (ca ne serait pas la première fois)

a plus
 

M_2193

XLDnaute Nouveau
Re : [VBA] Userform à partir d'une BDD répartie sous plusieurs onglets

Salut !

Je te rassure tu as tout à fait compris le problème!

Je pense que si ta méthode ne fonctionnait pas c'est parce qu'effectivement, les filtres appliqués sur les Combobox sont toujours actifs..
Je vais essayer de les essayer de le remplacer comme tu dis et voir ce que ça donne !
 

M_2193

XLDnaute Nouveau
Re : [VBA] Userform à partir d'une BDD répartie sous plusieurs onglets

Salut !

Je me suis débarrassé des filtres qui m'encombraient...J'ai remplacé les les Cmbbox par des Txtbox et placé les codes là où il le fallait (pas ? ) ..
Rien y fait..C'est comme si après avoir apuuyé sur le "OK" suivant la validation de la référence, rien ne se passait..
Je m'avoue vaincu..
 

Pièces jointes

  • formu_gest_2.zip
    114.5 KB · Affichages: 55

Hervé

XLDnaute Barbatruc
Re : [VBA] Userform à partir d'une BDD répartie sous plusieurs onglets

salut

tiens, je me rends compte que ma pièce jointe de l'autre soir n'est pas passé.

comme je te le disais, ton code renvoi les cellules vers les controles, pour le moment tu cherches à alimenter l'usf avec les données déjà connues, puis tu complètera les infos manquantes, nom, date, etc... et enfin tu renverra le tout dans la feuille "formulaire de prêt"

pour alimenter l'usf :

Code:
Private Sub CommandButton1_Click()
Dim ws As Worksheet
Dim c As Range

If TextBox1 = "" Then Exit Sub

For Each ws In Worksheets
    If ws.Name Like Str_Type & "*" Then
        With ws
            Set c = .Columns(1).Find(TextBox1)
            If Not c Is Nothing Then Exit For
        End With
    End If
Next ws

If c Is Nothing Then
    MsgBox "Référence non trouvée": Exit Sub
Else
    'MsgBox "référence ok"
     Me.designationtxt = c.Offset(0, 3)
      Me.constructeurstxt = c.Offset(0, 2)
       Me.modeletxt = c.Offset(0, 4)
End If

End Sub

a plus
 

Discussions similaires

Statistiques des forums

Discussions
312 107
Messages
2 085 355
Membres
102 874
dernier inscrit
Petro2611