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 .
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