Extraire plusieurs lignes
Bonjour,
J'ai une série de données dans laquelle je souhaite extraire des lignes entières mais le critère de sélection est compliqué pour moi et je bloque.
Mes données se présentent sous cette forme:
Colonne A Colonne B Colonne C
Patient 1 N° prélèvement 1 Date prélèvement 1
Patient 1 N° prélèvement 2 Date prélèvement 2
Patient 1 N° prélèvement 3 Date prélèvement 3
Patient 1 N° prélèvement 4 Date prélèvement 4
Patient 2 N° prélèvement 1 Date prélèvement 1
Patient 2 N° prélèvement 2 Date prélèvement 2
Patient 3 N° prélèvement 1 Date prélèvement 1
Patient 3 N° prélèvement 2 Date prélèvement 2
Patient 3 N° prélèvement 3 Date prélèvement 3
Patient 3 N° prélèvement 4 Date prélèvement 4
Patient 3 N° prélèvement 5 Date prélèvement 3
Je souhaite retenir dans une nouvelle feuille les lignes entières de tous les derniers prélèvements pour chaque patient, soit n'avoir que le prélèvement 4 pour le patient 1, le prélèvement 2 pour le patient 2 et le prélèvement 5 pour le patient 3, etc.
On peut soit s'aider de la colonne B en retenant le chiffre le plus grand? soit de la colonne C en retenant la date la plus récente? mais est-ce qu'une formule existe pour cela?
Je vous remercie pour votre aide
Elodie
J'ai une série de données dans laquelle je souhaite extraire des lignes entières mais le critère de sélection est compliqué pour moi et je bloque.
Mes données se présentent sous cette forme:
Colonne A Colonne B Colonne C
Patient 1 N° prélèvement 1 Date prélèvement 1
Patient 1 N° prélèvement 2 Date prélèvement 2
Patient 1 N° prélèvement 3 Date prélèvement 3
Patient 1 N° prélèvement 4 Date prélèvement 4
Patient 2 N° prélèvement 1 Date prélèvement 1
Patient 2 N° prélèvement 2 Date prélèvement 2
Patient 3 N° prélèvement 1 Date prélèvement 1
Patient 3 N° prélèvement 2 Date prélèvement 2
Patient 3 N° prélèvement 3 Date prélèvement 3
Patient 3 N° prélèvement 4 Date prélèvement 4
Patient 3 N° prélèvement 5 Date prélèvement 3
Je souhaite retenir dans une nouvelle feuille les lignes entières de tous les derniers prélèvements pour chaque patient, soit n'avoir que le prélèvement 4 pour le patient 1, le prélèvement 2 pour le patient 2 et le prélèvement 5 pour le patient 3, etc.
On peut soit s'aider de la colonne B en retenant le chiffre le plus grand? soit de la colonne C en retenant la date la plus récente? mais est-ce qu'une formule existe pour cela?
Je vous remercie pour votre aide
Elodie
4 réponses
-
Si tu joins un fichier Excel avec quelques données fictives
(mais semblables aux données réelles), alors j'essayerai
de t'aider pour ta seconde étape.
--------------------------------------
VBA est l'abréviation de Visual Basic for Application ; c'est un
langage de programmation, qui est compris par Excel.
Quand j'écris « code VBA », c'est synonyme de « programme
en VBA » ou « programme informatique en VBA ».
Un programme est une suite d'instructions pour réaliser le travail
voulu ; enregistrer ou écrire une macro VBA fait qu'on obtient
un code VBA.
--------------------------------------
Indications à suivre pour lire le code VBA d'un fichier Excel,
par exemple le code VBA de mon fichier "Patients".
Ouvre le 1er fichier "Patients" que j'avais joint ;
Alt F11 => ça ouvre une fenêtre pour Microsoft Visual Basic
(cela sans fermer ta fenêtre Excel).
Ne le fais pas maintenant, mais sache qu'il te suffira de refaire
Alt F11 pour retourner sur ta feuille Excel.
À gauche, tu peux voir la ligne « Modules », et juste dessous,
il y a « Module1 » ; il pourrait y avoir d'autres modules, mais
pour ce projet VBA, un seul module suffit ; ce seul module est
déjà ouvert, c'est pourquoi tu peux en voir le code dans la
fenêtre de droite.
Si ce module était fermé, il faudrait faire un double clic sur
la ligne « Module1 » (à gauche) pour l'ouvrir et le visualiser
dans la fenêtre de droite.
Autre possibilité pour ouvrir Module1 : à gauche, sélectionner
la ligne « Module1 », puis F7 (ou Entrée).
--------------------------------------
Si tu as Excel 2003 (ou une version antérieure), ton fichier réel
est "Patients.xls" (qui peut éventuellement contenir des macros,
donc du code VBA).
Indiques-moi quelle est ta version d'Excel (2003, 2007, ou autre).
Si tu as Office 2016 tu as donc Excel 2016.
--------------------------------------
Si tu as Excel 2007 (ou une version ultérieure) :
Tu peux ouvrir un ancien fichier .xls ; mais attention :
Ton fichier réel est probablement "Patients.xlsx", donc on ne peut
pas y mettre de macros ; il faut d'abord le convertir en un fichier
"Patients.xlsm" !
Ouvre ton fichier réel ; F12 => Fenêtre « Enregistrer sous » ;
laisse le même « Nom de fichier : » Patients, et juste dessous,
pour « Type : », choisis « Classeur Excel (prenant en charge
les macros) » ; clic sur bouton « Enregistrer » : c'est ce qui
crée "Patients.xlsm" (où tu pourras mettre du code VBA) ;
"Patients.xlsx" existe toujours, et tu pourras le supprimer
après avoir vérifié (par précaution) que la conversion est
réussie : tu peux ouvrir "Patients.xlsm" (et tout y est).
--------------------------------------
Indications à suivre pour copier un code VBA dans ton fichier
de données réel "Patients.xlsm".
Le but est d'y créer « Module1 », puis d'y placer mon code VBA
par un simple copier / coller.
Ouvre ton fichier réel ; Alt F11 => fenêtre Visual Basic ;
Alt i m => insertion d'un nouveau module => Module1 ;
comme ce module vient juste d'être créé, il est vide ;
c'est là que tu devras coller mon code VBA.
Pour faire la copie de ce code, tu peux partir de celui que tu as
vu dans mon fichier "Patients", mais pour t'éviter d'ouvrir deux
fichiers en même temps, je vais te simplifier la tâche en notant
ci-dessous ce code VBA :
Option Explicit Sub Essai() Worksheets(1).Select: Application.ScreenUpdating = False Dim dlig As Long, lig1 As Long, lig2 As Long: lig1 = 2: lig2 = 2 With Worksheets(2) dlig = .Range("A" & Rows.Count).End(xlUp).Row If dlig > 1 Then .Range("A2:C" & dlig).ClearContents dlig = Range("A" & Rows.Count).End(xlUp).Row Do If Cells(lig1 + 1, 1) <> Cells(lig1, 1) Then Range(Cells(lig1, 1), Cells(lig1, 3)).Copy .Cells(lig2, 1) lig2 = lig2 + 1 End If lig1 = lig1 + 1 Loop Until lig1 = dlig + 1 End With Worksheets(2).Select End Sub
Sélectionne donc tout mon code VBA ci-dessus pour en faire
un copier / coller dans le Module1 vierge de ton fichier réel.
C'est fait : ton fichier Excel contient maintenant le code VBA
adéquat.
Alt F11 => retour à ta feuille Excel ; mais attention : il reste
une dernière étape par rapport à mon fichier : mettre en place
le raccourci clavier Ctrl e qui lance la macro Essai().
Cette dernière étape est facultative, mais très pratique.
--------------------------------------
Alt F8 => fenêtre « Macro » ; cette fenêtre liste toutes les macros,
mais ici il n'y en a qu'une seule : « Essai ».
Sélectionne la ligne « Essai » ; ensuite :
a) Ne le fais pas, mais tu pourrais cliquer à droite sur le bouton
« Exécuter » pour lancer la macro « Essai ».
b) Clique à droite sur le dernier bouton du bas « Options... »
=> fenêtre « Options de macro ».
c) Ton curseur de texte est sur une petite case vide, à droite
du texte « Ctrl+ » ; tape la lettre e (en minuscule) et valide :
clic sur le bouton « OK » ; retour à la fenêtre précédente ;
clic sur croix blanche sur fond rouge (coin haut droit) pour
fermer cette fenêtre ; c'est fait => Ctrl e lance la macro.
--------------------------------------
Bien sûr, n'oublie pas d'enregistrer ton classeur Excel pour
conserver toutes les modifications que tu viens d'apporter
(cela enregistre aussi le code VBA de Module1, qui fait
partie intégrante de ton fichier "Patients.xlsm").
--------------------------------------
Remarque : la description de toutes les étapes à suivre est
très longue, mais ça va très vite quand on y est habitué.
C'est bien plus pratique et plus simple de copier mon code VBA
dans ton fichier réel que de copier les données de ton fichier
réel dans mon fichier !
J'espère que tu arriveras à tout faire ! Si tu bloques sur quelque
chose, indiques-moi où tu coinces ; merci de m'avertir si tu as
réussi à tout faire (copie du code VBA dans ton propre fichier
réel et mise en place du raccourci clavier).