Extraction de données + transfert auto sur 1 autre feuille
Bonjour à tous,
Ce classeur de présence se peaufine grâce à vous et je vous en remercie encore.
Il me reste une chose à mettre en place et j'en suis incapable, malgré de nombreux essais, mais je n'ai pas la connaissance pour :
En colonne E (masquée) j'ai un "X" qui s'affiche lorsque des personnes arrivent en retard.
J'aimerais quotidiennement extraire ces retards et les reporter sur la feuille nommée "retard".
Avec le filtre avancé, ça ne fonctionne pas, peut-être à cause des colonnes masquées
Mais de toutes façons, j'aimerais éviter de devoir compiler les retard quotidien dans la feuille retard. On doit pouvoir automatiser ça non ? Une macro peut-être ?
Milles mercis pour votre aide
Avec mes meilleurs messages
Serji
Bonjour, j'ai fais votre macro mais j'ai modifié un peu vos feuilles pour qu'elle puisse fonctionner. ctrl + q pour generer la liste des vilains retardataires !
Bonjour Force Rouge
Je suis impressionné avec quel aisance vous faites ça ! ça me décourage aussi un peu, parce que j'imagine bien la maitrise qu'il y a derrière et donc l'étude que ça demande. Et je ne suis pa convaincu d'y arriver un jour :-/
Les entêtes que j'ai mis vous gênent apparemment. Je peux faire sans, mais nous aimons bien les "en-tête" huhu
qu'est-ce que la colonne "2345" s'il vous plaît ?
En tout milles mercis pour votre précieuse aide. J'ai un cours macro mardi prochain, je vais demander à la prof si on peut étudier la votre (mais je pense que ce sera trop élaboré pour le programme des newbies que nous sommes
Sincèrement
Serji
Salutation Sergi...Euh...pas tant d'éloge svp !
colonne 2345 et l'autre à côté correspondent a vos colonnes E et F qui sont masquées. Avec excel-vba il faut éviter de laisser des champs vide dans les entêtes sa peu créer des incidents..
Ma macro est très simpliste donc ne vous inquiétez pas, votre professeur saura vous aider !
Simpliste ? Lorsque je l'a lis, je vois des idéogrammes chinois
Bien compris pour la colonne 2345.
J'ai passé la cinquantaine, je ne suis pa ssur d'avoir encore les facultés intellectuelles pour me mettre à fond dans excel quand je vois toutes ces formules
Encore merci à vous,
Tout de bon et au plaisir
oué j'suis d'accord avec vous, c'est plus de votre âge toutes ses bestioles là! Ceci dit, j'vais tenter au moins de vous faire comprendre la démarche globable avec les commentaires en vert...
Sub retard()
Application.ScreenUpdating = False
'annule la visibilité des vas et viens entre chaque feuille
Sheets("Retard").Range("a2:j65536").ClearContents
'j'éfface la feuille retard
Dim dl&, i%, j%
'je déclare les variable en spécifiant le type de données qu'elles vont contenir
For j = 1 To Sheets.Count
' je dis que mon traitement va se faire de la feuille 1 au nombre de feuille présente dans le classeur (sheets.count compte le nombre de feuille)
If Sheets(j).Name <> "Retard" Then
'si le nom de la feuille que je selectionne est different de Retard alors
Sheets(j).Activate
'j'active la feuille au premier plan
dl = Sheets(j).Range("a" & Rows.Count).End(xlUp).Row
'je repère la dernière ligne non vide afin de ne pas travailler sur 272 000 ligne vide qui ne servirait à rien
For i = 2 To dl
'pour une valeur de i = 2 a i = dernière ligne non vide
Sheets(j).Activate
'ici j'ai fait une boulette car ma feuille j je l'ai déjà activé plus haut!
If Sheets(j).Range("e" & i) <> "" Then
'si sur ma feuille la cellule E2 (E2 car i = 2 donc Range("e" & i) se lit Range("e" & 2) soit Range("e2") est different de rien (donc s'il y a un x c'est different de rien) alors
Range("a" & i & ":j" & i).Copy
'je copie la plage a2:j2
Sheets("retard").Range("a" & Sheets("Retard").Range("a" & Rows.Count).End(xlUp).Row + 1) = Sheets(j).Name 'dans ma feuille retard, dans la permière ligne vide de la colonne A je colle le nom de la feuille que j'analyse qui est finalement la date de l'absence
Sheets("Retard").Range("b" & Sheets("Retard").Range("b" & Rows.Count).End(xlUp).Row + 1).PasteSpecial Paste:=xlValues 'dans la première cellule vide de la colonne B je colle la plage que j'ai copié (Range("a" & i & ":j" & i).Copy)
End If
'fin de la condition si il y a un x dans la colonne E
Next
'j'ajoute 1 à la valeur de i. i était égale à 2 ( For i = 2 To dl) est maintenant i est égale à 3 pour que la boucle se répète et analyse chaque ligne consécutivement
End If
'fin de la condition si la feuille sur laquelle on travaille <> de retard
Next
' j'augemente la valeur de j de 1 pour que la macro recommence avec la feuille d'après
Sheets("Retard").Activate
'j'active ma feuille retard pour voir le résultat
End Sub
'je clôture ma macroLa générosité de votre fichier en dit long sur votre caractère et reflète toute l'attention bienveillante que vous personnifié par votre avatar. J'apprécie infiniment le temps que vous prenez pour aider et pour faire comprendre. Très touché.
Je le montrerais mardi à la classe si ma prof le permet. Milles mercis. Peut-être pourrais-je un jour vous apporter mon aide pour concocter quelques gourmandises ; je suis cuisinier
Une très belle journée à vous et un excellent week-end aussi
Sincèrement
Serji
C'est pas obligatoire de gratifier car on fait de l'aide gratuite mais si vous y tenez réellement (ce que je peux comprendre car le plaisir de récompenser est aussi bénéfique que celui de recevoir, à l'occasion donnez moi des idées de repas TRES diététique avec vraiment un minimum de graisse saturée. Depuis...dirat-on "un accident de parcours" je dois faire attention à beaucoup de chose y compris mon alimentation
PAreilement, bon week-end !
Je vous ai envoyé un petit MP