[VBA] Construire userform et récupérer valeur d'une liste déroulante dans une cellule

nat54

XLDnaute Barbatruc
Bonjour,

Ci-dessous mon code :

Code:
Sub Construire_fichiers()
 
    ''' Boucle sur l'onglet Mapping
    FinTableauMapping = Sheets("Mapping").Range("A" & "65535").End(xlUp).Row
    For i = 2 To FinTableauMapping
    FichierTraite = Workbooks("Macro_TdB_RH_automatisé.xls").Sheets("Mapping").Range("A" & i).Value
    PathFichier = Workbooks("Macro_TdB_RH_automatisé.xls").Sheets("Mapping").Range("B" & i) & FichierTraite
    CodePole = Workbooks("Macro_TdB_RH_automatisé.xls").Sheets("Mapping").Range("c" & i).Value
 
    Dim F_CurrentCata As Workbook
    Application.DisplayAlerts = False
    Set F_CurrentCata = Workbooks.Open(PathFichier)
 
    ''' Test sur pôle 3945 (à voir plus tard pour une boucle)
    'Workbooks.Open Filename:= _
    '"R:\ECHANGE\Tableau_de_bord_RH\3945 - PEDIATRIE\TdB_RH_3945_année_2011-2012.xls", _
    'WriteResPassword:="wxcvbn", _
    'IgnoreReadOnlyRecommended:=True
 
       
    ''' Déprotéger classeur
   Application.Run "'" & FichierTraite & "'!DeProtegeClasseur"
  
   
    ''' Rendre visible les onglets d'export
    With Workbooks(FichierTraite)
        .Sheets("export_HUS_abs").Visible = True
        .Sheets("export_HUS_gestor").Visible = True
        .Sheets("export_abs_N-1").Visible = True
        .Sheets("export_gestor_N-1").Visible = True
    End With
   
    ''' Pour moyenne absentéisme HUS
    Sheets("export_HUS_abs").Select
    Range("a2:u" & Range("u65536").End(xlUp).Offset(1, 0).Row).Select
    Selection.ClearContents
    Windows("Export_BO_ABS_HUS.xls").Activate
    Range("a1:u" & Range("u65536").End(xlUp).Offset(1, 0).Row).Select
    Selection.Copy
    Windows(FichierTraite).Activate
    Sheets("export_HUS_abs").Select
    Range("A65536").End(xlUp).Select
    ActiveSheet.Paste
   
   
    ''' Pour moyenne gestor HUS
    Windows("Export_BO_GESTOR_HUS.xls").Activate
    Range("a1:k" & Range("k65536").End(xlUp).Offset(0, 0).Row).Select
    Selection.Copy
    Windows(FichierTraite).Activate
    Sheets("export_HUS_gestor").Select
    Range("A65536").End(xlUp).Select
    ActiveSheet.Paste
   
  
    ''' Pour absentéisme du pôle test 3945 (à voir pour une boucle plus tard)
    Windows(FichierTraite).Activate
    Sheets("export_abs").Select
    Range("a2:ad" & Range("ad65536").End(xlUp).Offset(1, 0).Row).Select
    Selection.ClearContents
    Windows("Export_BO_ABS_nominatif.xls").Activate
    Selection.AutoFilter Field:=4, Criteria1:=CodePole  'field 4 = colonne D, pôle 3945
    Range("a2:ad10000").Select
    Selection.Copy
    Windows(FichierTraite).Activate
    Sheets("export_abs").Select
    Range("a2:ad" & Range("ad65536").End(xlUp).Offset(1, 0).Row).Select
    ActiveSheet.Paste
 
   
   
     ''' Pour gestor du pôle test 3945 (à voir pour une boucle plus tard)
    Windows("Export_BO_GESTOR_nominatif.xls").Activate
    Selection.AutoFilter Field:=5, Criteria1:=CodePole  'field 5 = colonne E, pôle 3945
    Range("A2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows(FichierTraite).Activate
    Sheets("export_gestor").Select
    Range("A" & Range("a65536").End(xlUp).Offset(1, 0).Row).Select
    ActiveSheet.Paste
 
[h=1][SIZE=3]XXXXXXXXXXXX[/SIZE][/h] 
    ''' Reprotéger classeur
    Application.Run "'" & FichierTraite & "'!ProtegeClasseur"
   
   
    ''' Masquer les onglets export HUS (gestor et abs), export N-1 (gestor et abs)
    Sheets("export_HUS_abs").Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("export_HUS_gestor").Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("export_abs_N-1").Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("export_gestor_N-1").Select
    ActiveWindow.SelectedSheets.Visible = False
   
     
    ''' Sauvegarder le TdB RH
    ActiveWorkbook.Close True 'true = sauvegarde les changements
 
 
    ''' On passe au pôle suivant
    Next
   
   
    ''' Fermer les classeurs d'export
    Windows("Export_BO_ABS_HUS.xls").Activate
    ActiveWorkbook.Close False
    Windows("Export_BO_GESTOR_HUS.xls").Activate
    ActiveWorkbook.Close False
    Windows("Export_BO_ABS_nominatif.xls").Activate
    ActiveWorkbook.Close False
    Windows("Export_BO_GESTOR_nominatif.xls").Activate
    ActiveWorkbook.Close False
 
End Sub




A la place des
[h=1]XXXXXXXXXXXX[/h]
j’aimerai voir s’afficher un userform avec une liste déroulante affichant

janvier
février
mars
avril
mai
juin
juillet
août
sept
oct
nov
dec

et que ce choix soit transposé en cellule O1 de l’onglet ABS_pole


Je sais construire un userform
http://www.heberger-image.fr

mais je ne sais pas comment l'afficher à l'endroit XXXXXXXXXXXX
Dans la propriété RowSource de la ComboBox1 j'ai mis
Accueil!i3:t3
(qui correspond au tableau des mois ci-dessus )

mais déjà ça ne m'affiche que janvier

Puis pour récupérer la valeur, je variabilise ChoixMois
Code:
Private Sub ComboBox1_Change()
ChoixMois = ComboBox1.Value
End Sub
Code:
Private Sub Validation_mois_Click()
Unload Me
End Sub

mais je ne sais pas comment affecter le résultat à la cellule O1


Merci d'avance pour votre aide !
 

MichD

XLDnaute Impliqué
Re : [VBA] Construire userform et récupérer valeur d'une liste déroulante dans une ce

Bonjour,
Dans la propriété RowSource de la ComboBox1 j'ai mis
Accueil!i3:t3
(qui correspond au tableau des mois ci-dessus )

Laisse la propriété "RowSource" totalement vide.
Me.combobox1.List = application.Transpose(range("Accueil!i3:t3"))
 

nat54

XLDnaute Barbatruc
Re : [VBA] Construire userform et récupérer valeur d'une liste déroulante dans une ce

Re,

Merci mais comment intégrer votre code ?

Code:
Private Sub ComboBox1_Change()
Me.ComboBox1.List = Application.Transpose(Range("Accueil!i3:t3"))
ChoixMois = ComboBox1.Value
End Sub
ne marche pas
 

MichD

XLDnaute Impliqué
Re : [VBA] Construire userform et récupérer valeur d'une liste déroulante dans une ce

Désolé, je n'ai pas lu tout le code que tu as publié.

Si tu veux affecter à une cellule quelconque le contenu d'un combobox
après avoir choisi l'item que tu désires, la ligne de code est relativement simple.

Worksheets("NomDeTaFeuille").Range("A1").Value = Userform1.Combobox1.Value

Modifie le nom de la feuille, l'adresse de la cellule et le nom du formulaire et
du combobox selon ton application.

Si tu désires autre chose, essaie d'être plus clair dans l'énoncé de la question!
 

nat54

XLDnaute Barbatruc
Re : [VBA] Construire userform et récupérer valeur d'une liste déroulante dans une ce

Bonjour,

Alors je vais essayer d'être plus claire :

1/ Je suis dans mon fichier Macro_TdB_RH_automatisé.xls

2/ Je lance la macro Construire_fichiers() dont le long code se trouve dans mon 1er message
En gros j'ai 4 fichiers Excel (des extractions de Business Objects) que je dispatche dans 31 fichiers Tableau de Bord

Il me manque juste un bout où je dois indiquer le mois dans la cellule O1 de l'onglet ABS_pole dans chacun des Tableaux de Bord.

De ce fait, j'avais pensé à faire un userform avec liste déroulante où je choisis le mois :
les mois se trouve sur la feuille Accueil dans les cellules I3 à T3
Le choix doit s'affecter dans la cellule O1 (qui se trouve donc dans un autre fichier que celui où je lance la macro)

Je vais essayer de faire quelquechose avec ta proposition de code
mais déjà je n'arrive pas à donner les valeurs de liste déorulante :(
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : [VBA] Construire userform et récupérer valeur d'une liste déroulante dans une ce

Bonjour,

pour alimenter ta combo :
Code:
Option Explicit
Private Sub UserForm_Initialize()
ComboBox1.Column = Sheets("NomFeuille").Range("I3:T3").Value
End Sub

le classeur où se trouve tes données doit être le classeur actif...

bonne journée
@+
 

nat54

XLDnaute Barbatruc
Re : [VBA] Construire userform et récupérer valeur d'une liste déroulante dans une ce

Bonjour Pierrot,

Merci !

En fait au lancement de la macro je veux ouvrir le USF, choisir le mois, le garder en mémoire et pouvoir l'insérer dans les tableaux de bord juste avant la phase de reprotection de ce tableau de bord

http://www.heberger-image.fr

Je pensais faire comme suit

Code:
Option Explicit
Private Sub UserForm_Initialize()
''' Création des valeurs contenues dans la liste déroulante
ComboBox1.Column = Sheets("Accueil").Range("I3:T3").Value
End Sub

Code:
Private Sub Validation_mois_Click()
''' On garde en mémoire ce qui a été choisi dans la liste déroulante
ChoixMois = UserForm1.ComboBox1.Value
End Sub

Mais au clic sur ok, cf imprime-écran de l'USF, ca me met
Erreur de compilation - variable non définie
 
Dernière édition:

nat54

XLDnaute Barbatruc
Re : [VBA] Construire userform et récupérer valeur d'une liste déroulante dans une ce

Re,

oups, quand on n'a pas les bases c'est compliqué (formation VBA en septembre normalement..)

Code:
Option Explicit
Private Sub UserForm_Initialize()
''' Création des valeurs contenues dans la liste déroulante
ComboBox1.Column = Sheets("Accueil").Range("I3:T3").Value
End Sub
Private Sub Validation_mois_Click()
''' On garde en mémoire ce qui a été choisi dans la liste déroulante
Dim ChoixMois As String
ChoixMois = UserForm1.ComboBox1.Value
End Sub

==> 1ère partie ok
 

nat54

XLDnaute Barbatruc
Re : [VBA] Construire userform et récupérer valeur d'une liste déroulante dans une ce

La 1ère partie est fonctionnelle,
reste juste à affecter la valeur choisie en cellule O1

J'ai mis
Code:
    ''' Insérer le mois 
    Windows(FichierTraite).Activate
    Sheets("ABS_Pole").Range("O1").Value = UserForm1.ComboBox1.Value

Erreur : l'indice n'appartient pas à la sélection

ps : on touche au but c'est le dernier souci sur ma macro ! :)



Le code global

Code:
Sub Construire_fichiers()
    
    UserForm1.Show
    
        
    ''' Boucle sur l'onglet Mapping
    FinTableauMapping = Sheets("Mapping").Range("A" & "65535").End(xlUp).Row
    For i = 2 To FinTableauMapping
    FichierTraite = Workbooks("Macro_TdB_RH_automatisé.xls").Sheets("Mapping").Range("A" & i).Value
    PathFichier = Workbooks("Macro_TdB_RH_automatisé.xls").Sheets("Mapping").Range("B" & i) & FichierTraite
    CodePole = Workbooks("Macro_TdB_RH_automatisé.xls").Sheets("Mapping").Range("c" & i).Value
    Dim F_CurrentCata As Workbook
    Application.DisplayAlerts = False
    Set F_CurrentCata = Workbooks.Open(PathFichier)
        
    ''' Déprotéger classeur
   Application.Run "'" & FichierTraite & "'!DeProtegeClasseur"
   
    
    ''' Rendre visible les onglets d'export
    With Workbooks(FichierTraite)
        .Sheets("export_HUS_abs").Visible = True
        .Sheets("export_HUS_gestor").Visible = True
        .Sheets("export_abs_N-1").Visible = True
        .Sheets("export_gestor_N-1").Visible = True
    End With
    
    
    ''' Pour moyenne absentéisme HUS
    Sheets("export_HUS_abs").Select
    Range("a2:u" & Range("u65536").End(xlUp).Offset(1, 0).Row).Select
    Selection.ClearContents
    Windows("Export_BO_ABS_HUS.xls").Activate
    Range("a1:u" & Range("u65536").End(xlUp).Offset(1, 0).Row).Select
    Selection.Copy
    Windows(FichierTraite).Activate
    Sheets("export_HUS_abs").Select
    Range("A65536").End(xlUp).Select
    ActiveSheet.Paste
    
    
    ''' Pour moyenne gestor HUS
    Windows("Export_BO_GESTOR_HUS.xls").Activate
    Range("a1:k" & Range("k65536").End(xlUp).Offset(0, 0).Row).Select
    Selection.Copy
    Windows(FichierTraite).Activate
    Sheets("export_HUS_gestor").Select
    Range("A65536").End(xlUp).Select
    ActiveSheet.Paste
    
   
    ''' Pour absentéisme du pôle test 3945 (à voir pour une boucle plus tard)
    Windows(FichierTraite).Activate
    Sheets("export_abs").Select
    Range("a2:ad" & Range("ad65536").End(xlUp).Offset(1, 0).Row).Select
    Selection.ClearContents
    Windows("Export_BO_ABS_nominatif.xls").Activate
    Selection.AutoFilter Field:=4, Criteria1:=CodePole  'field 4 = colonne D, pôle 3945
    Range("a2:ad10000").Select
    Selection.Copy
    Windows(FichierTraite).Activate
    Sheets("export_abs").Select
    Range("a2:ad" & Range("ad65536").End(xlUp).Offset(1, 0).Row).Select
    ActiveSheet.Paste
        
    ''' Pour gestor du pôle test 3945 (à voir pour une boucle plus tard)
    Windows("Export_BO_GESTOR_nominatif.xls").Activate
    Selection.AutoFilter Field:=5, Criteria1:=CodePole  'field 5 = colonne E, pôle 3945
    Range("A2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows(FichierTraite).Activate
    Sheets("export_gestor").Select
    Range("A" & Range("a65536").End(xlUp).Offset(1, 0).Row).Select
    ActiveSheet.Paste

    ''' Insérer le mois pour que les graphiques s'auto-adaptent
    Windows(FichierTraite).Activate
    Sheets("ABS_Pole").Range("O1").Value = UserForm1.ComboBox1.Value
        
    ''' Reprotéger classeur
    Application.Run "'" & FichierTraite & "'!ProtegeClasseur"
    
    
    ''' Masquer les onglets export HUS (gestor et abs), export N-1 (gestor et abs)
    Sheets("export_HUS_abs").Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("export_HUS_gestor").Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("export_abs_N-1").Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("export_gestor_N-1").Select
    ActiveWindow.SelectedSheets.Visible = False
    
      
    ''' Sauvegarder le TdB RH
    ActiveWorkbook.Close True 'true = sauvegarde les changements
 
    ''' On passe au pôle suivant
    Next
    
    
    ''' Fermer les classeurs d'export
    Windows("Export_BO_ABS_HUS.xls").Activate
    ActiveWorkbook.Close False
    Windows("Export_BO_GESTOR_HUS.xls").Activate
    ActiveWorkbook.Close False
    Windows("Export_BO_ABS_nominatif.xls").Activate
    ActiveWorkbook.Close False
    Windows("Export_BO_GESTOR_nominatif.xls").Activate
    ActiveWorkbook.Close False
End Sub
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : [VBA] Construire userform et récupérer valeur d'une liste déroulante dans une ce

Re,

quelle ligne en jaune lors du déboggage ? vérifie le nom des objets ? ta variable "FichierTraite" contient le bon nom ainsi que l'extension "xls" ?.
 

nat54

XLDnaute Barbatruc
Re : [VBA] Construire userform et récupérer valeur d'une liste déroulante dans une ce

Celle-là en jaune : Sheets("ABS_Pole").Range("O1").Value = UserForm1.ComboBox1.Value
sûrement un problème de syntaxe ?
d'ailleurs, du coup en partant sur l'idée de MichD je n'ai pas utilisé la variable ChoixMois...

Peut-être que l'imprime-écran t'aidera :
http://www.heberger-image.fr

Oui FichierTraite contient le bon nom avec l'extension puisque toute la macro fonctionne, sauf ce petit bout
 
Dernière édition:

nat54

XLDnaute Barbatruc
Re : [VBA] Construire userform et récupérer valeur d'une liste déroulante dans une ce

Re,

En mettant
Code:
Sheets("ABS_Pole").Range("O1").Value = ChoixMois

Pas de debogage, mais ChoixMois est vide.. alors qu'au lancement userform je vois bien le mois choisi dedans.. :?:
 

nat54

XLDnaute Barbatruc
Re : [VBA] Construire userform et récupérer valeur d'une liste déroulante dans une ce


Ce qui est bizarre c'est que sur cette ligne ça envoit le code
Private Sub UserForm_Initialize()
''' Création des valeurs contenues dans la liste déroulante
ComboBox1.Column = Sheets("Accueil").Range("I3:T3").Value
End Sub

sans montrer le usf et en mettant
erreur 9
l'indice n'appartient pas à la sélection


Je ne sais pas quand faire apparaître le USF du coup..

-----------------

Grâce à la fenêtre variable que je ne connaissais pas, j'ai remarqué que ChoixMois se vide après cette ligne
Code:
 UserForm1.Show
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
110

Statistiques des forums

Discussions
312 023
Messages
2 084 715
Membres
102 637
dernier inscrit
TOTO33000