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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
404
Retour