Lié 2 feuille d'un classeur
Bonjour à tous,
Je souhaiterais lier 2 feuilles d'un même classeur.
Je vous explique. J'aimerai que sur ma deuxième feuille du classeur nommé "Liste complète TH 2019" apparaisse automatiquement les personnes avec une reconnaissance TH ainsi que toutes les informations liées tel que le nom, le prénom, la date de naissance et la date de reconnaissance travailleur handicapé.
Et je souhaiterais dans un deuxième temps que dans la feuille "Liste complète TH 2019" et dans la colonne "renouvellement" que en fonction de la date du jour cela m'inscrit automatiquement "à jour" ou "périmé" et j'aimerai que cela indique "en cours" quand une date est rentré dans la colonne "date remise dossier la MDPH".
Je vous ai joint un modèle en pièce jointe.
J'espère avoir été clair et vous remercie par avance pour votre aide.
Bien cordialement.
Emma95
Bonjour,
Est-ce que ça vous dérange d'avoir une macro excel dans votre fichier ? Cela implique que si vous modifiez le format de votre tableau de base, il faudra éventuellement retoucher le code. Sinon, je ne vois pas comment faire la 1ère partie de votre problème, recopier dans votre 2ème onglet seulement les personnes TH.
Cindy
Bonjour Cindy,
Non cela ne me dérange absolument pas d'avoir un macro sur ce fichier au contraire mais je ne sais pas créer un macro donc si vous pouvez m'aider en me le créant et en me l'expliquant un minimum.
En vous remerciant par avance.
Bonjour,
Voici donc votre fichier avec la macro qui va bien pour mettre à jour le 2ème onglet lorsqu'une nouvelle personne TH est ajoutée sur l'onglet 1.
Pour accéder à la macro, vous pouvez aller dans Développeur/Visual Basic/Feuil1. Je vous ai mis le plus de commentaires possibles pour que vous la compreniez. Grâce à elle, en cliquant sur le bouton sur le 1er onglet "Ajouter TH", il va identifier les personnes TH de l'onglet 1 pour les copier dans le 2ème onglet.
Ensuite, je vous ai mis une formule dans la date renouvellement. Attention à ne pas effacer les formules présentes dans les colonnes jaunes de l'onglet 2. Même si les cases paraissent vides, il y a des formules dedans.
J'espère que j'ai pu t'aider.
Cindy
Bonjour Cindy,
Merci beaucoup, par contre la macro ne fonctionne pas, même sur votre document, je supprime toutes les données de la feuille 2 et clique sur le bouton "Ajouter TH" sur la feuille 1 un message s'affiche : Impossible d'exécuter la macro "Registre du personnel 2019.xlsm'!Feuil.1.TH"Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées.
Je suis sous excel version 2010, j'ai déjà insérer des macros sur plusieurs de mes fichiers excel et cela a toujours bien fonctionné, je ne comprends pas.
Votre macro fonctionne t'il correctement ?
Je vous remercie également pour les formules dans les colonnes jaunes de la feuille 2.
Bonjour,
Dans "Date reconnaissance RQTH", il faut que les années ne comportent que 2 chiffres (18 pour 2018). Vous aviez fait comme ça pour tous sauf pour Mario, donc ça bloquait.
Je vous renvoie votre fichier, dites moi s'il y a encore des bugs?
Cindy
Bonjour,
Dans "Date reconnaissance RQTH", il faut que les années ne comportent que 2 chiffres (18 pour 2018). Vous aviez fait comme ça pour tous sauf pour Mario, donc ça bloquait.
Je vous renvoie votre fichier, dites moi s'il y a encore des bugs?
Cindy
Bonjour Cindy,
Votre macro fonctionne.
Par contre je n'arrive pas a créer le bouton "Ajouter TH", parce que il faut que je mette cette macro sur mon vrai registre du personnel. J'ai réussi a créer le bouton mais comment le rendre actif ??
Pouvez-vous aussi me mettre sur la macro les numéros de lignes et de colonnes à changer en fonction du tableau car malgré vos explications je ne comprends absolument rien
En vous remerciant beaucoup beaucoup.
Emma95
Bonjour,
Pour rendre votre bouton actif (que vous avez créé via le ruban Développeur), vous faites clic droit sur le bouton / Affecter une macro / AjouterTH. Je vous avais mis le bouton tout à gauche sur votre tableau.
Et voilà pour les numéros à changer en cas de changement de colonnes :
Sub AjouterTH()
'Définition du type de variables que nous allons utiliser, ici des Integer soit des nombres
Dim LigneRegPersonnel As Integer 'ligne de Registre Personnel sur laquelle nous allons travailler
Dim DerniereLigneRegPersonnel As Integer 'dernière ligne du tableau Registre Personnel
Dim LigneTH As Integer 'ligne de Liste TH sur laquelle nous allons travailler
Dim DerniereLigneTH As Integer 'dernière ligne du tableau Liste TH
'Calcul de la dernière ligne de chaque tableau
DerniereLigneRegPersonnel = Sheets(1).Cells(Rows.Count, 3).End(xlUp).Row 'On cherche dans la colonne 3 ("nom") de l'onglet 1, soit Registre Personnel, la dernière ligne remplie /// 3 = Colonne C onglet "Registre" = "Nom"
DerniereLigneTH = Sheets(2).Cells(Rows.Count, 5).End(xlUp).Row 'On cherche dans la colonne 5 ("nom") de l'onglet 2, soit Liste TH, la dernière ligne remplie /// 5 = Colonne E onglet "Liste" = "Nom"
'Comparaison de chaque ligne de Registre Personnel avec toutes les lignes de Liste TH pour voir si elle est déjà présente
For LigneRegPersonnel = 6 To DerniereLigneRegPersonnel 'Le tableau Registre personnel commence à la ligne 6 et nous allons regarder chaque ligne individuellement jusqu'à la dernière
If Sheets(1).Cells(LigneRegPersonnel, 14).Value = "TH" Then 'Pour chaque ligne, si la notion "TH" est inscrite on va faire la suite, sinon on sort de cette boucle IF (SI) /// 14 = Colonne N onglet "Registre" = "Qualif"
NombreValeursIdentiquesACetteLigneDansTH = Application.CountIfs(Sheets(2).Columns(5), Sheets(1).Cells(LigneRegPersonnel, 3).Value, Sheets(2).Columns(6), Sheets(1).Cells(LigneRegPersonnel, 4).Value) 'On cherche dans le tableau du 2ème onglet, le nombre de lignes qui ont exactement le même nom et même prénom que la ligne que nous sommes en train d'étudier sur l'onglet 1 (ça équivaut à une fonction NB.SI.ENS) /// 3 = Colonne C onglet "Liste TH" = "Nom" - 4 = Colonne D onglet "Liste TH" = "Prénom" - 5 = Colonne E onglet "Registre" = "Nom" - 6 = Colonne F onglet "Registre" = "Prénom"
If NombreValeursIdentiquesACetteLigneDansTH = 0 Then 'Si on ne trouve aucune ligne identique, on va copier les informations de l'onglet 1 vers l'onglet 2
LigneTH = DerniereLigneTH + 1 'La nouvelle ligne à remplir est celle qui suit la dernière ligne du tableau Liste TH
Sheets(2).Cells(LigneTH, 1).Value = "TH" 'Valeur de la colonne 1 : TH /// 1 = Colonne A onglet "Liste" - "RQTH"
Sheets(2).Cells(LigneTH, 4).Value = Sheets(1).Cells(LigneRegPersonnel, 11).Value 'Date de naissance : Valeur de la colonne 4 de l'onglet 2 = valeur de la colonne 11 de l'onglet 1 /// 4 = Colonne D onglet "Liste" = "Date de naissance" - 11 = Colonne K onglet "Registre" = "Date de naissance"
Sheets(2).Cells(LigneTH, 5).Value = Sheets(1).Cells(LigneRegPersonnel, 3).Value 'Idem pour nom /// 5 = Colonne E onglet "Liste" = "Nom" - 3 = Colonne C onglet "Registre" = "Nom"
Sheets(2).Cells(LigneTH, 6).Value = Sheets(1).Cells(LigneRegPersonnel, 4).Value 'Idem pour prénom /// 6 = Colonne F onglet "Liste" = "Prénom" - 4 = Colonne D onglet "Registre" = "Prénom"
DateDébutRQTH = Left(Sheets(1).Cells(LigneRegPersonnel, 16).Value, 8) 'On récupère la date de début de RQTH en ne prenant que la partie gauche de Date Reconnaissance RQTH (8 caractères) dans l'onglet 1 /// 16 = Colonne P onglet "Registre" - "Date reconnaisance RQTH"
Sheets(2).Cells(LigneTH, 7).Value = DateSerial(Right(DateDébutRQTH, 2), Mid(DateDébutRQTH, 4, 2), Left(DateDébutRQTH, 2)) 'On reconstitue une date avec la chaine de caractères que l'on a extrait avant : dateserial(année,mois,jour) /// 7 = Colonne G onglet "Liste" - "Date début reconnaisance RQTH"
DateFinRQTH = Right(Sheets(1).Cells(LigneRegPersonnel, 16).Value, 8) 'On récupère la date de fin de RQTH en ne prenant que la partie droite de Date Reconnaissance RQTH (8 caractères) dans l'onglet 1 /// 16 = Colonne P onglet "Registre" - "Date reconnaisance RQTH"
Sheets(2).Cells(LigneTH, 8).Value = DateSerial(Right(DateFinRQTH, 2), Mid(DateFinRQTH, 4, 2), Left(DateFinRQTH, 2)) 'On reconstitue une date avec la chaine de caractères que l'on a extrait avant : dateserial(année,mois,jour) /// 8 = Colonne H onglet "Liste" - "Date fin reconnaisance RQTH"
DerniereLigneTH = DerniereLigneTH + 1 'Comme on a ajouté une ligne, la dernière ligne du tableau Liste TH est donc la suivante
End If
End If
Next 'On recommence pour la ligne suivante du tableau Registre Personnel
End Sub
Cindy
Bonjour Cindy,
Tout d'abord merci encore beaucoup beaucoup.
Néanmoins j'ai encore un léger problème, j'ai bien copié votre macro mais cela ne fonctionne toujours pas. Cela me met un message d'erreur "propriété ou méthode non gérée par cet objet" je ne comprends pas j'ai pourtant tout bien recopier.
Je vous mets la macro si vous trouvez mon erreur cela m'aiderait encore beaucoup.
Sub AjouterTH()
Dim LigneRegPersonnel As Integer
Dim DerniereLigneRegPersonnel As Integer
Dim LigneTH As Integer
Dim DerniereLigneTH As Integer
DerniereLigneRegPersonnel = Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
DerniereLigneTH = Sheets(2).Cells(Rows.Count, 5).End(xlUp).Row
For LigneRegPersonnel = 6 To DerniereLigneRegPersonnel
If Sheets(1).Cells(LigneRegPersonnel, 13).Value = "TH" Then
NombreValeursIdentiquesACetteLigneDansTH = Application.Countlfs(Sheets(2).Columns(2), Sheets(1).Cells(LigneRegPersonnel, 5).Value, Sheets(2).Columns(3), Sheets(1).Cells(LigneRegPersonnel, 6).Value)
If NombreValeursIdentiquesACetteLigneDansTH = 0 Then
LigneTH = DerniereLigneTH + 1
Sheets(2).Cells(LigneTH, 1).Value = "TH"
Sheets(2).Cells(LigneTH, 4).Value = Sheets(1).Cells(LigneRegPersonnel, 10).Value
Sheets(2).Cells(LigneTH, 5).Value = Sheets(1).Cells(LigneRegPersonnel, 2).Value
Sheets(2).Cells(LigneTH, 6).Value = Sheets(1).Cells(LigneRegPersonnel, 3).Value
DateDébutRQTH = Left(Sheets(1).Cells(LigneRegPersonnel, 15).Value, 8)
Sheets(2).Cells(LigneTH, 7).Value = DateSerial(Right(DateDébutRQTH, 2), Mid(DateDébutRQTH, 4, 2), Left(DateDébutRQTH, 2))
DateFinRQTH = Right(Sheets(1).Cells(LigneRegPersonnel, 15).Value, 8)
Sheets(2).Cells(LigneTH, 8).Value = DateSerial(Right(DateFinRQTH, 2), Mid(DateFinRQTH, 4, 2), Left(DateFinRQTH, 2))
DerniereLigneTH = DerniereLigneTH + 1
End If
End If
Next
End Sub
Merci beaucoup par avance
Bonjour,
Il vaut mieux que vous me renvoyiez votre fichier.
Cindy
Je ne peux pas vous renvoyer le fichier il contient des données confidentielles.