Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
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 !
 

thunder23

XLDnaute Occasionnel
Re bonjour Danreb,

J'essaye de prendre ta manière pour emplir cette fois des Combobox mais ça me met une erreur 13.
Est-ce que tu aurais une piste sur ce sujet?
 

Pièces jointes

  • combobox.xlsm
    15 KB · Affichages: 6

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

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

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éponses
5
Affichages
272
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…