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

Microsoft 365 Userform vers Tableau

eric72

XLDnaute Accro
Bonsoir à tous,
Je tente de résoudre un problème jamais rencontré
J'ai un userform et j'aimerais qu'en fonction de l'année que je saisis, le tableau choisi pour exporter mes données soit sélectionné
Exemple si je saisie 2023 j'aimerais que l'export soit vers TbObj2023, si 2024 vers TbObj2024.
J'ai tenté en concatenant mais sans succès.
L'un d'entre vous a-t-il déjà rencontré et résolu ce cas.
Merci beaucoup pour votre dévouement.
Eric
 
Solution
Bonjour à tous

@eric72

Je te propose ceci plus digeste dans ton usf

VB:
Private Sub Cbrecherche_afterupdate()
Dim tb As ListObject, j&, n%, lig%
Set tb = Sheets("Base Objectif").ListObjects("tbobj" & Me.Cbrecherche)
n = 0
lig = 1
With tb
    For j = 1 To 10
        Me.Controls("CbComm" & j) = .DataBodyRange.Cells(j, .ListColumns(1).Index).Value
    Next j
    For j = 2 To 121
        Select Case j
            Case 14:    n = 12:    lig = 2
            Case 26:    n = 24:    lig = 3
            Case 38:    n = 36:    lig = 4
            Case 50:    n = 48:    lig = 5
            Case 62:    n = 60:    lig = 6
            Case 74:    n = 72:    lig = 7
            Case 86:    n = 84:    lig = 8
            Case 98:    n = 96...

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@eric72

Je te propose ceci plus digeste dans ton usf

VB:
Private Sub Cbrecherche_afterupdate()
Dim tb As ListObject, j&, n%, lig%
Set tb = Sheets("Base Objectif").ListObjects("tbobj" & Me.Cbrecherche)
n = 0
lig = 1
With tb
    For j = 1 To 10
        Me.Controls("CbComm" & j) = .DataBodyRange.Cells(j, .ListColumns(1).Index).Value
    Next j
    For j = 2 To 121
        Select Case j
            Case 14:    n = 12:    lig = 2
            Case 26:    n = 24:    lig = 3
            Case 38:    n = 36:    lig = 4
            Case 50:    n = 48:    lig = 5
            Case 62:    n = 60:    lig = 6
            Case 74:    n = 72:    lig = 7
            Case 86:    n = 84:    lig = 8
            Case 98:    n = 96:    lig = 9
            Case 110:   n = 108:   lig = 10
        End Select
        Me.Controls("TextBox" & j) = .DataBodyRange.Cells(lig, .ListColumns(j - n).Index).Value
    Next j
End With
End Sub

Merci de ton retour

@Phil69970
 

eric72

XLDnaute Accro
Bonjour Phil69970,
En effet ça fonctionne bien et c'est beaucoup moins lourd, pour ma compréhension pouvez-vous m'expliquer:

Select Case j
Case 14: n = 12: lig = 2

Merci beaucoup à tous pour le boulot que vous faites, sans vous on ne pourrait pas progresser!!!
Eric
 

Phil69970

XLDnaute Barbatruc
@eric72

Si tu regardes bien ton USF est composé de :

1 combobox pour le nom du commercial et 12 textbox pour les valeurs de chaque mois de l'année
Et sur 10 lignes de suite c'est pareil



La 1ere boucle rempli les combobox (facile à comprendre)
For j = 1 To 10
Me.Controls("CbComm" & j) = .DataBodyRange.Cells(j, .ListColumns(1).Index).Value
Next j

Je vais essayer de t'expliquer la 2eme boucle avec
Case 14: n = 12: lig = 2 .......

La 2eme boucle rempli les textbox mais pour passer d'une ligne à la suivante

1ere ligne et 1er textbox de la 1ere ligne ==>
TextBox2.Value = .DataBodyRange.Cells(1, .ListColumns(2).Index).Value
TextBox3.Value = .DataBodyRange.Cells(1, .ListColumns(3).Index).Value
..... pas de problème pour remplir la 1ere ligne du textbox2 au texbox13

2eme ligne et 1er textbox de la 2eme ligne==>
TextBox14.Value = .DataBodyRange.Cells(2, .ListColumns(2).Index).Value
TextBox15.Value = .DataBodyRange.Cells(2, .ListColumns(3).Index).Value
........ Il faut que les indices suivent et correspondent au bon textbox
Me.Controls("TextBox" & j) = .DataBodyRange.Cells(lig, .ListColumns(j - n).Index).Value
C'est donc un peu de math pour ajuster les indices ....

Quand on arrive au textbox 14 alors lig =2 donc
.DataBodyRange.Cells(lig, vaut .DataBodyRange.Cells(2,

Et (j-n) vaut 14-12 donc 2
ListColumns(j - n) vaut ListColumns(2)

Ce qui donne au final pour la textbox 14
Me.Controls("TextBox" & j) = .DataBodyRange.Cells(lig, .ListColumns(j - n).Index).Value

Me.Controls("TextBox" &
14) = .DataBodyRange.Cells(2, .ListColumns(14-12).Index).Value
Donc
Me.Controls("TextBox" & 14) = .DataBodyRange.Cells(2, .ListColumns(2).Index).Value


==> TextBox14.Value = .DataBodyRange.Cells(2, .ListColumns(2).Index).Value
etc...... pour toutes les textbox idem.

Je t'ai perdu ?

@Phil69970
 

eric72

XLDnaute Accro
Bonjour Phil69970 et Chti160,
Désolé pour le retard mais j'étais en déplacement!!!
En effet j'ai omis de coché "résolu" et j'en suis navré.
Le résultat est top et bien simplifié.
Merci beaucoup à tous pour votre bonne volonté à toujours aidé les "bricoleurs" comme moi.
Bonne journée et merci encore.
Eric
 

Discussions similaires

Réponses
4
Affichages
544
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…