Remplir tableau à partir d'un UserForm

Bonjour à tous,

Je viens ici après des heures de recherche sur le net...

J'explique mon problème.

J'ai un UserForm avec une Combobox que je rempli à partir de données contenues dans des cellules d'un tableau. Jusque là pas de soucis.

Je rempli ensuite différentes cases de mon formulaire... toujours pas de soucis !

Maintenant, à la validation du formulaire, je voudrais remplir différentes cases de ma feuille avec les données. Mais pas n'importe où...

Je voudrais prendre la valeur validée dans la Combobox, la rechercher dans la feuille et remplir la colonne qui contient cette valeur sur mon classeur.

Et là je bloque...

J'espère avoir été assez clair.

Bonjour

Cordialement

Bonjour et bienvenue,

Un fichier aurait été apprécié.

Je remplace quand je peux les userform par un onglet spécifiquement dédié à la saisie, plus facile à contruire en terme de formats et de listes déroulantes. Et une macro un peu passe-partout que j'ai déjà proposée ici : https://forum.excel-pratique.com/viewtopic.php?p=735309#p735309

Dans son principe ... je crée un onglet "bien présenté", j'y mets toutes les conditions de format et de validation par liste des données, j'identifie chaque valeur avec un nom _colXX où XX est le numéro de la colonne de la base de données et ensuite je lui colle la macro générique.

edit : bonjour Dan, je plussoie ...

Merci pour vos réponses.

Je posterai le fichier ce soir car je n'y ai pas accès actuellement.

Bonsoir à tous,

Comme promis voici mon fichier.

Merci d'avance pour votre aide

282testsbk.xlsm (90.63 Ko)

edit

Merci pour ton fichier ...

Ajoute ce code :

Private Sub Validation_Click()
Dim dossard As Range
    Set dossard = Sheets("SALS Ad. Finale").Rows(3).Find(ComboBox1.Text, LookIn:=xlValues)
    If dossard Is Nothing Then
        MsgBox "Dossard non trouvé !"
    Else
        With Sheets("SALS Ad. Finale")
            .Cells(4, dossard.Column) = AT1.Value
            ' etc...
        End With
    End If
End Sub

je te laisse compléter le code pour toutes les cases

ici

capture d ecran 673
94testsbk.xlsm (90.69 Ko)

Au Top ! Je vais essayer ceci.

Et dire que j(ai passé des heures sur le net pour trouver...

Merci Steelson !

Je te ferai quand même une version "onglet" à la place de l'userform ... tu jugeras de l'intérêt.

re

Comme j'ai fait le boulot, à tester

Private Sub Validation_Click()
Dim i As Byte, col As Byte
For i = 1 To 86 Step 18
    col = Range("E" & i + 2 & ":S" & i + 2).Find(ComboBox1.Value, LookIn:=xlValues).Column
    Cells(i + 3, col) = AT1
    Cells(i + 4, col) = AT2
    Cells(i + 5, col) = AT3
    Cells(i + 6, col) = AT4
    Cells(i + 7, col) = AT5
    Cells(i + 9, col) = AA1
    Cells(i + 10, col) = AA2
    Cells(i + 11, col) = AA3
    Cells(i + 12, col) = AA4
    Cells(i + 13, col) = AA5
Next i
End Sub

J'ai supposé que :

  • les juges sont toujours au nombre de 5
  • il n'y a pas plus de dossards. Le cas échéant, changer le S qui dans votre fichier est la dernière colonne comportant des dossards.
  • les tableaux à compléter sont toujours identiques. idem pour les lignes vides entre les tableaux
Crdlt

Je te ferai quand même une version "onglet" à la place de l'userform ... tu jugeras de l'intérêt.

Est ce que ce ne serais pas source d'erreur au remplissage avec la version onglet ? De plus, je dois répéter cet "onglet" pour toutes les séries existantes (oui car je n'ai présenté ici qu'une seule série dans mon tableau.

Enfin, j'attends ta version pour voir...

Merci encore de toute l'aide que tu m'apportes

re

J'ai supposé que :

  • les juges sont toujours au nombre de 5
  • il n'y a pas plus de dossards. Le cas échéant, changer le S qui dans votre fichier est la dernière colonne comportant des dossards.
  • les tableaux à compléter sont toujours identiques. idem pour les lignes vides entre les tableaux
Crdlt

Merci Dan, mais les juges sont prévus jusqu'à 5. Ce n'est pas toujours le cas car il peut y en avoir moins...

Est ce que ce ne serais pas source d'erreur au remplissage avec la version onglet ?

Pourquoi ?

Comme promis la version où les notes sont introduites sur un onglet dédié.

Je ne sais pas combien de temps cela t'a pris pour dessiner le userform, mois cela s'est fauit juste par recopie = 5 mn max.

Ensuite mise en place de la formule DECALER et la macro de ... pas beaucoup de lignes !

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cel As Range, i%, j%
    If Intersect(Target, Union(Range("NoteT"), Range("NoteA"))) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    On Error GoTo fin
        For Each cel In Intersect(Target, Union(Range("NoteT"), Range("NoteA")))
            i = cel.Row - 4 + Cells(7, cel.Column)
            j = 5 + Cells(4, 3)
            Sheets("SALS Ad. Finale").Cells(i, j).Value = cel.Value
            cel.FormulaR1C1 = "=OFFSET('SALS Ad. Finale'!R[-4]C5,R7C,R4C3)"
        Next
fin:
    Application.EnableEvents = True
End Sub
126testsbk.xlsm (94.57 Ko)

re

Merci Dan, mais les juges sont prévus jusqu'à 5. Ce n'est pas toujours le cas car il peut y en avoir moins...

Ok mais comme Steelson il a prit le "lead" sur le sujet et afin de ne pas interférer je vous laisse continuer avec lui.

Cordialement

Oh non Dan, j'aime bien aussi différentes visions ... mais nous nous rejoignions sur la première proposition.

Amicalement ...

En tout cas, merci à tous les deux de vous donner autant de mal...

Questions bonus...

Je vais devoir utiliser ce même userform pour la validation de différentes catégories.

Est ce qu'il y aurait un moyen de remplir ma Combobox en fonction de la feuille active au moment où j'appelle mon userform ?

Et du coup comment dois-je modifier mon code pour ce soit l'activesheet qui se remplisse (ne pas être obligé de la nommer dans mon code).

Et enfin, si je souhaite vider mon userform en utilisant le bouton RESET, existe t-il une formule magique pour vider toutes les textbox (attention, les libellés technic et artistic sont aussi des textbox mais je ne veux pas les vider...) ?

Merci pour tout.

Je vais devoir utiliser ce même userform pour la validation de différentes catégories.

Est ce qu'il y aurait un moyen de remplir ma Combobox en fonction de la feuille active au moment où j'appelle mon userform ?

Et du coup comment dois-je modifier mon code pour ce soit l'activesheet qui se remplisse (ne pas être obligé de la nommer dans mon code).

Remplace Sheets("SALS Ad. Finale") par Activesheet

Et enfin, si je souhaite vider mon userform en utilisant le bouton RESET, existe t-il une formule magique pour vider toutes les textbox (attention, les libellés technic et artistic sont aussi des textbox mais je ne veux pas les vider...) ?

Je ne connais pas de formule magique ... il faut faire pour chaque textbox
=""

Et enfin, si je souhaite vider mon userform en utilisant le bouton RESET, existe t-il une formule magique pour vider toutes les textbox (attention, les libellés technic et artistic sont aussi des textbox mais je ne veux pas les vider...) ?

Je ne connais pas de formule magique ... il faut faire pour chaque textbox
=""

J'ai trouvé un "truc" qui permet de vider mon userform plus rapidement qu'en passant par le "vidage de chaque textbox...

Unload Me
UserForm.show

Et voilà, le tour est joué...

Bonjour

@Steelson

Oh non Dan, j'aime bien aussi différentes visions ...

Ok. J'essaie toujours de ne pas interférer... ou de participer à deux sur un même fil. Souvent le demandeur s'y retrouve plus

Bon à la relecture du fil...

J'ai trouvé un "truc" qui permet de vider mon userform plus rapidement qu'en passant par le "vidage de chaque textbox...

C'est peut la méthode en dur cela... Vous déchargez puis vous remettez...

Essayez le code ci-dessous

Private Sub Reset_Click()
Dim txtb()
Dim i As Byte
txtb = Array("AT1", "AT2", "AT3", "AT4", "AT5", "BT1", "BT2", "BT3", "BT4", "BT5", _
    "CT1", "CT2", "CT3", "CT4", "CT5", "DT1", "DT2", "DT3", "DT4", "DT5", "ET1", "ET2", "ET3", "ET4", "ET5", _
    "AA1", "AA2", "AA3", "AA4", "AA5", "BA1", "BA2", "BA3", "BA4", "BA5", "CA1", "CA2", "CA3", "CA4", "CA5", _
    "DA1", "DA2", "DA3", "DA4", "DA5", "EA1", "EA2", "EA3", "EA4", "EA5")

For i = 0 To UBound(txtb)
    Controls(txtb(i)).Value = ""
Next i
End Sub

Il y aurait moyen de faire plus court encore...

Cordialement

Rechercher des sujets similaires à "remplir tableau partir userform"