XL 2019 Faire comuniquer un tabeau Excel avec un Userform

thunder23

XLDnaute Occasionnel
Bonsoir le forum,

Je souhaite que quand j'appelle un Userform celui-ci se rempli des valeurs. Je ne vois que par des Textbox sauf qu'il faut un certain type de boucle et je ne sais pas comment faire.

J'ai mis un fichier en exemple afin de mieux comprendre se que je recherche.

Merci d'avance pour vos réponses ;)
 

Pièces jointes

  • test1.xlsm
    41.6 KB · Affichages: 25
Solution
Bonsoir.
'aurais peut être plutôt mis une ListBox, mais tel que votre UFm est dessiné :
VB:
Option Explicit
Private RngDon As Range, TDon()
Private Sub UserForm_Initialize()
   Dim L&, C&
   Set RngDon = ActiveSheet.[A3:F14]
   TDon = RngDon.Value
   For L = 1 To UBound(TDon, 1)
      Me("Label" & L).Caption = TDon(L, 1)
      For C = 2 To 6
         Me("TextBox" & (L - 1) * 5 + C - 1).Text = TDon(L, C)
         Next C, L
   End Sub
Private Sub CommandButton1_Click()
   Dim L&, C&
   Set RngDon = ActiveSheet.[A3:F14]
   TDon = RngDon.Value
   For L = 1 To UBound(TDon, 1)
      For C = 2 To 6
         If C < 4 Then
            TDon(L, C) = CDate(Me("TextBox" & (L - 1) * 5 + C - 1).Text)
         Else
            TDon(L, C) =...

thunder23

XLDnaute Occasionnel
Bonjour.
N'ayant pas vu dans votre classeur joint au #5 de Feuil3 avec des dates fériées en AJ27:AJ39 pour pouvoir tester, je vous propose cette solution
Bonjour,

ah oups sincèrement désolé de ne pas avoir cette démarche, toutefois l'autre approche est top.
Par contre la fonction weekday devient muette avec la fonction EstFérié est-ce normal?
Voilà comment le code sur mon fichier final
VB:
Lab.Caption = Format(TDon(L, 1), "ddd d")
Lab.ForeColor = IIf(Weekday(TDon(L, 1), vbMonday) = 7, vbRed, vbBlack)
Lab.BackColor = IIf(EstFérié(TDon(L, 1)), &H66FF66, &HCCFFCC)
Lab.ForeColor = IIf(EstFérié(TDon(L, 1)), &HC0, vbBlack)
Lab.Font.Bold = IIf(EstFérié(TDon(L, 1)), True, False)
 

Dranreb

XLDnaute Barbatruc
Mettez l'instruction à la fin si elle doit primer sur les autres
et Lab.Font.Bold = EstFérié(TDon(L, 1)) devrait suffire !
Je trouve aussi que ce serait mieux d'avoir dans une feuille un tableau des couleurs en fonction des codes. Ça vous intéresserait ?
 

thunder23

XLDnaute Occasionnel
Mettez l'instruction à la fin si elle doit primer sur les autres
et Lab.Font.Bold = EstFérié(TDon(L, 1)) devrait suffire !
Je trouve aussi que ce serait mieux d'avoir dans une feuille un tableau des couleurs en fonction des codes. Ça vous intéresserait ?
Ok d'accord, en fait je pense que les deux Forecolor doivent fait doublon et une prend le dessus sur l’autre car je viens de déplacer celle pour le dimanche et ça m'a enlevé la couleur sur le jour férié.

Ahhh oui si c'est possible je suis preneur ! ;)
 

Dranreb

XLDnaute Barbatruc
Il n'y a pas de feuille "BDD" dans votre nouveau classeur
Et par ailleurs la méthode Cells ne supporte pas un objet Range comme 1er argument, il faut un numéro de ligne. Vous devriez mettre Option Explicit au début de vos modules et typer explicitement vos variables.
 

thunder23

XLDnaute Occasionnel
Il n'y a pas de feuille "BDD" dans votre nouveau classeur
Et par ailleurs la méthode Cells ne supporte pas un objet Range comme 1er argument, il faut un numéro de ligne. Vous devriez mettre Option Explicit au début de vos modules et typer explicitement vos variables.

Effectivement dans la précipitation pour faire un classeur test j'ai oublié de nommer la feuille BDD.
Ah d'accord par contre je ne vois pas quoi mettre à la place pour le coup.
L'option explicit est identique que dans la première phrase.
Pour Range , Set Li = Sheets("BDD").Range("B2:C13") ne suffit pas?
 

Dranreb

XLDnaute Barbatruc
En fait c'est probablement ça que vous vouliez faire :
VB:
Private Sub Userform_Initialize()
   Dim Li As Range, h As Integer
   Set Li = Sheets("BDD").Range("B2:C13")
   For h = 1 To 12
      Me("ComboBox" & h).Value = Li(h, 1).Value
      Me("ComboBox" & h + 12).Value = Li(h, 2).Value
      Next h
   End Sub
 

thunder23

XLDnaute Occasionnel
Oui tout à fait !

En fait je notais deux fois le sheets alors que j'ai fais une variable au-dessus :oops:

Par contre si je veux modifier se qui est noté dans le tableau par la Combobox, j'ai juste à inverser le code ?

VB:
Li(h, 1).Value = Me("ComboBox" & h).Value
Li(h, 2).Value = Me("ComboBox" & h + 12).Value
 

thunder23

XLDnaute Occasionnel
Voilà se que ça donne, le seul problème est que ça ne modifie pas le contenu de la cellule.

Est-ce que je suis obliger de faire autrement ?

VB:
Private Sub ComboBox_Change()
        Dim Li As Range, h As Integer
        Set Li = Sheets("BDD").Range("L470:M481")
        For h = 1 To 12
        Li(h, 1).Value = Me("ComboBox" & h).Value
        Li(h, 2).Value = Me("ComboBox" & h + 12).Value
        Next h
End Sub
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Taille UserForm
Réponses
3
Affichages
355

Statistiques des forums

Discussions
312 276
Messages
2 086 711
Membres
103 377
dernier inscrit
fredy45