Extraire plusieurs lignes

[Fermé]
Signaler
Messages postés
2
Date d'inscription
samedi 3 juin 2017
Statut
Membre
Dernière intervention
4 juin 2017
-
 Luc -
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

4 réponses

Fichier Excel 2007 : https://mon-partage.fr/f/P6GDXq2y/
Voir Feuil2, puis Feuil1, et faire Ctrl e
Messages postés
10146
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
13 octobre 2021
2 227
Bonjour à tous les deux

Une autre version qui ne nécessite pas que la colonne "patient" soit triée
https://mon-partage.fr/f/7vDKKqQk/

Cdlmnt
Messages postés
2
Date d'inscription
samedi 3 juin 2017
Statut
Membre
Dernière intervention
4 juin 2017

Bonjour à tous les 2
Merci beaucoup!
Je ne sais pas du tout utiliser les macros mais en copiant mes données dans vos fichiers cela fonctionne parfaitement et cela me simplifie énormément.
Mes données de départ sont systématiquement trier dans l'ordre croisant des patients donc les 2 fichiers fonctionnent.
J'ai une préférence pour le fichier de Luc car le nom de patient est sous la forme "1-1", "77-6", etc. et dans votre fichier ccm81, je n'arrive pas à faire garder ce format de cellule dans la feuille "extrait". De plus, lorsqu'une case est vide pour la date de prélèvement, le fichier de Luc la laisse vide, dans votre fichier ccm81 une valeur apparaît (facile à repérer ceci dit).

Cela m'a permis de bien avancer dans mon travail. Toutefois, c'était la 1ère étape de mon objectif final. Je veux maintenant comparer les dates de cette extraction à des dates dans une autre feuille mais la liste des patients n'est pas strictement identique (différence entre 2 dates puis calculer le nombre de dates supérieure ou égale à 1 an).
Je vais continuer mon investigation, je ne suis pas sûre d'avoir le droit de poser plusieurs problèmes différents sous un seul fil.

Encore merci
Cordialement
Elodie
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).