Copier une plage de donnée en fonction d'une cellule variab

Bonjour,

Apres avoir recherché, sans succès, la solution à mon problème, je créé un nouveau sujet en espérant trouver une solution.

J’aimerai copier une plage de données d’un classeur à un autre en fonction d’une cellule variable.

Je m’explique sur un classeur appelé « Headcount » se trouve une liste d’employés (liste contenant un filtre automatique).

Dans le second classeur, « 2015 budget », se trouve ma cellule variable « B6 » (cellule contenant le critère). J’aimerai que lorsque j’entre un critère dans ma cellule B6, ma macro aille dans le classeur « Headcount », sélectionne les données qui correspondent à ce critère et les colle dans le classeur « 2015 Budget ».

Pour une meilleure compréhension, j’ai joint les deux fichiers en question.

Merci beaucoup pour votre aide !!

48headcount.xlsx (17.38 Ko)
462015-budget.xlsx (11.53 Ko)

Bonjour,

A mettre dans le classeur "2015 Budget", dans le module de la feuille "Headcount" et ensuite, l'enregistrer au format ".xls" ou ".xlsm" pour garder la macro.

Note, le classeur "HEADCOUNT.xlsx" doit être ouvert durant le fonctionnement de la macro sinon, il faut modifier le code en ajoutant des lignes de commande d'ouverture et fermeture ou passer par ADO si le classeur doit rester fermé :

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim ClsHeadCount As Workbook
    Dim Fe As Worksheet
    Dim Plage As Range
    Dim Cel As Range
    Dim Ligne As Range
    Dim I As Long

    'seulement B6
    If Target.Address(0, 0) <> "B6" Then Exit Sub

    'gèle
    Application.ScreenUpdating = False
    Application.EnableEvents = False

    'le classeur doit être ouvert !
    'défini les valriable
    Set ClsHeadCount = Workbooks("HEADCOUNT.xlsx")
    Set Fe = ClsHeadCount.Worksheets("Employee")

    'défini la plage de recherche
    With Fe

        'colonne H de la feuille "Employee" du classeur "HEADCOUNT.xlsx"
        Set Plage = .Range(.Cells(2, 8), .Cells(.Rows.Count, 8).End(xlUp))

    End With

    'commence à la neuvième ligne
    I = 9

    'effectue la recherche du critère
    For Each Cel In Plage

        If Cel.Value = Target.Value Then

            'défini la ligne qui doit être récupérée
            Set Ligne = Fe.Range(Fe.Cells(Cel.Row, 1), Fe.Cells(Cel.Row, 9))

            With ThisWorkbook.Worksheets("Headcount")

                'inscrit les valeurs dans le tableau
                .Range(.Cells(I, 2), .Cells(I, 10)).Value = Ligne.Value

                'supprime la valeur du critère de la colonne "CCG" qu'elle valeur doit être récupérée ici ?
                .Cells(I, 9) = ""

            End With

            'pour la ligne suivante
            I = I + 1

        End If

    Next Cel

    'rétabli
    Application.EnableEvents = True
    Application.ScreenUpdating = True

End Sub

Hervé.

Bonjour Hervé,

Je tiens tout d’abord à m’excuser pour ma réponse un peu tardive et à vous remercier pour votre aide et votre temps. Hélas, je rencontre un problème. Apres avoir copié le code VBA sans mon fichier « 2015 Budget », je suis dans l’impossibilité de retrouver et exécuter la macro. Elle n’apparait pas dans ma liste de macro. J’ai comme vous l’avez spécifié sauvegarder ce dernier en .xlsm.

Enfin, en lisant la macro, si je ne me trompe pas, seule la colonne H du classeur « Headcount » est copiée dans le classeur « Budget 2015 ». Hors j’aurais besoin que les colonnes E à I soient copiées.

Merci encore pour votre aide.

Bonsoir,

Cette proc est en fait une proc évènementielle (elle se déclanche toute seule selon le type d'évènement choisi, ici "Change") donc, quand tu change la valeur dans la cellule "B6" et seulement dans cette dernière :

If Target.Address(0, 0) <> "B6" Then Exit Sub

la proc est exécutée.

Je t'ai dis de mettre la macro dans le module de la feuille "Headcount" :

A mettre dans le classeur "2015 Budget", dans le module de la feuille "Headcount"

Dans le VBE, tu double clique sur la feuille (fenêtre en haut à gauche) et à droite dans la fenêtre qui vient de s'ouvrir, tu colle le code que je t'ai posté ensuite, tu vas dans ta feuille Excel et tu entre une code dans la cellule B6 et quand tu valide, tu doit avoir les résultats qui s'inscrivent dans ton tableau au dessous

Enfin, en lisant la macro, si je ne me trompe pas, seule la colonne H du classeur « Headcount » est copiée dans le classeur "Budget 2015". Hors j’aurais besoin que les colonnes E à I soient copiées.

Non, ici, cette ligne de code récupère les valeurs de plusieurs colonnes (de A à I) :

Set Ligne = Fe.Range(Fe.Cells(Cel.Row, 1), Fe.Cells(Cel.Row, 9))
...
.Range(.Cells(I, 2), .Cells(I, 10)).Value = Ligne.Value

La valeur d'une colonne est effacée (je crois que c'est la colonne I) car je n'ai pas su que mettre ?

.Cells(I, 9) = ""

Hervé.

Bonjour Hervé,

Cela marche parfaitement !!! Merci beaucoup

Bonne journée !!

Rechercher des sujets similaires à "copier plage donnee fonction variab"