XL 2019 Sélectionner une feuille avec nom dans une variable VBA

ManOfCatz

XLDnaute Nouveau
Bonjour,
J'ai comme projet de réaliser un classeur avec différentes feuilles dont le nom sont des années (2020,2021...), dans ces feuilles il y a un tableau avec une colonne qui s'ajoute chaque année. Il y a une autre feuille "Board" où l'on peut effectuer une recherchev en vba via un bouton, j'aimerais pouvoir sélectionner la feuille où la recherche va être effectuée via une cellule : Sheets("Board").Range("H63) contient la date que l'on inscrit manuellement. J'ai une variable "MonAnnee" qui vient prendre la date contenue dans "H6", malheureusement, je n'arrive pas à exploiter cette variable dans ma recherchev. Aprés avoir cherché dans pas mal de forum, aucune solution à mon problème.

VB:
        [COLOR=rgb(235, 107, 86)]MonTableau = Sheets("Board").Range("H4")[/COLOR]
        [COLOR=rgb(250, 197, 28)]MonAnnee = Sheets("Board").Range("H6")[/COLOR]

    
    For n = 1 To NbAnnee
    NbColonne = n
    Somme = 0
            For j = 1 To NbTrue
            NbLigne = j
            
                ValCaption = Sheets("board").Range("AA" & NbLigne).Value
                ValResult = Application.WorksheetFunction.VLookup(ValCaption, [COLOR=rgb(250, 197, 28)]Sheets(MonAnnee)[/COLOR].[COLOR=rgb(235, 107, 86)]Range(MonTableau)[/COLOR], NbColonne + 3, 0)
                Sheets("Board").Cells(NbLigne, NbColonne + 27) = ValResult
                Somme = Somme + ValResult
            Next j
        If NbTrue = o Then
            MsgBox "Aucun code analytique selectionné"
            Unload UserForm1
            Exit For
        Else
            Sheets("Board").Cells(11, NbColonne + 6) = Somme
        End If
    Next n
 

Phil69970

XLDnaute Barbatruc
Bonjour @ManOfCatz

Il nous manque :

1)La totalité de ta macro
2)Un fichier représentatif


C'est quoi représentatif ?
- représentatif, même organisation des lignes et des colonnes, mêmes libellés, mêmes noms de feuilles...
- anonymisé, pas de données personnelles réelles tels nom, n° sécu, adresse ...
- simplifié, une quinzaine de lignes reproduisant l'ensemble des différents cas envisageables
-Avec tes attendus Avant/Apres

*Éventuellement préciser l'ordre de grandeur des lignes à traiter, exemple mon fichier comporte 1 000 lignes ou bien 200 000 lignes ==> la méthodologie peut être différents.

A tout hasard .... et sur un malentendu....🤣

ValResult = Application.WorksheetFunction.VLookup(ValCaption, Sheets(MonAnnee).Range(MonTableau), NbColonne + 3, 0)
A remplacer par :
ValResult.Formulalocal = Application.WorksheetFunction.VLookup(ValCaption, Sheets(MonAnnee).Range(MonTableau), NbColonne + 3, 0)

*Merci de ton retour

@Phil69970
 

ManOfCatz

XLDnaute Nouveau
VB:
Private Sub CommandButton1_Click()

'Compter le nombre de CheckBox
Dim Ctrl As Control, Cpt As Integer
For Each Ctrl In UserForm1.Controls
    If TypeOf Ctrl Is MSForms.CheckBox Then Cpt = Cpt + 1
Next Ctrl

Dim NbAnnee As Long
NbAnnee = Application.CountA(Range("S:S"))
Dim o As Long
o = 1
For q = NbAnnee To 1 Step -1
    Sheets("Board").Cells(10, o + 6) = Sheets("Board").Range("S" & q).Value
    Sheets("Board").Cells(10, o + 6).Interior.ColorIndex = 27
    Sheets("Board").Cells(10, o + 6).Font.ColorIndex = 1
    o = o + 1
Next
NbAnnee = Application.CountA(Range("S:S"))

'-------------------------------------------------------------------------------
'NbColonne = Application.CountA(Range("S:S"))
'ResultV = Application.WorksheetFunction.VLookup(NomCheckBox, Sheets("2022").Range("B6:S103"), g, 0)

Dim a As Long 'Numéro de ligne

If UserForm2.Code = "F" Then
Sheets("board").Range("AA1:AZ30").Clear
        
    a = 1
    For t = 1 To Cpt
        If Controls("CheckBox" & t) Then
            Sheets("board").Range("AA" & a) = Controls("CheckBox" & t).Caption
            a = a + 1
        End If
    Next

        Dim NbTrue As Long
        NbTrue = Application.CountA(Range("AA:AA"))
        Dim NbColonne As Long
        Dim NbLigne As Long
        Dim ValCaption As Variant
        Dim ValResult As Long
        Dim MonTableau As Variant
        Dim MonAnnee As Variant
        Dim Somme As Long
        
        MonTableau = Sheets("Board").Range("H4")
        MonAnnee = Sheets("Board").Range("H6")

    
    For n = 1 To NbAnnee
    NbColonne = n
    Somme = 0
            For j = 1 To NbTrue
            NbLigne = j
                ValCaption = Sheets("board").Range("AA" & NbLigne).Value
                ValResult = Application.WorksheetFunction.VLookup(ValCaption, Sheets("2022").Range("B6:S104"), NbColonne + 2, 0)
                Sheets("Board").Cells(NbLigne, NbColonne + 27) = ValResult
                Somme = Somme + ValResult
            Next j
        If NbTrue = o Then
            MsgBox "Aucun code analytique selectionné"
            Unload UserForm1
            Exit For
        Else
            Sheets("Board").Cells(11, NbColonne + 6) = Somme
        End If
    Next n
'-------------------------------------------------------------------------------
ElseIf UserForm2.Code = "P" Then
    Sheets("board").Range("BA1:BZ30").Clear
    
    a = 1
    For t = 1 To Cpt
        If Controls("CheckBox" & t) Then
            Sheets("board").Range("BA" & a) = Controls("CheckBox" & t).Caption
            a = a + 1
        End If
    Next

        NbTrue = Application.CountA(Range("BA:BA"))

        MonTableau = Sheets("Board").Range("H4")
    
    For n = 1 To NbAnnee
    NbColonne = n
    Somme = 0
            For j = 1 To NbTrue
            NbLigne = j
            
                ValCaption = Sheets("board").Range("BA" & NbLigne).Value
                ValResult = Application.WorksheetFunction.VLookup(ValCaption, Sheets("2022").Range(MonTableau), NbColonne + 2, 0)
                Sheets("Board").Cells(NbLigne, NbColonne + 53) = ValResult
                Somme = Somme + ValResult
            Next j
        If NbTrue = o Then
            MsgBox "Aucun code analytique selectionné"
            Unload UserForm1
            Exit For
        Else
            Sheets("Board").Cells(12, NbColonne + 6) = Somme
        End If
    Next n
'-------------------------------------------------------------------------------
ElseIf UserForm2.Code = "L" Then
    Sheets("board").Range("CA1:CZ30").Clear
    
    a = 1
    For t = 1 To Cpt
        If Controls("CheckBox" & t) Then
            Sheets("board").Range("CA" & a) = Controls("CheckBox" & t).Caption
            a = a + 1
        End If
    Next

        NbTrue = Application.CountA(Range("CA:CA"))

        MonTableau = Sheets("Board").Range("H4")
    
    For n = 1 To NbAnnee
    NbColonne = n
    Somme = 0
            For j = 1 To NbTrue
            NbLigne = j
            
                ValCaption = Sheets("board").Range("CA" & NbLigne).Value
                ValResult = Application.WorksheetFunction.VLookup(ValCaption, Sheets("2022").Range(MonTableau), NbColonne + 2, 0)
                Sheets("Board").Cells(NbLigne, NbColonne + 79) = ValResult
                Somme = Somme + ValResult
            Next j
        If NbTrue = o Then
            MsgBox "Aucun code analytique selectionné"
            Unload UserForm1
            Exit For
        Else
            Sheets("Board").Cells(13, NbColonne + 6) = Somme
        End If
    Next n
'-------------------------------------------------------------------------------
ElseIf UserForm2.Code = "Q" Then
    Sheets("board").Range("DA1:DZ30").Clear
    
    a = 1
    For t = 1 To Cpt
        If Controls("CheckBox" & t) Then
            Sheets("board").Range("DA" & a) = Controls("CheckBox" & t).Caption
            a = a + 1
        End If
    Next

        NbTrue = Application.CountA(Range("DA:DA"))

        MonTableau = Sheets("Board").Range("H4")
    
    For n = 1 To NbAnnee
    NbColonne = n
    Somme = 0
            For j = 1 To NbTrue
            NbLigne = j
            
                ValCaption = Sheets("board").Range("DA" & NbLigne).Value
                ValResult = Application.WorksheetFunction.VLookup(ValCaption, Sheets("2022").Range(MonTableau), NbColonne + 2, 0)
                Sheets("Board").Cells(NbLigne, NbColonne + 105) = ValResult
                Somme = Somme + ValResult
            Next j
        If NbTrue = o Then
            MsgBox "Aucun code analytique selectionné"
            Unload UserForm1
            Exit For
        Else
            Sheets("Board").Cells(14, NbColonne + 6) = Somme
        End If
    Next n
'-------------------------------------------------------------------------------
ElseIf UserForm2.Code = "R" Then
    Sheets("board").Range("EA1:EZ30").Clear
    
    a = 1
    For t = 1 To Cpt
        If Controls("CheckBox" & t) Then
            Sheets("board").Range("EA" & a) = Controls("CheckBox" & t).Caption
            a = a + 1
        End If
    Next

        NbTrue = Application.CountA(Range("EA:EA"))

        MonTableau = Sheets("Board").Range("H4")
    
    For n = 1 To NbAnnee
    NbColonne = n
    Somme = 0
            For j = 1 To NbTrue
            NbLigne = j
            
                ValCaption = Sheets("board").Range("EA" & NbLigne).Value
                ValResult = Application.WorksheetFunction.VLookup(ValCaption, Sheets("2022").Range(MonTableau), NbColonne + 2, 0)
                Sheets("Board").Cells(NbLigne, NbColonne + 131) = ValResult
                Somme = Somme + ValResult
            Next j
        If NbTrue = o Then
            MsgBox "Aucun code analytique selectionné"
            Unload UserForm1
            Exit For
        Else
            Sheets("Board").Cells(15, NbColonne + 6) = Somme
        End If
    Next n
'-------------------------------------------------------------------------------
ElseIf UserForm2.Code = "M" Then
    Sheets("board").Range("FA1:FZ30").Clear
    
    a = 1
    For t = 1 To Cpt
        If Controls("CheckBox" & t) Then
            Sheets("board").Range("FA" & a) = Controls("CheckBox" & t).Caption
            a = a + 1
        End If
    Next

        NbTrue = Application.CountA(Range("FA:FA"))
        MonTableau = Sheets("Board").Range("H4")
    
    For n = 1 To NbAnnee
    NbColonne = n
    Somme = 0
            For j = 1 To NbTrue
            NbLigne = j
            
                ValCaption = Sheets("board").Range("FA" & NbLigne).Value
                ValResult = Application.WorksheetFunction.VLookup(ValCaption, Sheets("2022").Range(MonTableau), NbColonne + 2, 0)
                Sheets("Board").Cells(NbLigne, NbColonne + 157) = ValResult
                Somme = Somme + ValResult
            Next j
        If NbTrue = o Then
            MsgBox "Aucun code analytique selectionné"
            Unload UserForm1
            Exit For
        Else
            Sheets("Board").Cells(16, NbColonne + 6) = Somme
        End If
    Next n
End If
'-------------------------------------------------------------------------------
    Unload UserForm1
    Unload UserForm2
    MsgBox "Formule modifiée"

End Sub
Private Sub CommandButton2_Click()

Unload UserForm1

End Sub

Capture d’écran 2022-02-08 100654.png

Le tableau en page 2022 contient environ 100 lignes avec 8 colonnes de données, je viens extraire les données de 2022 et elles sont ensuites triées dans chacunes des pages M,F,L,P,Q,R. Chaque lettre correspond à un site, je viens ensuite faire la sommes des données pour chaque années, et cela génére le tableau ci-dessus. Actuellement, je suis obligé de préciser manuellement "Sheets("2022").Range("B6:S103")", mais j'aimerais que MonAnnee et MonTableau soient des variables avec comme données les cellules "H4" et "H6", pour que la personne qui va utiliser le classeur n'ai pas à aller dans le code pour modifier l'année et la plade de données.
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 948
Membres
101 850
dernier inscrit
Danigra