Récupérer la valeur d'une checkbox pré-rempli dans un nouveau classeur

Bonjour à tous !

Je suis actuellement en stage et travaille sur un projet de qualimétrie. Je possède plusieurs fichiers xls, organisé de la même façon, dans lesquels je dois extraire certaines données, puis les coller dans un nouveau classeur que je pourrais par la suite convertir en csv afin de l'analyser avec python plus tard.

Grâce à ma macro, je peux stocker dans 2 tableaux mémoire différents les données souhaitées, dans le premier le chemin du fichier sélectionné ainsi que son nom et dans le deuxième les données que je souhaite extraire sur chaque fichier. Ces tableaux sont redimensionnés en fonction du nombre de fichier choisi. Une fois chaque fichier analyser, mes tableaux sont collés sur le nouvel excel, l'un a coté de l'autre, pour pouvoir plus facilement le stocké dans un df par la suite et faire quelques visualisations.

En revanche, j'aurais besoin aussi d'extraire certaines valeurs représenté grâce à des checkbox déjà cochée, comme la décision finale du rapport (Accepté, rejeté, reporté) par exemple. Je pensais pouvoir utilisé la méthode Range comme pour les autres données grâce aux noms de chaque checkbox (chaque checkbox est nommé). Le problème est que ces checkbox ne sont rattachées à aucune cellule, et la méthode Range est donc inutilisable car ces checkbox ne sont pas à proprement dit "placées" sur le rapport xls.

J'ai pensé à utilisé la méthode checkbox.value mais elle m'est trop inconnu et je ne sais donc pas trop comment écrire mon code en conséquence.

J'en appelle donc à l'expertise de ce forum pour m'aider, s'il vous plait !

L'idéal serait qu'en fonction de la case coché (Accepté ou rejeté ou reporté), la colonne "Report_decision" du deuxième tableau prenne la valeur sous forme de texte du style (ce code ne marche absolument pas mais c'est explicite) :

If CheckBox("SC_H2_DEC_ACCEPTED").Value = True Then
report_decision = "Accepted"
ElseIf CheckBox("SC_H2_DEC_POSTPONED").Value = True Then
report_decision = "Postponed"
ElseIf Checkbo("SC_H2_DEC_REJECTED").Value = True Then
report_decision = "Rejected"
Else
report_decision = "Unknown"

Je vous laisse mon code complet ci-dessous, je ne peux en revanche pas fournir de fichier des données extraites pour des raisons de confidentialité..

Merci d'avance pour votre aide, j'espère avoir été assez clair.

Sub get_data()

    'Déclaration des variables
    Dim comp_num As String, company_name As String, controller_name As String, inspection_date As String
    Dim Ph_G_C As Integer, Ph_G_maj As Integer, Ph_G_m As Integer, Ph_W_C As Integer, Ph_W_maj As Integer, Ph_W_m As Integer, Ph_R_C As Integer, Ph_R_maj As Integer, Ph_R_m As Integer
    Dim Sc_A_C As Integer, Sc_A_maj As Integer, Sc_A_m As Integer, Sc_A_dfu_C As Integer, Sc_A_dfu_maj As Integer, Sc_A_dfu_m As Integer, Sc_A_nc_C As Integer, Sc_A_nc_maj As Integer, Sc_A_nc_m As Integer
    Dim Sc_R_mp_C As Integer, Sc_R_mp_maj As Integer, Sc_R_mp_m As Integer, Sc_R_m_C As Integer, Sc_R_m_maj As Integer, Sc_R_m_m As Integer, Sc_P_C As Integer, Sc_P_maj As Integer, Sc_P_m As Integer
    Dim report_decision As String
    Dim i As Integer, nombre_fichier As Integer, fichier_choisi As Integer
    Dim nom_fichier As String, chemin_fichier As String
    Dim dialog_fichier As FileDialog
    Dim measures As Integer
    Dim monTab()
    Dim monTabDeDonnee()

    'Desactivation des différents event/alert etc pour une meilleure rapidité
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    'Index pour tableau
    i = 1

    'Selection des fichiers à analyser
    Set dialog_fichier = Application.FileDialog(msoFileDialogFilePicker)
    dialog_fichier.InitialFileName = " "  'chemin du dossier contenant les rapports
    dialog_fichier.InitialView = msoFileDialogViewList
    dialog_fichier.AllowMultiSelect = True  'Multi select autorisé
    fichier_choisi = dialog_fichier.Show
    If fichier_choisi = -1 Then
        measures = dialog_fichier.SelectedItems.Count 'Compte du nb de fichier choisi pour redimensionnement des tableaux
        ReDim monTab(measures, 1) 'Tableau du chemin et nom du fichier
        ReDim monTabDeDonnee(measures, 31) 'Tableau des données à extraire

        'Labelisation des colonnes des tableaux
        monTab(0, 0) = "File_path"
        monTab(0, 1) = "File_name"

        monTabDeDonnee(0, 0) = "Comp_num"
        monTabDeDonnee(0, 1) = "Ph_Good_Cri"
        monTabDeDonnee(0, 2) = "Ph_Good_Maj"
        monTabDeDonnee(0, 3) = "Ph_Good_Min"
        monTabDeDonnee(0, 4) = "Ph_Weak_Cri"
        monTabDeDonnee(0, 5) = "Ph_Weak_Maj"
        monTabDeDonnee(0, 6) = "Ph_Weak_Min"
        monTabDeDonnee(0, 7) = "Ph_Rejected_Cri"
        monTabDeDonnee(0, 8) = "Ph_Rejected_Maj"
        monTabDeDonnee(0, 9) = "Ph_Rejected_Min"
        monTabDeDonnee(0, 10) = "Sc_Acc_Cri"
        monTabDeDonnee(0, 11) = "Sc_Acc_Maj"
        monTabDeDonnee(0, 12) = "Sc_Acc_Min"
        monTabDeDonnee(0, 13) = "Sc_Acc_Dfu_Cri"
        monTabDeDonnee(0, 14) = "Sc_Acc_Dfu_Maj"
        monTabDeDonnee(0, 15) = "Sc_Acc_Dfu_Min"
        monTabDeDonnee(0, 16) = "Sc_Acc_Nonconf_Cri"
        monTabDeDonnee(0, 17) = "Sc_Acc_Nonconf_Maj"
        monTabDeDonnee(0, 18) = "Sc_Acc_Nonconf_Min"
        monTabDeDonnee(0, 19) = "Sc_Report_Modprocess_Cri"
        monTabDeDonnee(0, 20) = "Sc_Report_Modprocess_Maj"
        monTabDeDonnee(0, 21) = "Sc_Report_Modprocess_Min"
        monTabDeDonnee(0, 22) = "Sc_Report_Measures_Cri"
        monTabDeDonnee(0, 23) = "Sc_Report_Measures_Maj"
        monTabDeDonnee(0, 24) = "Sc_Report_Measures_Min"
        monTabDeDonnee(0, 25) = "Sc_Postponed_Cri"
        monTabDeDonnee(0, 26) = "Sc_Postponed_Maj"
        monTabDeDonnee(0, 27) = "Sc_Postponed_Min"
        monTabDeDonnee(0, 28) = "Company_Name"
        monTabDeDonnee(0, 29) = "Controller_Name"
        monTabDeDonnee(0, 30) = "Inspection_Date"
        monTabDeDonnee(0, 31) = "Report_Decision"

        'Analyse de chaque fichier séléctionné
        For nombre_fichier = 1 To dialog_fichier.SelectedItems.Count
            'Recuperation des chemins et noms des fichiers
            chemin_fichier = dialog_fichier.SelectedItems(nombre_fichier)
            nom_fichier = Right(chemin_fichier, Len(chemin_fichier) - InStrRev(chemin_fichier, "\"))

            'Recupération des différentes données
            Workbooks.Open chemin_fichier
            Sheets("ReportHeader").Activate 'Feuille ou se trouve les données voulus

            comp_num = Range("SC_H_COMP_NUMBER").Value
            Ph_G_C = Range("D51").Value
            Ph_G_maj = Range("E51").Value
            Ph_G_m = Range("F51").Value
            Ph_W_C = Range("D52").Value
            Ph_W_maj = Range("E52").Value
            Ph_W_m = Range("F52").Value
            Ph_R_C = Range("D53").Value
            Ph_R_maj = Range("E53").Value
            Ph_R_m = Range("F53").Value
            Sc_A_C = Range("L51").Value
            Sc_A_maj = Range("M51").Value
            Sc_A_m = Range("N51").Value
            Sc_A_dfu_C = Range("L52").Value
            Sc_A_dfu_maj = Range("M52").Value
            Sc_A_dfu_m = Range("N52").Value
            Sc_A_nc_C = Range("L53").Value
            Sc_A_nc_maj = Range("M53").Value
            Sc_A_nc_m = Range("N53").Value
            Sc_R_mp_C = Range("L54").Value
            Sc_R_mp_maj = Range("M54").Value
            Sc_R_mp_m = Range("N54").Value
            Sc_R_m_C = Range("L55").Value
            Sc_R_m_maj = Range("M55").Value
            Sc_R_m_m = Range("N55").Value
            Sc_P_C = Range("L56").Value
            Sc_P_maj = Range("M56").Value
            Sc_P_m = Range("N56").Value
            company_name = Range("SC_H_COMPANY_NAME").Value
            controller_name = Range("SC_H_COMPANY_CTRL_NAME").Value
            inspection_date = Range("SC_H2_INSPECTION_DATE").Value

            'Remplissage des tableaux

            monTab(i, 0) = chemin_fichier
            monTab(i, 1) = nom_fichier

            monTabDeDonnee(i, 0) = comp_num
            monTabDeDonnee(i, 1) = Ph_G_C
            monTabDeDonnee(i, 2) = Ph_G_maj
            monTabDeDonnee(i, 3) = Ph_G_m
            monTabDeDonnee(i, 4) = Ph_W_C
            monTabDeDonnee(i, 5) = Ph_W_maj
            monTabDeDonnee(i, 6) = Ph_W_m
            monTabDeDonnee(i, 7) = Ph_R_C
            monTabDeDonnee(i, 8) = Ph_R_maj
            monTabDeDonnee(i, 9) = Ph_R_m
            monTabDeDonnee(i, 10) = Sc_A_C
            monTabDeDonnee(i, 11) = Sc_A_maj
            monTabDeDonnee(i, 12) = Sc_A_m
            monTabDeDonnee(i, 13) = Sc_A_dfu_C
            monTabDeDonnee(i, 14) = Sc_A_dfu_maj
            monTabDeDonnee(i, 15) = Sc_A_dfu_m
            monTabDeDonnee(i, 16) = Sc_A_nc_C
            monTabDeDonnee(i, 17) = Sc_A_nc_maj
            monTabDeDonnee(i, 18) = Sc_A_nc_m
            monTabDeDonnee(i, 19) = Sc_R_mp_C
            monTabDeDonnee(i, 20) = Sc_R_mp_maj
            monTabDeDonnee(i, 21) = Sc_R_mp_m
            monTabDeDonnee(i, 22) = Sc_R_m_C
            monTabDeDonnee(i, 23) = Sc_R_m_maj
            monTabDeDonnee(i, 24) = Sc_R_m_m
            monTabDeDonnee(i, 25) = Sc_P_C
            monTabDeDonnee(i, 26) = Sc_P_maj
            monTabDeDonnee(i, 27) = Sc_P_m
            monTabDeDonnee(i, 28) = company_name
            monTabDeDonnee(i, 29) = controller_name
            monTabDeDonnee(i, 30) = inspection_date
            monTabDeDonnee(i, 31) = report_decision

            i = i + 1

            'Fermeture des fichiers 
            Workbooks(nom_fichier).Close

        Next nombre_fichier
    End If

    'Allocation des tableaux sur le nouvel Excel 

    Workbooks("Consolidation.xlsm").Activate
    Sheets("Data").Range("A1", "B" & measures + 1) = monTab
    Sheets("Data").Range("C1", "AH" & measures + 1) = monTabDeDonnee

    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub

Sub Macro()
    Dim WS As Worksheet
    Set WS = Sheets("Data")
    WS.Cells.Clear

    Call get_data

End Sub

La solution si certaines personnes tombe sur ce post : utilisé la méthode shape

If Worksheets("ReportHeader").Shapes("SC_H2_DEC_ACCEPTED").ControlFormat.Value = 1 Then
report_decision = "Accepted"
ElseIf Worksheets("ReportHeader").Shapes("SC_H2_DEC_POSTPONE").ControlFormat.Value = 1 Then
report_decision = "Postponed"
ElseIf Worksheets("ReportHeader").Shapes("SC_H2_DEC_REJECTED").ControlFormat.Value = 1 Then
report_decision = "Rejected"
Else
report_decision = "Unknown"
End If

Ca fonctionne très bien

Rechercher des sujets similaires à "recuperer valeur checkbox pre rempli nouveau classeur"