Macro pour récupérer dans un formulaire les lignes qui contienne un identifiant

fb62840

XLDnaute Impliqué
Bonjour à toutes et tous,

Voici ce pourquoi je fais appel à votre aide :
J'ai un formulaire qui me permet de renseigner une base de données :
- sur une feuille base j'enregistre les données d'identité
- sur une feuille tests j'enregistre les résultats de tests multiples (plusieurs lignes pour une même identité)

Je souhaite pouvoir récupérer dans le formulaire les données déjà présentes sur la feuille test lorsque j'utilise le formulaire pour afficher les données d'une personne, ces données doivent apparaître dans des TextBox sur un multipage (3 séries de tests = 3 onglets du multipage, et 5 TextBox sur chaque onglet pour les valeurs du test à renseigner (ou déjà existante). Ainsi je pourrais "reprendre" la saisie commencée mais non terminée pour une identité donnée, au final, en enregistrant il faudrait que seules les nouvelles données (celles qui n'étaient pas présentes dans le classeur sur la feuille tests soient enregistrées).

J'ai essayé de créer une boucle afin de tester si dans une ligne de la colonne A sur la feuille tests on trouvait la référence et dans l'affirmative de reporter les valeurs en colonne pour cette ligne dans les textbox du formulaire mais mon code n'est pas efficace.

Code:
With Sheets("tests")
For i = 1 To .Range("A" & Rows.Count).End(xlUp).Row
    If .Cells(i, 1) = TextBox1 Then
        If .Range("C" & i).Value = Frame1.Caption Then
            If .Range("E" & i).Value = Label15.Caption Then
            End If
        End If
    End If
    If .Cells(ModifLigne, 1) = TextBox1 Then
        If .Range("C" & Mi).Value = Frame1.Caption Then
            If .Range("E" & i).Value = Label16.Caption Then
                TextBox6 = .Range("F" & ModifLigne).Value
            End If
            If .Range("E" & i).Value = Label17.Caption Then
                TextBox7 = .Range("F" & i).Value
            End If
            If .Range("E" & i).Value = Label18.Caption Then
                TextBox8 = .Range("F" & i).Value
            End If
            If .Range("E" & i).Value = Label19.Caption Then
                TextBox9 = .Range("F" & i).Value
            End If
        End If
    End If
Next
End With

Je vous met en pièce-jointe le fichier qui réalise les enregistrements des données que je voudrais pouvoir modifier.

Merci beaucoup pour votre aide.
 

Pièces jointes

  • Test.xls
    154 KB · Affichages: 55
  • Test.xls
    154 KB · Affichages: 57
  • Test.xls
    154 KB · Affichages: 63
Dernière édition:

CHALET53

XLDnaute Barbatruc
Re : Macro pour récupérer dans un formulaire les lignes qui contienne un identifiant

Bonjour,

Un début de solution pour le remplissage (regarde le module 1 qui recherche les numéros de textboxs)

a+
 

Pièces jointes

  • FB62840.xls
    145.5 KB · Affichages: 59
  • FB62840.xls
    145.5 KB · Affichages: 62
  • FB62840.xls
    145.5 KB · Affichages: 61

fb62840

XLDnaute Impliqué
Re : Macro pour récupérer dans un formulaire les lignes qui contienne un identifiant

Bonjour,

C'est excellent, comme toujours, merci beaucoup.

Je pense avoir compris le code, du moins en grande partie, il n'y a qu'une ligne qui demeure véritablement obscure,
c'est celle-ci :

txtbx = tb(serie, cattest, notest) "par exemble tb(1, 1, 1) puis tb(1, 1, 2) 'c'est cette rédaction que je ne comprends pas
je ne comprends pas ce que peut signifier cette rédaction tb(serie, cattest, notest)

Un éclairage serait vraiment le bienvenu.


Code:
With Sheets("tests")
For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
a = .Cells(i, 1)
    If .Cells(i, 1) = TextBox1 Then 'Si on trouve la correspondance
        serie = Right(Cells(i, 4), 1) 'série prend la valeur du dernier caractère de la colonne 4
        cattest = Right(Cells(i, 3), 1) 'cattest prend la valeur du dernier caractère de la colonne 3
        notest = Right(Cells(i, 5), 1) 'notest prend la valeur du dernier caractère de la colonne 5
        résult = Cells(i, 6) 'result prend la valeur du contenu de la colonne 6
        Call test 'Me semble permettre de boucler sur toutes les textbox (à partir de la TextBox5)
' Stop
        
txtbx = tb(serie, cattest, notest) "par exemble tb(1, 1, 1) puis tb(1, 1, 2) 'c'est cette rédaction que je ne comprends pas
       
        Controls("textbox" & txtbx) = résult '
'Je perçois bien que 

        End If
Next

Code:
Sub test()
n = 4
For m = 1 To 3
'Stop
For j = 1 To 5 'test 1, test 2, test 3, test 4, test 5
For k = 1 To 5 'Test V1, Test V2, Test V3, Test V4, Test V5
n = n + 1 'on attribue à n la valeur 5 
tb(m, j, k) = n 'ainsi tb(m, j, k) à la première itération c'est la TextBox5 puis TextBox6... jusqu'à la dernière TextBox

Next k
Next j
Next m
End Sub
 

CHALET53

XLDnaute Barbatruc
Re : Macro pour récupérer dans un formulaire les lignes qui contienne un identifiant

bonjour,

J'ai défini un tableau à trois dimensions : tb(3,5,5) représentant toutes les combinaisons.
Définition en Public pour être exploitable par toutes les procédures( notamment le userform8)
La procédure test remplit les numéros de Textbox correspondant à toutes les combinaisons possibles dans le tb (m,j,k) (important de ne pas modifier l'ordre de tes textboxs dans le userform)
m correspond à série : serie dans tb(serie,cattest,notest)
k correspond à Version de test : cattest dans tb(serie,cattest,notest)
j correspond à numéro de test : notest dans tb(serie,cattest,notest)
Ainsi tb(1,2,1) prend la valeur 10 et correspond à la textbox10

txtbx = tb(serie, cattest, notest)

lorsque je lis la feuille Tests et si la condition est vérifiée, je récupère (voir procédure)
le numéro de série : serie (exemple : 1)
le numéro de version : cattest (exemple : 2)
le numéro de test : notest (exemple : 1)

txtbx=tb(serie, cattest, notest) devient txtbx= tb(1,2,1) qui a récupéré la valeur 10 dans la procédure Test ci-dessus

Je reconstruis le nom du textbox :
Controls("textbox" & txtbx) devient Textbox10 et je renseigne le résultat

est-ce plus clair ?

a+
 

fb62840

XLDnaute Impliqué
Re : Macro pour récupérer dans un formulaire les lignes qui contienne un identifiant

Re-bonjour,

Je pensais qu'effectivement il s'agissait d'une array mais je ne voyais pas comment le code l'utilisait.
les explications données sont on ne peut plus claires, c'est vraiment ce que j'aime bien dans les forums car le plus souvent on peut faire appel à vous pour progresser dans la compréhension des codes (espérant ainsi devoir moins vous solliciter à l'avenir).

Merci beaucoup.

Ce code va me simplifier considérablement la vie car j'étais parti sur une autre piste du type:
valeur de cette textbox = valeur de la cellule... et avec plus d'une centaine de textbox le code allait mesurer des km...

Je pensais bien qu'on pouvait faire mieux et la preuve en est faite

bonjour,

J'ai défini un tableau à trois dimensions : tb(3,5,5) représentant toutes les combinaisons.
Définition en Public pour être exploitable par toutes les procédures( notamment le userform8)
La procédure test remplit les numéros de Textbox correspondant à toutes les combinaisons possibles dans le tb (m,j,k) (important de ne pas modifier l'ordre de tes textboxs dans le userform)
m correspond à série : serie dans tb(serie,cattest,notest)
k correspond à Version de test : cattest dans tb(serie,cattest,notest)
j correspond à numéro de test : notest dans tb(serie,cattest,notest)
Ainsi tb(1,2,1) prend la valeur 10 et correspond à la textbox10

txtbx = tb(serie, cattest, notest)

lorsque je lis la feuille Tests et si la condition est vérifiée, je récupère (voir procédure)
le numéro de série : serie (exemple : 1)
le numéro de version : cattest (exemple : 2)
le numéro de test : notest (exemple : 1)

txtbx=tb(serie, cattest, notest) devient txtbx= tb(1,2,1) qui a récupéré la valeur 10 dans la procédure Test ci-dessus

Je reconstruis le nom du textbox :
Controls("textbox" & txtbx) devient Textbox10 et je renseigne le résultat

est-ce plus clair ?

a+
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin