Macro Copier coller valeur format tri sur 2 lignes av condition
RésoluJe m'appelle Christiane, retraité, handicapée, 66 ans et n'y connaissant rien du tout en VBA
Je passe 5 à 6 heures par jour à faire des copier coller et tri de données sur Excel 2002.
Je cherche une macro pouvant me faire bénéficier d'un peu de temps libre ce qui à mon age ne serait pas du luxe. Tous vos commentaires sur le sujet me font tourner la tête (cerveau vieillissant, surement) et je ne trouve rien qui corresponde à mes attentes.
Tous les jours que dieu fait, je dois copier coller et trier des valeurs de 120 feuilles à ce jour.
Ces copier coller se font sur une sélection de quelques cellules (8 à 12) et sur 2 lignes.
Je dois exécuter une macro que j'ai tout de même faite avec l'enregistreur de macro, mais celle ci est limité sur la sélection que je lui est faite. J'ai besoin que cette macro s'exécute sur les 2 lignes que je traite aujourd'hui sans toucher aux 2 lignes précédentes (qu'elles a déjà traitée) et sans toucher aux 2 lignes suivantes(qu'elle traitera le lendemain; et ainsi de suite chaque jour qui passe (rassuré vous, certain jour je ne fais rien, repos).
Je ne vois rien dans cette fenêtre pour ajouter un fichier Word qui expliquerait en détail ma demande, peut-être en ajoutant une image, je vais essayé. non cela ne fonctionne pas;
Merci à la communauté de votre aide bienveillante.
Je ne suis pas une habituée des forum, ainsi je tâtonne un peu, mais bon, je vais bien y arriver ?
Comment vous poster un fichier joint, merci Christiane
Hourra j'ai trouvé, voici le lien : https://www.cjoint.com/c/EAvegGBN5Pb
23 réponses
Le besoin est d’automatiser, sous Excel 2002, le traitement quotidien de deux lignes de données issues de 120 feuilles, sans toucher aux lignes déjà traitées ni à celles du jour suivant. Une solution repose sur une procédure événementielle déclenchée automatiquement lorsqu’une date est saisie dans Cake!A, qui effectue copier-coller et tri selon des tableaux définis par les plages et les listes centralisées dans la feuille Basedonnées. Des ajustements ont permis de prendre en compte le nombre de tableaux par feuille et la liste des feuilles à traiter (Basedonnées!R18:R23 et Basedonnées!A18:A23), ainsi que des variations de longueur des plages (par exemple 12 ou 10 cellules). Des tests ont été réalisés, notamment sur le déclenchement et les configurations variables, avec des adaptations pour garantir le bon fonctionnement lorsque le nombre de cellules diffère entre les feuilles.
-
Bonjour Gyrus,
Or, je ne vois aucune donnée à copier dans cette feuille du classeur que tu m'as transmis.
C'est exact, aucune donnée n'est fourni dans feuille "Basedonnées".
Chaque 1er tableau de chaque feuille reçoit des données par le biais de mon 1er classeur. Le classeur que tu as en main comporte normalement une liaison avec mon 1er classeur (les formules n'apparaissent pas dans le classeur que tu as).
Lorsque le 1er tableau de chaque feuille est renseigné, les données doivent être copiées en valeurs(format) dans les 4 tableaux qui suivent, puis triées selon les critères c1, c2, d1, d2 et r.
Si tu as besoin que je renseigne chaque libellé de la feuille "Basedonnées", cela est tout à fait possible, mais il faudrait alors que j'insère une ligne supplémentaire car les données son sur 2 lignes. Et à partir de la feuille "Basedonnées" on devrait alors remplir les 5 tableaux au lieu des 4 précédemment.
Si tu veux que je refasse mon tableau, aucun problème, et je referai un poste.
Je pense que je devrai également faire apparaître 4 colonnes avant le 1er tableau.
Et finalement, je devrai également décaler la colonne "R" de feuille "Basedonnées" pour insérer les 18 colonnes (au lieu des 15 actuellement et que tu as sur ton classeur), car chaque tableau comporte des plages de 18 colonnes. J'ai mis 18 colonnes car parfois il arrive que ces 18 cellules soit renseignées. Vu que ta macro travaille d'une façon très précise, il m'a paru judicieux de les insérer pour être tranquille.
Pour la feuille nommé "123910" il est possible de la supprimer ou de ne pas la traiter en ne faisant pas apparaître son libellé en feuille "Basedonnées". Car si je comprends bien ta macro travaille en se référent à cette feuille, ce qui suppose que si cette feuille"123910" n'apparaît pas dans "basedonnées" malgré qu'elle soit encore présente (mais cette fois à la fin du classeur), la macro ne la prendra pas en compte.
Je note que cette feuille "123910" comporte 2 tableaux, mais que le 2eme tableau effectivement comportant 23 cellules ne subit aucun traitement. Seul le 1er tableau qui lui comporte 18 cellules subi un traitement. En fait le 2eme tableau renseigne le 1er tableau. Ce 2eme tableau comporte donc des liaisons avec mon 1er classeur. Cela n'apparait pas dans le classeur que tu as.
Dans tout les cas, tu décides au mieux. Cela dit je vais commencer à préparer la feuille "Basedonnées" au cas ou tu déciderais que je renseigne les 18 cellules placées devant chaque libellé en espérant que le fait d'insérer une ligne supplémentaire à chaque libellé (cité1à8, cité1, cité2 etc) ne gène pas pour ta macro.
Je remarque (oubli de ma part) que la feuille "RécapCité" présente aussi une particularité. Elle peut également être virée ou non traitée.
A+ Christiane-
Re moi Gyrus
Voici le lien du classeur rectifié au cas ou ! https://www.cjoint.com/c/EAEtLWxSWuy
Christiane -
@Christiane3866Bonjour Christiane,
Avant de poursuivre, je voudrais être certain que le classeur que tu as joint à ton message a bien la même structure que le classeur définitif et que le traitement sera celui que je décris.
Le lancement de la procédure est provoqué par la saisie d'une date dans la colonne A de la feuille "Cité1a8". Cette saisie permet de déterminer la ligne qui doit être modifiée dans tous les tableaux (exemple : dans tous les tableaux, la date du 30/12/14 est placée sur la ligne 209).
Ensuite, on détermine le nombre de cellules à renseigner dans chaque tableau de chaque feuille.
Cela me paraissait important car ce nombre de cellules était différent d'une feuille à une autre. Dans ton nouveau classeur, tous les tableaux ont maintenant 18 colonnes. La détermination du nombre de cellules ne semble plus utile.
Ensuite, on détermine le nombre de tableaux à renseigner dans chaque feuille. Dans ton nouveau classeur, toutes les feuilles ont maintenant 5 tableaux à l'exception de "RécapCité" et "Cité123910"
Pour la feuille "Cité123910", le premier tableau peut être traité. il suffit de déclarer 1 tableau dans la feuille "Basedonnées", le deuxième étant traité manuellement.
Idem pour la feuille " RécapCité ", il suffit de déclarer 2 tableaux dans la feuille "Basedonnées"", le troisième étant traité manuellement.
Je note que :
les tableaux d'une même feuille sont séparés par 4 colonnes.
la première colonne est vide,
la deuxième colonne sert à insérer des "notes" du style 0d, 1d, 2d, 3d.
la troisième colonne est vide,
la quatrième colonne sert à indiquer le type de tri à effectuer (c1, c2,d1,etc.).
Arrive le point critique ...
Le programme effectue la copie des deux lignes spécifiées du premier tableau de chaque feuille.
Ensuite, il effectue tout d'abord un collage spécial valeurs puis un collage spécial format dans les 5 autres tableaux.
Cela suppose que ces deux lignes sont renseignées en amont par une macro dont tu as le secret.
Sommes-nous d'accord pour tout cela ?
A+ -
@GyrusBonsoir Gyrus,
Réponses aux questions posées.
Avant de poursuivre, je voudrais être certain que le classeur que tu as joint à ton message a bien la même structure que le classeur définitif et que le traitement sera celui que je décris.
dans tous les tableaux, la date du 30/12/14 est placée sur la ligne 209).
Oui, ce sera la structure définitive, d'autant plus que le classeur que tu as entre les mains sera le classeur sur lequel je travaillerai.
Une date inscrite en feuille "cité1a8" fait correspondre la même date sur les autres tableaux de toutes les feuilles. Si cette date est inscrite en ligne 209, les autres tableaux seront en ligne 209
Si inscrite en ligne 211, les autres tableaux seront en ligne 211, et ainsi de suite.
Ensuite, on détermine le nombre de cellules à renseigner dans chaque tableau de chaque feuille.
Cela me paraissait important car ce nombre de cellules était différent d'une feuille à une autre. Dans ton nouveau classeur, tous les tableaux ont maintenant 18 colonnes. La détermination du nombre de cellules ne semble plus utile.
J'ai fait des tableaux de 18 colonnes car je pensais que tu avais besoin que chaque ligne est la même quantité de cellules. Mais non, toutes les cellules ne seront pas systématiquement renseignées. certaines peuvent comporter que 10 ou 12 (ou autres) cellules avec une valeur à l'intérieur. Mais cela dit chaque tableau aura néanmoins 18 colonnes à chaque fois et définitivement. Donc si l'on peut garder la détermination du nombre de cellules à renseigner dans chaque tableau, Cela serait un plus.
Je note que :
les tableaux d'une même feuille sont séparés par 4 colonnes.
la première colonne est vide,
la deuxième colonne sert à insérer des "notes" du style 0d, 1d, 2d, 3d.
la troisième colonne est vide,
la quatrième colonne sert à indiquer le type de tri à effectuer (c1, c2,d1,etc.).
Oui c'est cela, et cela ne changera pas. J'ai mis 4 colonnes devant le 1er tableau de chaque feuille pour que la structure soit identique aux 4 autres tableaux qui comporte 4 colonnes aussi, et donc dans ces 4 colonnes du 1er tableau de chaque feuille apparaît bien entendu la date, alors que les autres tableaux, comme tu l'as dit, sont (vide - notes du style 0d,1d, 2d, 3d - vide - tri c1, c2, d1, d2, r)
Le programme effectue la copie des deux lignes spécifiées du premier tableau de chaque feuille.
Ensuite, il effectue tout d'abord un collage spécial valeurs puis un collage spécial format dans les 5 autres tableaux.
Oui, c'est cela. Mais tu peux éviter le collage "spécial format" car tous les tableaux sont déjà formatés.
Je résume à nouveau, on copie la plage concernée dans feuille "Basedonnées" et on colle en "valeurs" dans les 5 tableaux de chaque feuille concernée.
Exemple : basedonnées, plage "cité1à8" B18:S19 est copier puis transférée (collage en valeurs) dans la feuille "cité1à8" en plage E209:V210 , AA209:AR210, AW209:BN210, BS209:CJ210, CO209:DF210 puis on effectue un tri sur chaque tableau selon le critère défini c1, c2, d1, etc.
Idem pour "Cité1", "Cité2" etc..qui seront toutes copiés dans leur feuille respective.
Le jour d'après, les valeurs de la feuille "Basedonnées" changent et rebelote.
Cette feuille "Basedonnées" est renseignée par mon 1er classeur. Il y a donc des liaisons que je ferai apparaître lorsque je récupérai le classeur que tu as entre les mains.
Autant dire que je garderais ta macro sur ce fameux classeur et que je travaillerai définitivement dessus.
J'espère que j'ai su m'expliquer, car je m'en voudrais que tu galères simplement parce que je n'ai pas su être explicite.
En ce moment je teste avec de nouvelles données le 1er classeur. J'ai encore quelques modifications à apporter et cela devrait enfin convenir. beaucoup de travail (2 à 3 jours encore) mais cela vaut toujours le coup.
A+ Christiane -
Christiane à Gyrus
La nuit doit me porter conseil, je pense.
Voilà, j'ai un peu réflèchie et je me suis dit :
Toute mes feuilles sont identiques, et comportent le même nombre de tableaux.
Ne serait il pas plus simple de créer une macro qui agit sur une seule feuille.
Il ne me resterai plus qu'à copier le code de cette macro dans chaque feuille.
La seule chose qu'il faudra que je change dans le code de chaque feuille sera peut être le nom de la feuille sur laquelle ta macro s'appuie pour s'exécuter. Elle agira bien sur, toujours sur la valeur de la date qui elle continuera à s'inscrire automatiquement dans chaque feuille.
Ainsi je supprime la feuille "Basedonnées" qui ne servira à rien. Au lieu d'avoir les données en feuille "Basedonnées" elle seront dans le 1er tableau de chaque feuille. D'ailleurs tu as pu remarquer que le 1er tableau de chaque feuille comporte des données.
Au départ, avant que j'insère la feuille "Basedonnées" c'est ce 1er tableau qui recevait chaque jour les nouvelles données.
Qu'en penses tu ? Plus simple ou plus complexe à mettre en oeuvre ?
sans oublier bien entendu une autre macro qui elle appliquera les couleurs, soit sur toutes les feuilles en même temps, soit sur chaque feuille, et là comme tu me l'as expliqué, je définirai les noms des couleurs qui se référeront soit à la 1ere feuille soit à une autre, peu importe. Il faudra juste que tu m'indique, dans ton code ou je dois faire les modifications si cela ne me saute pas aux yeux.
A voir, avant que tu ne t'attaques à cette dernière macro.
En gros, faire une petite macro que je pourrais répéter dans chaque feuille comportant toujours la détermination du nombre de cellules à renseigner.
Car les 18 colonnes (ou cellules) ne seront pas toujours pleines. Il m'arrive de ne renseigner que 14 cellules sur les 18. Mais les tableaux auront toujours 18 colonnes par plage.
Voilà, si cela peut t'aider à réfléchir au mieux et au plus simple.
Je sais, je ne me rend pas bien compte de l'élaboration d'une macro en fonction de ceci ou de cela et surtout si une macro élaborée pour une feuille peut s'appliquer à l'infini pour d'autres feuilles identiques. Il faudrait peut être que je mange un peu de VBA à chaque désert.
A + Christiane -
Re Re moi,
J'ai peut être dit une bêtise?
Chaque feuille se met à jour de date et de données à chaque fois que je tape une date dans la première feuille.
Si chaque macro s'exécute également sur la date de chaque feuille ou même sur la 1ere, çà va pas le faire ?
Oups, je ferais mieux d'allé dormir !
Christiane
-
-
Bonjour Christiane,
Question : Peut on intégrer les conditions de tris dans la macro existante ?
Je suis sur le coup. Je regarde les adaptations du code pour prendre en compte les différentes conditions de tri. Je te tiens au courant dès que je parviens à le finaliser.
Pour éviter que les formules du style =Si(Ax>0;basedonnées!$C$19;"") renvoient la valeur "0",. Ce zéro me gène un peu dans certaines de mes feuilles.
Il faudrait que tu m'en dises plus. Dans le classeur exemple, je ne vois pas le cas où cette formule renvoie la valeur 0.
Question subsidiaire : Quel est l'intérêt d'écrire ton code dans une feuille, plutôt que dans un module normal en passant par Outil-Macro-Nouvelle macro ?
J'utilise la procédure évènementielle Worksheet.Change() qui se lance lorsqu'une modification de cellule de la feuille est détectée. Cette procédure doit être écrite dans le module de la feuille.
Curieuse comme je suis, je me suis posée la question sur le nom "Gyrus".
Cela à t'il quelque chose à voir avec le cortex cérébrale, et plus précisément les plis du cerveau ? Tu n'es évidement pas obligé de répondre, cela peut être d'ordre privé.
Tu peux aussi penser que cela fait référence au terme latin "Gyrus" ... ou que c'est une contraction de gymnastique russe ... ou que c'est un pseudo sans signification particulière. Comme je suis ouvert, je vais te laisser choisir (ça énerve, hein ?).
A+-
Me revoici !
J'ai effectué l'adaptation du code afin de prendre en compte les différents tris suivant les indications portées dans la plage "Basedonnées!AA2:AA6".
J'ai également ajouté une indication relative au nombre de tableaux à renseigner dans chacune des feuilles (plage "Basedonnées!R18:R23").
Enfin, le traitement est effectué en fonction de la liste des feuilles notée en Basedonnées!A18:A23.
Le programme se lance toujours automatiquement lorsque la date est saisie dans la colonne A de la feuille "Cake".
A tester !...
https://www.cjoint.com/c/EABryPelXLb
A+ -
Christiane à Gyrus
Effectivement, Gyrus à bien des significations
J'élimine le choix du speudo sans signification particulière, ce terme est trop précis pour avoir été choisi au hasard.
Pour la Gymnastique russe, pourquoi pas. Gyrus signifiant également "tour sur lui même" , les dances russes comportent ce genre d'acrobatie.
Pour le gyrus du cerveau, cela me plaisait bien. Plus nous avons de plis et plus notre cerveau occupe de la place en volume, et plus nous sommes censé être intelligent. Tu fais des acrobaties (pirouettes) avec ton cerveau en résolvant des macros.
Finalement, intelligence, pirouette cérébrale, pirouette de dance, cela nous donne les 3 propositions possible; Très énervant effectivement.
Le mieux est de laisser ce choix sans réponse, ainsi le mystère reste entier.
La formule =Si(Ax>0;Basedonnées!$C$19;"") renvoie "0" que si C19 est vide.
C'est pourquoi dans mon classeur tu ne trouves aucun "0" car toute les cellules comportent une valeur.
Imaginons une plage de 10 cellules contiguës, et une 2eme plage identique.
Chaque cellule de la première plage contient une formule qui renvoie une valeur.
La 2eme plage contient des formules qui font référence à la première plage et si une des cellules de la première plage n'a renvoyé aucune valeur, la cellule de la 2eme plage renvoie "0" à cause de la formule de la cellule référence.
Du coup lorsque je traite ma deuxième plage en copier coller(valeurs) là c'est OK, et que je fais un tri en ordre décroissant, j'obtiens les "0" en tête de ligne et le tri en ordre décroissant à la suite de ces fâcheux "0". Mais bon, ce n'est qu'un petit souci minuscule par rapport à tout ce que me fait ta macro.
J'ai fini de remplir ta macro dans mon gros classeur. je me retrouve avec 5 macros qui ne me gène absolument pas, bien au contraire.
Il restera à inclure la macro définitive sur mes 25 feuilles qui causent problème sur les tris différents imposés et enfin à tester le tout dans son ensemble.
Comme j'ai pu le dire auparavant, je lance la ou les macros traitant les (copier coller(valeurs)) et les tris de chaque feuille sans indiquer les chiffres dans mes 3 cases de couleur Orange, jaune et rose vu que je ne connais pas ces chiffres à l'avance.
A la fin du traitement et après avoir étudié les quelques feuilles qui me donne un résultat, je détermine moi même les 3 n° que j'inscrirai dans les couleurs.
Ce n'est qu'après cela que j'applique les couleurs. Pour ce faire je relance la ou les macros pour faire apparaître les couleurs dans chaque feuille.
J'ai du adapter mon classeur et faire plusieurs macros sachant que le fait de relancer les macros, le traitement va travailler cette fois sur ces mêmes cellules qui ont été mise en "valeurs" et subi un tri. Cela évite à certaine plage de cellules de se retrouver dans un ordre différent.
D'où beaucoup de travail, mais cela valait le coup. Et tout marche pour l'instant.
A+ de te lire, Christiane -
@Christiane3866Pour éviter que la formule renvoie 0, il suffit de rajouter une condition :
=SI(ET(Ax>0;Basedonnées!$C$19<>"");Basedonnées!$C$19;"")
Concernant la mise en couleurs des cellules, une solution serait de conserver l'automatisation sur la partie de programme qui réalise la copie / collage / tri et de créer un bouton de commande pour l'application des couleurs de remplissage.
J'attends que tu me donnes le résultat du test sur la dernière version et je me pencherais sur cette adaptation.
A+ -
@GyrusBonsoir,
Christiane à Gyrus,
Ok je télécharge le lien et je teste la "Chose"
Je te tiens au courant de mes résultats.
Résultat à 21:27
la macro bug sur : la feuille "Duchesse"
Ws.Cells(Ligne, 3 + (N - 1) * 12).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Peut etre est ce dû au nombre de cellule (12 cellules en feuille "Basedonnées") alors que je n'en ai que 10 en feuille "Duchesse"
A+ Christiane -
@Christiane3866Bonjour Christiane,
Voici comme promis la nouvelle version avec un bouton de commande pour réaliser l'affectation des couleurs.
https://www.cjoint.com/c/EACpEMKD6ZB
Concernant le bug sur la feuille "Duchesse", il faut que les feuilles aient une structure identique. En particulier, il faut que les tableaux soient séparés par une colonne vide (et une seule).
De plus, le nombre de colonnes à traiter est effectivement déterminé en comptant le nombre de cellules renseignées dans la feuille "Basedonnées".
A+
-
-
Christiane à Maurice,
Test de ta macro,
Ouverture du classeur dans Excel
J'inscris la date en face des lignes du jour à traiter, Ok mes colonnes se remplissent avec les formules inscrites dans les cellules, et là je vois le bouton "macro" sur la feuille "Basedonnées", j'hésite et finalement je clic dessus.
Ta macro vient d'effectuer les copier coller(valeur), les tris voulus.
En regardant chaque onglet, je m'aperçois que l'onglet DUCHESSE n'a pas été traité entièrement, les 2 dernières cellules de la sélection présentent toujours les formules, et toujours sur ce même onglet les données de la 1ere selection situées en col C à L ne se recopie pas dans les col N à W.
Je teste à nouveau ta macro en ouvrant Outil, Macro, Macro et en exécutant chacune des 4 macros y figurant, résultat identique au 1er test.
Je continue à tester ta macro en écrivant une nouvelle date sur les 2 lignes à traiter suivantes, et là, rien ne se passe, mais alors rien du tout.
Ta macro est très différente de celle de Gyrus, mais interessante aussi.
Son avantage : ta macro ne s'éxécute que lorsque je clic sur le bouton macro dans l'onglet "Basedonnées", ce qui me permet lorsque j'incris la date de vérifier parfois de temps à autre si tout se remplit bien, des fois que j'aurais oublié de faire un copie incrémenter vers le bas de toutes mes cellules comportant une formule.
En effet, je remplir mon classeur que d'une cinquantaine de lignes à chaque fois, afin d'éviter de trop surcharger la mémoire ram.
Merci pour cette macro, qui demande quelques modifications, mais bon, ton travail mérite d'être souligné et je te concède néanmoins un verre de champagne, la bouteille sera pour plus tard.
A+ Christiane -
Christiane à Gyrus
La colonne B ne me sert à rien, je l'ai ajouté au cas ou vous voudriez vous en servir pour adapter une condition dans la macro -
Bonjour à Gyrus et Maurice
Je viens de me connecter au site et prend note de vos commentaires.
Je vais télécharger vos liens et regarder cela de près.
NB : j'ai testé le code sur une copie conforme du classeur et le code bloque sur la 11eme ligne du code en partant du bas :
If Cel.Value = Sheets("Basedonnées").Range("CouleurOrange") Then
Intéressant, non ?
Je suppose que c'est un problème de transposition d'un classeur à un autre même si celui-ci est identique
Christiane-
Je suppose que tu n'as pas pris en compte ce que j'ai écrit précédemment.
Si tu dois transcrire ce code sur un autre classeur, note bien que j'ai utilisé des plages nommées "CouleurOrange", "CouleurJaune" et "CouleurRose" pour le traitement des couleurs. Il faudra donc que tu crées ces mêmes noms sur l'autre classeur.
A+ -
@GyrusChristiane à Gyrus,
Bien, voilà une bonne info, créer ces mêmes noms dans l'autre classeur, couleurOrange, CouleurJaune, CouleurRose, parfait.
Et en pratique, comment puis je faire ?
Je viens de tester ton nouveau classeur avec modification de ta macro, et toujours excellente.
Mais il est vrai que lorsque je transpose ce code dans une copie de ce classeur, la même erreur subsiste et donc sur la même ligne qui s'affiche en jaune. J'ai promené ma souris dessus et sur le mot Value il affiche une bulle Cel.Value = 1 , voilà pour l'info. Bon il me reste plus qu'à créer les noms lorsque que je serais comment m'y prendre.
Mais toujours bravo pour ta macro. Je dois allé manger, je reviendrais sur le site pour répondre aux test que j'ai fait sur la macro de Maurice qui comporte des lacunes.
A+ Christiane -
@Christiane3866Procédure pour renseigner un nom :
Sélectionner dans le menu INSERTION et le sous-menu NOM la
commande DEFINIR.
La boîte de dialogue "Définir un nom" apparaît.
Cliquer sur Ajouter puis renseigner le NOM et la référence à ce nom.
Exemple de référence pour "CouleurOrange"
=Basedonnées!B7
puis recommencer pour les deux autres couleurs.
Si tu éprouves des difficultés, fais-moi passer un exemple de ton classeur.
A+ -
@GyrusChristiane à Gyrus
Cool, j'ai configuré comme tu me l'as suggéré et cela fonctionne parfaitement après avoir créé les Noms (CouleurOrange, jaune et rose) en leur indiquant la référence de cellule.
Demain je vais transposer cela dans mon gros classeur en changeant les références des onglet s et quelques bricoles je suppose et te tiens au courant. Possible que cela prenne 1 ou 2 jours, ma dextérité en la matière est loin d'être aiguisée.
Grand merci à ton aide généreuse. Je vais également étudier les remarques ajoutées à ton code. lignes en vert.
Christiane -
@GyrusChristiane à Gyrus
Bonjour néanmoins à la communauté et Maurice
J'ai effectué la transposition de ton code sur mon gros classeur qui finalement comporte 197 feuilles et dont chaque feuille comporte plus ou moins de données. Maintenant je comprend pourquoi je passe autant de temps à faire des copier coller, des tri et application de couleur.
Je teste ta macro au fur et à mesure que je l'intègre dans mon gros classeur. J'adapte quelques modifications sur certaines de mes feuilles car ta macro travaille sur une ligne bien précise de chaque feuille. Les modifications prennent du temps, mais j'y arrive avec un peu de patience.
Ton code fonctionne parfaitement même lorsque je dois l'adapter à certaines feuilles.
Je tombe actuellement sur des feuilles (25 actuellement) qui comportent quelques particularités concernant le tri.
Je m'explique sur une de ces feuilles.
Comme tu le sais, vu que tu as déjà eu mon classeur en "main", je travaille toujours sur 2 lignes et cela se répète chaque jour.
Aujourd'hui, je travaille sur la sélection du jour et je tri en ordre croissant sur la 1 ère ligne
Le lendemain, je vais trier en ordre croissant sur la 2 ème ligne
Le surlendemain je vais trier en ordre décroissant sur la 1 ère ligne
Le jour suivant je vais trier en ordre décroissant sur la 2 ème ligne
Le jour suivant je ne fais aucun tri, la sélection reste en l'état.
Je fais cela manuellement, j'ai dû insérer une colonne vierge pour y noter ma condition du jour, car moi même je m'y perdais.
Voici les annotations de conditions de tris.
C1 = tri croissant sur la 1ere ligne
C2 = tri croissant sur la 2eme ligne
D1 = tri décroissant sur la 1ere ligne
D2 = tri décroissant sur la 2eme ligne
R = rien, pas de tri
Question : Peut on intégrer cela dans ta macro existante ?
Autre petit souci, mais vraiment très petit :
Mes formules du style Si(Ax>0;basedonnées!$C$19;"") me renvoie la valeur "0".
Ce zéro me gène un peu dans certaines de mes feuilles.
Quelle serait la formule adéquate pour que la valeur renvoyée soit "rien" ou"vide" lorsque que la cellule source est vide ?
Question subsidiaire : Quel est l'intérêt d'écrire ton code dans une feuille, plutôt que dans un module normal en passant par Outil-Macro-Nouvelle macro ?
Ta macro ne fonctionne que sur cette feuille ?
De ce pas je vais continuer à transposer ta macro dans mon gros classeur et terminerai après avoir pris connaissance de ton complément de macro qui sera excellent je n'en doute pas.
Curieuse comme je suis, je me suis posée la question sur le nom "Gyrus".
Cela à t'il quelque chose à voir avec le cortex cérébrale, et plus précisément les plis du cerveau ?
Tu n'es évidement pas obligé de répondre, cela peut être d'ordre privé.
Je te dis A+ de te lire avec plaisir.
Christiane
Je te fais passer le lien pour avoir la nouvelle feuille sur le classeur, avec ton code toujours présent dans ce classeur.
https://www.cjoint.com/c/EAzsoi78C7X
-
-
bonjour
Voila une macro qui travail sur toutes les onglets
http://cjoint.com/?3AwmxNPkdji
A+
Maurice -
Bonjour,
Bien dormi ?
Je suis heureux que ma proposition te donne satisfaction et je suis sensible à tes remerciements.
J'ai modifié le code pour la prise en compte du tri en ordre croissant sur la 1ere ligne de la sélection C à J de la feuille "lune".
J'ai ajouté des commentaires dans le code pour t'en faciliter la compréhension.
Si tu dois transcrire ce code sur un autre classeur, note bien que j'ai utilisé des plages nommées "CouleurOrange", "CouleurJaune" et "CouleurRose" pour le traitement des couleurs. Il faudra donc que tu crées ces mêmes noms sur l'autre classeur.
Je n'ai pas traité la colonne B car je ne sais pas comment tu utilises cette indication.
Bon courage !
https://www.cjoint.com/c/EAwjFW7bF6t
A+ -
Christiane à Gyrus
Pendant que tu étais parti reposer tes neurones, j'ai testé ton code.
Waouuu, C'est ce qu'on appelle un "pu...n" de code.
Je l'ai testé en long, en large, en travers, je l'ai secoué dans tous les sens, il n'a pas bronché d'un poil.
Au début que je l'ai testé, je me suis aperçu qu'il appliquait les couleurs en même temps. J'ai dis "zut", car je ne connais le résultat des points attribué à chaque n° qu'à la fin des (copier coller et tri) d'où j'en détermine 3 numéros à qui j'attribue une couleur.
Comme tu m'avais prévenu que tu avais basé le lancement de ton code sur la date que j'inscrivais en feuille "Cake", j'ai recommencé le test en supprimant les chiffres que j'inscris manuellement dans mes 3 cases B7, C7, D7 des couleurs, et là cool ton code s'est déroulé sans appliquer les couleurs, et avec un peu de réflexion (il me reste quelques neurones) j'ai supprimé la date en question de la feuille "Cake" et je l'ai inscrite à nouveau, Bingo il me refait la même chose en appliquant les couleurs.
Je m'aperçois que ton code en vraiment génial car je peux recommencer les lignes d'avant au cas ou je me serais trompé et ce simplement en supprimant la date, puis en réécrivant ma base de données et en retapant la date concernée dans la feuille "Cake" absolument fantastique, je m'attendais pas à cela.
Franchement, ton boulot sur ma requête est au delà de mes espérances; tu as du bosser comme un fou furieux.
Et puis je me suis dis qu'il devait y avoir une erreur quelques part, on ne peut pas pondre un code parfait du 1er coup.
Et bien oui, j'ai trouvé l'erreur (que tu as du omettre par inadvertance), elle se trouve dans la feuille "lune" le tri en ordre croissant sur la 1ere ligne de la sélection C22:J22) ne se fait pas.
En conclusion, je ne dois jamais supprimer la feuille "Cake", pas de soucis.
Je vais de ce pas faire un somme et me remettre au boulot demain après midi.
Merci et à bientôt de te relire, je devrais ouvrir une bouteille de champagne pour ce site et des bravos répétés pour les personnes comme toi, qui ose donner un vrai coup de main à des personnes comme moi, vraiment un très grand Merci.
Tu n'imagines pas le bien que cela me fait de savoir que je ne vais plus passer des heures interminables à faire des copier coller tri et applications de couleurs.
L'émotion à été très forte et je suis restée ébahie devant le travail que fait ta macro.
Christiane -
Avant de chercher à comprendre le code, il serait bien que fasses l'essai pour t'assurer que cela correspond à ta demande.
Si tel est le cas, je pourrais ensuite apporter des commentaires sur les points qui te paraitront brumeux.
Bon sur ce, je vais me libérer les neurones et faire un gros dodo !
A -
Christiane à Gyrus,
Non pas encore, j'ai recopier ton code en fichier Word, au cas ou je l'effacerais pas hasard.
En ce moment je suis en train de le lire pour essayer de comprendre chaque expression, mais il est clair qu'il faudra que je cherche quelque part, afin d'insérer dans ton code une description de chaque expression. J'ai envie de comprendre ce fichu code dont je rêve tant d'avoir. Je suis têtue, je prendrais le temps qu'il faut pour le comprendre.
Pour l'instant cela reste indéchiffrable.
Je vais m'amuser, bon je vais essayé de tester ton code que tu as pris soin de m'écrire, A+ Christiane -
As-tu testé le code en saisissant une date en A24 de la feuille "Cake" ?
A+ -
Christiane à Gyrus,
Je viens d'ouvrir ton lien qui représente mon classeur, mais je n'ai rien trouvé de plus que ce qu'il y avait dedans.
Quelles modifications as tu apporté à cette feuille "Cake" ?
Je viens de trouver, je devais cliquer droit sur l'onglet de la feuille et visualiser le code, Woua dur dur j'apprend vite, obligé si on veut suivre, cela me fait du bien de chercher un peu, mais c'est pas evident les manips
A + Christiane, -
Bonsoir Gyrus,
Merci, je vais saisir ton lien et le tester
Je viens de tester le code optimisé de Maurice et à priori cela fonctionne, mais c'est juste un copier coller(valeur) sur lui même.
Je pense que plus tard, il élaborera ce bout de code, car il manque le tri et le plus important, que cette macro s'applique sur mes 2 lignes du jour, puis sur les 2 lignes du lendemain (qui deviendront à leur tour les 2 lignes du jour) sans toucher aux 2 lignes de la veille et encore moins aux 2 lignes suivantes qui contiennent des formules, sinon je les perdrais.
Comment dois-je faire pour poster le code que je viens de tester, et le mettre à l'intention de Maurice pour lui montrer la finalité du code ?
Je fais un copier coller dans l'onglet code de cette fenêtre ?
Christiane -
Bonsoir,
Voici une proposition avec une procédure évènementielle qui se lance automatiquement lorsque tu saisis une date dans la colonne A de la feuille "Cake".
Les opérations que tu as citées sont réalisées par cette procédure.
A tester ....
https://www.cjoint.com/c/EAvw2W8GKG9
A+ -
Bonsoir
voila un debut de ta macro si tu veux la modifier
Sub Test() Application.ScreenUpdating = False 'Sheets("Cake").Select Sheets(Feuil2.Name).Select Range("C22:J23").Copy Range("C22").PasteSpecial xlPasteValues Range("A23").Select Sheets(Feuil3.Name).Select Range("C22:J23").Copy Range("C22").PasteSpecial xlPasteValues ' ' Application.CutCopyMode = False End Sub
bon je vais faire dodo
A+
Maurice-
Christiane à Maurice
Je te remercie, je vais tester ce bout de macro
Application.ScreenUpdating = False, j'ai vaguement lu que cette expression servait à rendre plus rapide la macro et (ou) à éviter l'instabilité de l'écran (scintillement).
Est-ce vraiment utile dans mon cas, la macro ne va s'appliquer que sur 2 lignes, certes sur plusieurs feuilles, mais rein de bien méchant je pense ?
Bonne nuit
A +
-
-
Bonjour ou bonsoir à la communauté
Bonsoir à Gyrus et Maurice
Réponse aux 2 intervenants
Effectivement la base de données comprend 12 cellules, il y a erreur de ma part,
j'aurais du enlever 2 cellules en feuille "basedonnées", je n'avais pas fait attention. bêtise de ma part impardonnable.
Mon classeur n'est qu'un exemple, Je l'ai fais pour le forum et ne l'ayant pas testé, je ne m'en suis pas aperçu. Je m'aperçois de plus que les chiffres recopier ne correspondent pas. On aurait dû trouver en feuille "Duchesse" les valeurs respectives suivantes une fois triées en ordre décroissant, soit : 22 18 40 5 20 12 4 7 24 54, je suis confondue d'avoir fais une telle erreur, il est vrai que j'ai ajouté cette feuille au dernier moment car je me suis aperçu que certaines feuilles de mon gros classeur comportaient ce type d'arguments.
Cela est à corriger sur le classeur que vous avez, sinon je vous envois un nouveau lien avec les rectifications.
Pour Maurice, le fait de copier coller valeur et (ou) format sur la même plage, supprime les formules de mes plages sélectionnées (Cake à Duchesse) pour n'y faire figurer que les valeurs, ainsi je peux les trier sur les valeurs et non pas sur les formules.
Je suis disponible pour d'autres remarques, en espérant que je n'ai plus d'erreurs dans le classeur;
Christiane -
bonjour
ta macro copy sur lui meme
donc ca sert a quoi ?
A+
Maurice -
La réalisation de cette macro ne me parait pas poser de problème particulier.
Peux-tu me dire pourquoi la ligne de données "Duchesse" de la feuille "Basedonnées" comprend 12 données alors que dans la feuille "Duchesse" on n'en retrouve que 10 ?
A+ -
Re christiane à Gyrus,
Oups, le lien ne veut pas se copier sur cette fenêtre.
Pourquoi, je ne sais pas. Je fais différentes manipulations, mais pas moyen.
C'est fâcheux.
Sinon le lien est https://www.cjoint.com/c/EAvr4kOtIDr
J'ai écris le lien avec le clavier
mais j'arrive pas à le coller, je viens de le tester et cela fonctionne tout de même, vous pouvez donc ouvrir le fichier, Ouf c'est rassurant -
Bonjour, Gyrus
merci d'intervenir sur ma demande.
Vous (ou tu) voudrais mon classeur excel ? Ok je vais essayer de me débrouiller pour te le mettre en fichier joint. Je dis cela car je viens de découvrir qu'il fallait que je click sur " voir mes discussions suivies" pour apercevoir ton message.
Comme quoi, je découvre les manipulations sur les forums.
Mais bon, c'est une expérience comme une autre
A tout de suite, pour ce fameux classseur
Christiane
- 1
- 2