Créer liste à partir de cellules sélectionnées sur autre xls

18exemple.xlsm (8.92 Ko)

Bonjour,

Je cherche à développer un petit fichier qui me permettrait d'éditer des brevets:

Une liste de noms en A avec des notes en B.

Si note>10, je veux sélectionner le nom et le mettre dans une nouvelle liste ou il n'y a que les candidats retenus.

Mais cette liste est située dans un autre document, et il peut déjà y avoir dans cette liste les candidats des années précédentes, auquel cas je ne fais que la rallonger.

Quelqu'un aurait il une idée de comment s'y prendre? Notamment mettre les noms à la suite des noms déjà retenus auparavant...

Un petit fichier excel pour y voir plus clair. Chaque feuille est dans un fichier différent en réalité.

Salut Fren et merci d'avoir conclu ton autre demande. Tu peux encore indiquer cet ancien fil comme « Résolu » en cliquant dans l'un de tes messages sur le petit V vert.

resolu

Tu nous as fourni ici un fichier parfaitement vierge

Cordialement.

Je remets le fichier qui lui devrait être bon.

26exemple.zip (4.25 Ko)

Salut,

Je suis désolé, mais je ne sais pas le faire par formule Je te propose alors une solution par macro. A chaque fois que tu sélectionnes la feuille "Liste candidats retenus", elle se réactualise. Tu peux faire un essai en modifiant les notes de la feuille 1. Pour les années à venir, ça devrait fonctionner tout aussi bien (l’année de référence pour les données à réactualiser est prise dans la cellule C2 de la feuille "Liste notes" ; donc si tu inscrits 2014 dans cette colonne C, les données 2013 ne sont plus modifiées).

A te relire.

35exemple-v1.zip (10.75 Ko)

Merci pour cette solution élégante, effectivement ça marche très bien.

Par contre je n'arrive pas à voir ou se situe la macro dans le classeur.

IMPORTANT: Comment adapter ça pour le cas ou les deux feuilles sont dans des classeurs différents?

Et ça peut se faire en mettant un bouton pour déclencher la macro?

EDIT: j'ai trouvé le code

Par contre je ne vois pas ou apparait la feuille "liste des candidats retenus dans le code.

Et quelques petites questions si tu veux bien pour m'aider à comprendre:

  • pourrais-je changer référence en une date de type jj/mm/aaaa
  • que signifie: Range("A"& Rows.Count).End(x1up).Row?
  • ActiveCell.Offset(1, 0).Activate sert à activer la cellule du dessous?

Je résume voir si j'ai compris les grandes lignes du code:

i, référence, DerLig sont définis comme des entiers.

DerLig = la dernière ligne ou il y a du texte en colonne A.

Avec la feuille liste de notes:

si C2 est vide, on sort de la procédure

sinon Référence est l'année présente en C2.

B3 de Liste des candidats retenus est activée

Tant que la cellule active = l'année présente en C2:

si la cellule active est vide, aller à Etiquette (qui est une étape de la procédure du coup)

décaler la cellule active d'un cran en dessous

Loop c'est pour la syntaxe de la boucle?

Rows(...).Delete je ne comprends pas

Pour i de 2 à .Range("A"...). .Row (on n peut pas mettre pour i de 2 à référence du coup?)

Si Bi > 10:

DerLig est incrémenté de 1 (pas bien compris cette ligne)

ADerLig=.Ai (le point devant le A signifie que l'on parle de la feuille ListeNotes?)

i suivant

On repasse à la feuille liste des candidats retenus

On active la case sous la dernière case remplie.

Salut Fren,

Je t’ai proposé une solution par rapport au fichier que tu as présenté et maintenant tu m’indiques que ce n’est pas du tout ce que tu désires ; c’est un peu décourageant

Tu poses maintenant tout plein de questions, une partie en fonction du nouveau travail que tu attends, une partie afin de comprendre le code dont tu ne veux de toute façon plus ; je ne sais plus trop où donner de la tête

Dans tous les cas je pense que ça ne vaut pas la peine de continuer à créer des codes qui ne conviendront pas et qu’il faudra modifier par la suite si tu ne me fournis pas les fichiers réels avec lesquels tu travailles ou au moins des fichiers à la structure exacte, même si tu ne mets que quelques lignes exemples.

A propos, si tu te décides à me fournir ces fichiers, indique-moi bien s'ils sont placés dans le même dossier.

Au sujet d’une partie de tes questions : tu trouveras quelques commentaires dans le nouveau fichier ci-joint. Il est bien entendu que tu comprends beaucoup mieux le déroulement d’un tel code si tu le fais aller au pas-à-pas.

Cordialement.

22exemple-v2.zip (8.08 Ko)

J'avais mis dans mon message qu'il s'agissait de deux fichiers différents mais effectivement j'aurais du les mettre tous deux dans le message.

Je trouve important de comprendre le code comme ça par la suite si je suis confronté à un problème analogue je pourrai essayer de m'en sortir seul ce qui est quand même important.

Merci pour les commentaires, sur le fichier.

Voici donc les deux fichiers qui ne sont pas dans le même dossier.

Le fichier des notes sera sur clé USB dans le fichier notation.

Le fichier avec la liste des brevetés sera lui sur le disque dur D dans le dossier Archives.

21dossiernotes.zip (6.62 Ko)

Encore une question avant que je me lance :

Comme tu indiquais une année dans la colonne B à la place d’une date, je pensais que tu pouvais modifier les notes durant toute l’année et que tu reportais une fois de temps en temps les noms concernés dans l’autre fichier.

Maintenant tu indiques une date dans la colonne B. Est-ce à dire que lorsque cette date est inscrite, les notes ne seront plus modifiées ? Dans un tel cas serait-il possible d’indiquer quelque part (par exemple en colonne D ou dans une colonne cachée plus éloignée) que tel ou tel nom a déjà été traité ?

Ou est-ce que l’idée d’effacer à chaque fois les noms reportés dans le fichier « Dossiers brevetés » et de recommencer à chaque fois le report de tous les noms concernés de l’année en cours – comme je le faisais dans le premier exemple – te convient mieux ?

A te relire.

Oui effectivement, une fois la note établie, elle ne sera plus modifiée, car c'est une moyenne et elle est exportée pour le brevet en fin de cycle, une fois que tout est fini.

La deuxième hypothèse n'est en fait peut être pas la meilleure, effectivement, car je suis susceptible d'avoir des fichiers listes de notes provenant de plusieurs classes différentes avec une même date. En voulant ajouter une classe, on risquerait alors de supprimer la précédente qui est à la même date non?

Du coup peut être que la première est meilleure pour ce problème.

A chacun de tes messages il y a une nouvelle surprise.

Je pensais placer un code dans le fichier « Liste de notes » et que lorsque tu cliques sur un bouton, un code ouvre le fichier « Dossiers brevetés » et y ajoute les noms désirés.

Mais si tu as plusieurs fichiers « Liste de notes », soit tu dois placer le même code sur chacun d’eux, soit tu dois placer un code central et l’appeler depuis chacun de tes fichiers. Mais tout ça risque d’être compliqué. La dernière solution serait de placer le code dans le fichier « Dossiers brevetés » et qu’il passe en revue tous les fichiers « Liste de notes » possibles (il y en a combien, comment se nomment-ils, ont-ils un point commun dans leur nom, sont-ils tous placés dans le même dossier ?) ou qu’il ouvre un fichier « Liste de notes » que tu préciserais par exemple au travers d’un Input Box.

Alors, que faisons-nous ?

Il n'y aura pas plusieurs fichiers 'liste de note" en même temps.

Mettons que j'en traite un le lundi, le suivant n'arrivera que plusieurs jours après. C'est à dire que les professeurs de différentes classes arrivent successivement avec leur clé USB, je traite leur fichier puis je le supprime. Mais tous les fichiers seront au même endroit, et auront le même nom "liste de note".

Effectivement la dernière solution a l'air séduisante, j'ouvre mon fichier liste de notes à partir de mon fichier liste brevetés. Ils auront tous le même nom et le même emplacement.

Salut,

Dans le fichier ci-joint, il y a un code qui ouvre n'importe quel fichier "dossiernotes.xls" au bout du chemin ci-dessous, correspondant à mon PC :

Chemin = "C:\Users\lacy\Documents\"

et qui relève tous les noms qui ont reçu une note plus élevée que 10.

Tu dois remplacer ce chemin par ton propre chemin.

Par contre, si tu lances la macro deux fois de suite, les noms sont repris à double.

Cordialement.

Super merci beaucoup!

J'étudie tout ça tranquillement et je signale dès que c'est ok.

Bonne soirée

EDIT:

Deux petites questions de syntaxe:

  • pour désigner une cellule, pourquoi utiliser tantôt cell, tantôt range?
  • peux tu m'expliquer la syntaxe de Range("A" & Rows.count).End(x1Up).Row stp (et que retourne cette formule comme résultat)?

Salut,

Je ne comprends plus rien ! Tu m’avais remercié pour les commentaires que j’avais placés dans mon fichier Exemple_V2, mais maintenant que j’ouvre à nouveau ce fichier, je n’en vois aucun ; un peu comme si je m’étais trompé de fichier. A tout hasard, je te fourni le fichier Exemple_V2 bis ci-joint.

Personnellement, j’utilise Range ou Cells selon les renseignements que j’ai à disposition. Par exemple si la colonne est à disposition sous la forme d’une variable et que tu l’utilises dans une boucle, la notation Cells(Variable_X, 3) s’impose. Si tu veux faire référence à la cellule AZ3, c’est plus facile d’écrire Range("AZ3") que d’utiliser Cells(3,53). Parfois je commence avec une notation puis je me rends compte en cours de route que l’autre est meilleure dans ce cas-là.

Pour Range("A" & Rows.count).End(xlUp).Row, l’aide Excel t’aurait déjà apporté beaucoup de renseignements (Tu tapes F1 dans l’explorateur VBA après avoir sélectionné un mot clé).

capture 1

Rows.count cherche le nombre de lignes maximal de la version Excel utilisée. Par exemple dans une version Excel 2003, Range("A" & Rows.count) est donc la cellule A65536.

End(xlup) recherche la prochaine cellule utilisée en partant de la cellule tout d’abord précisée et dans le sens indiqué. Dans cet exemple la prochaine cellule utilisée de la colonne A en remontant depuis A65536 (Ca correspond au raccourci Ctrl+Flèche vers le haut).

Row lit le numéro de la ligne de la cellule ainsi trouvée.

Si tu désires par exemple placer un "X" dans la première ligne vide de la colonne A, tu écris l’instruction

Range("A" & Range("A" & Rows.count).End(xlUp).Row + 1) = "X"

Amicalement

12exemple-v2-bis.zip (11.41 Ko)

Je crois que ça marche bien (je ne voulais pas terminer le sujet avant d'être sur qu'il n'y ait pas de problème). Un immense merci pour ton aide (sur ce problème et le précédent), ça m'a énormément aidé, je pense que je n'aurais pas réussi sans ça. Et merci aussi pour ta dispo, c'était vraiment super!

Rechercher des sujets similaires à "creer liste partir selectionnees xls"