Copier ligne filtée vers une autre ligne filtrée

Bonjour le Forum,

j'ai un soucis avec une fichier que je construit ou je dois faire une recherche de Noms.

J'aimerais filtrer deux onglets qui ont une valeur commune et copier une plage de cellules

d'une ligne filtrée d'un premier onglet sur la ligne filtrée d'un deuxième onglet.

A l'aide d'une ComboBox, J'aimerai que cette recherche et le copier-coller se fasse automatiquement par variables pour remplacer le Nom et la plage de cellules à copier - coller.

Ci-joint ce que me donne l'enregistreur de macro:

Sub Macro16()

ActiveSheet.Range("$A$13:$CY$997").AutoFilter Field:=18, Criteria1:= _

"MULON BENJAMIN"

Sheets("SCHILTZ.K").Select

ActiveSheet.Range("$A$13:$BW$57").AutoFilter Field:=18, Criteria1:= _

"MULON BENJAMIN"

Sheets("RH POLYVALENCE").Select

Range("U29:BO29").Select

Selection.Copy

Sheets("SCHILTZ.K").Select

Range("U17").Select

ActiveSheet.Paste

Application.CutCopyMode = False

ActiveWorkbook.Save

End Sub

Pourriez vous me créer un exemple s'il vous plait?

Merci d'avance à vous .

Bonjour,

A tester mais sans fichier ?

Sub Macro16()

    Dim Lig As Long

    'les résultats son collés sur la feuille "RH POLYVALENCE"
    With ActiveSheet.Range("$A$13:$CY$997") '<-- connais pas le nom de la feuille !

        .AutoFilter 18, "MULON BENJAMIN"
        .AutoFilter.Range.EntireRow.Copy Worksheets("RH POLYVALENCE").Cells(1, 1)

    End With

    With Worksheets("SCHILTZ.K").Range("$A$13:$BW$57")

        .AutoFilter 18, "MULON BENJAMIN"
        Lig = Worksheets("RH POLYVALENCE").Cells(Rows.Count, 1).End(xlUp).Row + 1 'prmier ligne vide en colonne A
        .AutoFilter.Range.EntireRow.Copy Worksheets("RH POLYVALENCE").Cells(Lig, 1)

    End With

    ActiveWorkbook.Save

End Sub

Bonjour Theze,

En fait mon fichier est un tableau de polyvalence opérateurs.

L'onglet RH POLYVALENCE est la base de données générale.

Il me permet de répartir les opérateurs et leur polyvalence dans 7 autres onglets suivant le responsable maitrise.

Ce que je souhaite, c'est quand je modifie cet onglet, la modification s'effectue sur l'onglet correspondant au responsable maitrise.

Exemple:

"MULON BENJAMIN" appartient à l'onglet "SCHILTZ.K"

j'aimerais quand je modifie une cellule de la plage ( "U à BO") de l'onglet RH POLYVALENCE, que la modification s'effectue automatiquement sur l'onglet SCHILTZ.K , car cet opérateur appartient à cette équipe.

La modification d'une cellule de la plage ( "U à BO") de l'onglet RH POLYVALENCE se faisant par double clic.

J'ai commencé une macro (Userform14) qui fait une recherche par opérateur et responsable maitrise (bouton "COPIER" en rouge)

Ci-joint mon fichier.

Pour accéder aux onglets, clique sur Tableau de polyvalence à l'ouverture du fichier.

https://www.cjoint.com/c/IIshz5eVBCl

Cordialement.

Serenity55

Re,

Si tu veux juste reporter la valeur saisie dans la feuille "RH POLYVALENCE", je partirai plutôt sur l'événement Change() de la feuille pour reporter la valeur. La seule contrainte est que le nom des feuilles doit être formé comme tu l'as fais c'est à dire le nom de famille et la première lettre du prénom car le nom de la feuille est construit avec cette ligne :

Nom = Split(Cells(Target.Row, 18).Value, " ")(0) & "." & Left(Split(Cells(Target.Row, 18).Value, " ")(1), 1)

code à mettre dans le module de la feuille "RH POLYVALENCE" :

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Fe As Worksheet
    Dim Nom As String

    If Target.Column > 66 Then Exit Sub
    If Target.Column < 20 Then Exit Sub
    If Target.Row < 15 Then Exit Sub
    If Target.Count > 1 Then Exit Sub

    Nom = Split(Cells(Target.Row, 18).Value, " ")(0) & "." & Left(Split(Cells(Target.Row, 18).Value, " ")(1), 1)

    On Error Resume Next
    Set Fe = Worksheets(Nom)
    If Err.Number <> 0 Then MsgBox "La feuille '" & Nom & "' n'existe pas dans le classeur, dans le cas contraire, vérifier son orthographe !": Exit Sub

    Fe.Cells(Target.Row, Target.Column).Value = Target.Value

End Sub

Re Theze,

Merci beaucoup pour ta réponse,

J'ai essayé ton code mais je n'y arrive pas

Peux-tu essayer pour moi ? s'il te plait?

Re,

To classeur est trop lourd et je ne vais pas le zipper ou le poster ailleurs mais il te suffit de mettre le code dans le module de la feuille "RH POLYVALENCE" là où il y a déjà des procédures événementielles (ces dernières tu as su les mettre !), tu la mets ou tu veux, au début, à la fin ou même entre deux. J'ai commenté le code :

'si j'ai bien compris la demande, la valeur saisie dans la zone qui va de U15 à BOx de cette feuille (RH POLYVALENCE)
'va être entrée dans la même cellule mais dans la feuille cible fonction du nom de la personne qui se trouve sur la
'même ligne en colonne R
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Fe As Worksheet
    Dim Nom As String

    'défini la zone de la colonne U à la colonne BO et à partir de le ligne 15
    If Target.Column > 66 Then Exit Sub
    If Target.Column < 20 Then Exit Sub
    If Target.Row < 15 Then Exit Sub
    If Target.Count > 1 Then Exit Sub

    'construit le nom de la feuille à partir du nom de famille et de l'initiale du prénom avec un point comme séparation
    Nom = Split(Cells(Target.Row, 18).Value, " ")(0) & "." & Left(Split(Cells(Target.Row, 18).Value, " ")(1), 1)

    'gère l'erreur de la feuille inexistante
    On Error Resume Next
    Set Fe = Worksheets(Nom)
    If Err.Number <> 0 Then MsgBox "La feuille '" & Nom & "' n'existe pas dans le classeur, dans le cas contraire, vérifier son orthographe !": Exit Sub

    'inscrit la valeur dans la même cellule mais dans la feuille portant le nom de famille
    Fe.Cells(Target.Row, Target.Column).Value = Target.Value

End Sub

Bonjour Theze,

Merci de ton aide,

Le soucis que j'ai avec la procédure, c'est lorsque je clique sur une cellule de de U à BO en face du Nom recherché,

en fait la procédure recherche un onglet avec le nom de l'opérateur à la place du responsable maitrise.

Ci-joint une copie d'écran avec la réponse de la MsgBox .

https://www.cjoint.com/c/IIthAQufADl

Là, effectivement dans ce cas, je ne pige pas

Donc, admettons que tu doubles clique dans la cellule AA31 (ligne "Mulon Benjamin") de la feuille "RH POLYVALENCE" un formulaire s'ouvre, que doit t'il se passer après ? Ou est indiqué le responsable maîtrise, est-ce "Mulon Benjamin", doit-on inscrire la valeur qui va être entrée dans la cellule où on a double cliqué après avoir cliqué sur un des boutons du formulaire ?

Expliques la procédure de fonctionnement suite au double clic et le résultat escompté !

Bonjour Theze,

Merci d'avoir penché sur mon problème .

En fait en cherchant bien j'ai trouvé une autre solution:

Dans le module de ma feuille:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range("R15:R2015")) Is Nothing Then

'Déprotection de la feuille

ActiveSheet.Unprotect "GRLS"

UserForm13.Show

Cancel = True

'Protection de la feuille

ActiveSheet.Protect "GRLS"

End If

End Sub

Dans L'userform:

Private Sub CommandButton8_Click()

Dim sel As Range

Dim i As Integer

Dim sCritere As String

Dim Ligne As Long

Dim Ligne1 As Long

If Me.TextBox2.Value = "" Then Exit Sub

'Recherche du Nom et filtre le tableau principal de gestion

With Sheets("RH POLYVALENCE")

Set sel = Sheets("RH POLYVALENCE").Cells.Find(Me.TextBox2.Value, , xlValues, xlWhole)

If sel Is Nothing Then

MsgBox "Recherche absente"

Exit Sub 'Si recherche négative on sort de la procédure

Else 'Sinon activation du filtre après recherche positive

For i = 1 To 2 Step 1

Sheets("RH POLYVALENCE").Activate

sel(i).Activate 'Activation de la cellule recherchée

sCritere = Me.TextBox2.Value 'Activation du filtre de ligne suite cellule recherchée active

ActiveSheet.Range("$A$13:$CY$2015").AutoFilter Field:=18, Criteria1:=sCritere, _

Operator:=xlAnd

Next i

End If

End With

With Sheets("SCHILTZ.K")

Set sel = Sheets("SCHILTZ.K").Cells.Find(Me.TextBox2.Value, , xlValues, xlWhole)

If Not sel Is Nothing Then

MsgBox "Recherche positive pour Kévin SCHILTZ"

For i = 1 To 2 Step 1

Sheets("SCHILTZ.K").Activate

sel(i).Activate 'Activation de la cellule recherchée

sCritere = Me.TextBox2.Value 'Activation du filtre de ligne suite cellule recherchée active

ActiveSheet.Range("$A$13:$BW$57").AutoFilter Field:=18, Criteria1:=sCritere, _

Operator:=xlAnd

Sheets("RH POLYVALENCE").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("U" & Ligne & ":BO" & Ligne).Select

Selection.Copy

Sheets("SCHILTZ.K").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("U" & Ligne & ":BO" & Ligne).Select

ActiveSheet.Paste

Application.CutCopyMode = False

Next i

End If

End With

With Sheets("BRONNIMANN.S")

Set sel = Sheets("BRONNIMANN.S").Cells.Find(Me.TextBox2.Value, , xlValues, xlWhole)

If Not sel Is Nothing Then

MsgBox "Recherche positive pour Sébastien BRONNIMANN"

For i = 1 To 2 Step 1

Sheets("BRONNIMANN.S").Activate

sel(i).Activate 'Activation de la cellule recherchée

sCritere = Me.TextBox2.Value 'Activation du filtre de ligne suite cellule recherchée active

ActiveSheet.Range("$A$13:$BW$57").AutoFilter Field:=18, Criteria1:=sCritere, _

Operator:=xlAnd

Sheets("RH POLYVALENCE").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("U" & Ligne & ":BO" & Ligne).Select

Selection.Copy

Sheets("BRONNIMANN.S").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("U" & Ligne & ":BO" & Ligne).Select

ActiveSheet.Paste

Application.CutCopyMode = False

Next i

End If

End With

With Sheets("PERCHAT.G")

Set sel = Sheets("PERCHAT.G").Cells.Find(Me.TextBox2.Value, , xlValues, xlWhole)

If Not sel Is Nothing Then

MsgBox "Recherche positive pour Guillaume PERCHAT"

For i = 1 To 2 Step 1

Sheets("PERCHAT.G").Activate

sel(i).Activate 'Activation de la cellule recherchée

sCritere = Me.TextBox2.Value 'Activation du filtre de ligne suite cellule recherchée active

ActiveSheet.Range("$A$13:$BW$57").AutoFilter Field:=18, Criteria1:=sCritere, _

Operator:=xlAnd

Sheets("RH POLYVALENCE").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("U" & Ligne & ":BO" & Ligne).Select

Selection.Copy

Sheets("PERCHAT.G").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("U" & Ligne & ":BO" & Ligne).Select

ActiveSheet.Paste

Application.CutCopyMode = False

Next i

End If

End With

With Sheets("SCHILTZ.A")

Set sel = Sheets("SCHILTZ.A").Cells.Find(Me.TextBox2.Value, , xlValues, xlWhole)

If Not sel Is Nothing Then

MsgBox "Recherche positive pour Aurélien SCHILTZ"

For i = 1 To 2 Step 1

Sheets("SCHILTZ.A").Activate

sel(i).Activate 'Activation de la cellule recherchée

sCritere = Me.TextBox2.Value 'Activation du filtre de ligne suite cellule recherchée active

ActiveSheet.Range("$A$13:$BW$57").AutoFilter Field:=18, Criteria1:=sCritere, _

Operator:=xlAnd

Sheets("RH POLYVALENCE").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("BS" & Ligne & ":CQ" & Ligne).Select

Selection.Copy

Sheets("SCHILTZ.A").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("U" & Ligne & ":AS" & Ligne).Select

ActiveSheet.Paste

Application.CutCopyMode = False

Next i

End If

End With

With Sheets("PARISSE.J")

Set sel = Sheets("PARISSE.J").Cells.Find(Me.TextBox2.Value, , xlValues, xlWhole)

If Not sel Is Nothing Then

MsgBox "Recherche positive pour Jérome PARISSE"

For i = 1 To 2 Step 1

Sheets("PARISSE.J").Activate

sel(i).Activate 'Activation de la cellule recherchée

sCritere = Me.TextBox2.Value 'Activation du filtre de ligne suite cellule recherchée active

ActiveSheet.Range("$A$13:$BW$57").AutoFilter Field:=18, Criteria1:=sCritere, _

Operator:=xlAnd

Sheets("RH POLYVALENCE").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("BS" & Ligne & ":CQ" & Ligne).Select

Selection.Copy

Sheets("PARISSE.J").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("U" & Ligne & ":AS" & Ligne).Select

ActiveSheet.Paste

Application.CutCopyMode = False

Next i

End If

End With

With Sheets("GUILLAUME.J")

Set sel = Sheets("GUILLAUME.J").Cells.Find(Me.TextBox2.Value, , xlValues, xlWhole)

If Not sel Is Nothing Then

MsgBox "Recherche positive pour Jérome GUILLAUME"

For i = 1 To 2 Step 1

Sheets("GUILLAUME.J").Activate

sel(i).Activate 'Activation de la cellule recherchée

sCritere = Me.TextBox2.Value 'Activation du filtre de ligne suite cellule recherchée active

ActiveSheet.Range("$A$13:$BW$57").AutoFilter Field:=18, Criteria1:=sCritere, _

Operator:=xlAnd

Sheets("RH POLYVALENCE").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("BS" & Ligne & ":CQ" & Ligne).Select

Selection.Copy

Sheets("GUILLAUME.J").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("U" & Ligne & ":AS" & Ligne).Select

ActiveSheet.Paste

Application.CutCopyMode = False

Next i

End If

End With

With Sheets("MARTIN.C")

Set sel = Sheets("MARTIN.C").Cells.Find(Me.TextBox2.Value, , xlValues, xlWhole)

If Not sel Is Nothing Then

MsgBox "Recherche positive pour Cyril MARTIN"

For i = 1 To 2 Step 1

Sheets("MARTIN.C").Activate

sel(i).Activate 'Activation de la cellule recherchée

sCritere = Me.TextBox2.Value 'Activation du filtre de ligne suite cellule recherchée active

ActiveSheet.Range("$A$13:$BW$57").AutoFilter Field:=18, Criteria1:=sCritere, _

Operator:=xlAnd

Sheets("RH POLYVALENCE").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("BS" & Ligne & ":CQ" & Ligne).Select

Selection.Copy

Sheets("MARTIN.C").Select

Ligne = Range("R1048576").End(xlUp).Row

Range("U" & Ligne & ":AS" & Ligne).Select

ActiveSheet.Paste

Application.CutCopyMode = False

Next i

End If

End With

Unload Me

Me.TextBox2 = ""

Sheets("RH POLYVALENCE").Select

End Sub

Private Sub UserForm_Initialize()

'Sheets("RH POLYVALENCE").Select

Me.TextBox2 = ActiveCell

End Sub

Rechercher des sujets similaires à "copier ligne filtee filtree"