XL 2016 Une macro pour recopier des lignes suivant une valeur dans une cellule

Richard6263

XLDnaute Nouveau
Bonjour à tous
J'ai besoin d'aide pour recopier des lignes dans d'autres onglets à l'aide d'une macro, mais je n'y arrive pas
J'ai joins un modèle de fichier (j'ai supprimé tous les noms et toutes les macros pour plus de facilité)
voici ce que j'aimerai faire :

Dans l'onglet Gestion gardiens j'aimerai que lorsque j'inscris Agent1 en colonne C ou G dans lieu 1 en C3
ça me recopie dans l'onglet Agent1 la ligne correspondante dans lieu1 les colonnes A, C, D, E, F, G, H, I, J de gestion gardiens)

Si j'inscris Agent 1 colonne S ou colonne W dans lieu 3 case S3
ça me recopie la ligne dans l'onglet Agent1 lieu 3

Idem pour Agent2 et agent3 à recopier dans les onglets Agent2 et Agent3

J'espère que j'ai réussi à m'expliquer. merci à toutes celles et tous ceux qui pourront m'apporter un élément de réponse
 

Pièces jointes

  • planning gardiens.xlsm
    50.1 KB · Affichages: 16

Staple1600

XLDnaute Barbatruc
Bonjour

Une première piste
(pré-requis, toutes les feuilles Agents doivent avoir la même structure, et la feuille Gestion gardiens doit avoir 4 tableaux identiques (au niveau des entêtes) pour les lieux 1,2,3 et 4.)

PS: J'ai testé en respectant ce pré-requis et cela fonctionne

Code à mettre dans le code de la feuille Gestion gardiens
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim stLieu&, stAgent
If Target.Row >= 5 Then
stLieu = Cells(3, Target.Column).Column
stAgent = Target.Value2
Select Case Target.Column
Case 3, 7, 12, 16, 21, 25, 19, 31, 35
Sheets(CStr(stAgent)).Cells(Rows.Count, 1).End(3)(2).Value = Cells(Target.Row, 1).Value2
Target.Resize(, 4).Copy Sheets(CStr(stAgent)).Cells(Rows.Count, stLieu).End(3)(2)
Application.CutCopyMode = False
End Select
End If
End Sub
 

Richard6263

XLDnaute Nouveau
Bonjour Staple 1600
Merci de l’Intérêt que vous portez à mon problème de macro et je vous en remercie.

J'ai fais les pré-requis, votre macro fonctionne très bien, seulement, chez moi, la date ne s'inscrit pas. ai-je zappé quelque chose ?
 

Richard6263

XLDnaute Nouveau
Exact ! ça fonctionne à merveille !
Reste un petit détail, quand j'efface par exemple agent1 dans gestion gardiens, ça me donne erreur d’exécution 9 l'indice n'appartient pas à la sélection. (c'est un petit détail)
maintenant, dans les onglets agent1 agent2 etc.
J'aimerai supprimer lieu2 et lieu4 en effet ces onglets servent pour la comptabilité, je l'imprime en A4 paysage pour payer les heures des gardiens appelé ici agent1 agent2 agent3 etc
Est-ce possible de supprimer ces deux lieux sans avoir d'erreur avec la macro ?
En tout cas vous m'avez apporté énormément d'aide ! Je vous en remercie vivement.
Le but c'est de ne plus à avoir à recopier les heures de chaque agent à la main gain de temps pour moi
 

Staple1600

XLDnaute Barbatruc
Re

Comme précédemment précisé:
Une première piste
Donc forcément perfectible
Donc une petit modification pour le cas d'une cellule "effacée"
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim stLieu&, stAgent
If Target.Row >= 5 Then
stLieu = Cells(3, Target.Column).Column
stAgent = Target.Value2
If Len(stLieu) = 0 Or Len(stAgent) = 0 Then Exit Sub
Select Case Target.Column
Case 3, 7, 12, 16, 21, 25, 19, 31, 35
Sheets(CStr(stAgent)).Cells(Rows.Count, 1).End(3)(2).Value = Cells(Target.Row, 1).Value2
Target.Resize(, 4).Copy Sheets(CStr(stAgent)).Cells(Rows.Count, stLieu).End(3)(2)
Application.CutCopyMode = False
End Select
End If
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Si j'étais moi, bah j'essaierai déjà de nommer un feuille C.DUBOIS ensuite je modifierai la liste des agents
en mettant C.DUBOIS à la place de Agent3 par exemple
Puis je testerai la macro
Enfin si j'étais moi, c'est seulement si apparaissait un message d'erreur que je reviendrai sur le forum poster ce message d'erreur.
Mais cela, c'est si j'étais moi et si je portais une chemise à mouiller ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 169
Messages
2 085 928
Membres
103 045
dernier inscrit
AP78