Réduire code VBA
Résolu
mdlrt44
Messages postés
25
Date d'inscription
Statut
Membre
Dernière intervention
-
mdlrt44 Messages postés 25 Date d'inscription Statut Membre Dernière intervention -
mdlrt44 Messages postés 25 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je vous expose mon problème, j'ai un fichier, pour lequel j'ai créer une VBA qui fonctionne, seul problème, mon code est très redondant et long, ce qui fait énormément ramer mon fichier. Je voudrais savoir s'il serait possible de réduire ce code :
Pour expliquer un peu ce code, j'ai un onglet récap et des onglets pour les mois de l'année. Je souhaite que lorsqu'une couleur est renseignée dans un onglet mois, cette couleur se reporte immédiatement dans la case correspondante dans l'onglet mois.
Voici un fichier pour exemple.
https://mon-partage.fr/f/o1uki3k4/
Celui-ci n'est pas complet mais je pense que j'arriverais à adapter la solution à mon fichier définitif.
Dans l'attente de vos solutions,
Cordialement,
Je vous expose mon problème, j'ai un fichier, pour lequel j'ai créer une VBA qui fonctionne, seul problème, mon code est très redondant et long, ce qui fait énormément ramer mon fichier. Je voudrais savoir s'il serait possible de réduire ce code :
Sub Worksheet_Activate() Application.ScreenUpdating = False For Each cell In Range("D5:W200") cell.Interior.Color = Sheets("DEC-19").Cells(cell.Row, cell.Column).Interior.Color Next For Each cell In Range("X5:AV200") cell.Interior.Color = Sheets("JANV-20").Cells(cell.Row, cell.Column - 20).Interior.Color Next For Each cell In Range("AW5:BP200") cell.Interior.Color = Sheets("FEV-20").Cells(cell.Row, cell.Column - 45).Interior.Color Next For Each cell In Range("BQ5:CJ200") cell.Interior.Color = Sheets("MAR-20").Cells(cell.Row, cell.Column - 65).Interior.Color Next For Each cell In Range("CK5:DI200") cell.Interior.Color = Sheets("AVR-20").Cells(cell.Row, cell.Column - 85).Interior.Color Next For Each cell In Range("DJ5:EC200") cell.Interior.Color = Sheets("MAI-20").Cells(cell.Row, cell.Column - 110).Interior.Color Next Application.ScreenUpdating = True End Sub
Pour expliquer un peu ce code, j'ai un onglet récap et des onglets pour les mois de l'année. Je souhaite que lorsqu'une couleur est renseignée dans un onglet mois, cette couleur se reporte immédiatement dans la case correspondante dans l'onglet mois.
Voici un fichier pour exemple.
https://mon-partage.fr/f/o1uki3k4/
Celui-ci n'est pas complet mais je pense que j'arriverais à adapter la solution à mon fichier définitif.
Dans l'attente de vos solutions,
Cordialement,
Configuration: Windows / Firefox 50.0
A voir également:
- Réduire code VBA
- Comment réduire la taille d'un fichier - Guide
- Code ascii - Guide
- Code puk bloqué - Guide
- Reduire taille image - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
10 réponses
Re
Quand tu disais très long je pensais quelques minutes, 20 s c'est encore acceptable mais tu traites combien de mois ? tous ceux de l'année ou seulement quelques uns?
Mettre une variable pour quoi ? pour boucler sur les feuilles mensuelles avec un FOR NEXT, c'est possible mais je doute que ça raccourcisse bien le temps de traitement et le problème est que tous les mois n'ont pas le même nombre de semaines donc pour placer correctement dans Récap on ne peut pas le faire de manière récursive, il faudrait rechercher la colonne avec la date du premier jour de la plage mensuelle copiée, ce qui rajouterait des lignes de code
Envoie moi ton fichier réel en message privé si tu ne veux pas le diffuser sur le forum, je regarderai le temps de traitement que ça met chez moi et j'essayerai de voir d'où ça vient
Quand tu disais très long je pensais quelques minutes, 20 s c'est encore acceptable mais tu traites combien de mois ? tous ceux de l'année ou seulement quelques uns?
Mettre une variable pour quoi ? pour boucler sur les feuilles mensuelles avec un FOR NEXT, c'est possible mais je doute que ça raccourcisse bien le temps de traitement et le problème est que tous les mois n'ont pas le même nombre de semaines donc pour placer correctement dans Récap on ne peut pas le faire de manière récursive, il faudrait rechercher la colonne avec la date du premier jour de la plage mensuelle copiée, ce qui rajouterait des lignes de code
Envoie moi ton fichier réel en message privé si tu ne veux pas le diffuser sur le forum, je regarderai le temps de traitement que ça met chez moi et j'essayerai de voir d'où ça vient
Bon ça ne vient pas de la macro mais des capacités de ton ordi je pense
Chez moi cela met une seconde !
Et il y a peu de chances que ce soient les infos enlevées qui soient la cause de cette accélération
Chez moi cela met une seconde !
Et il y a peu de chances que ce soient les infos enlevées qui soient la cause de cette accélération
Bonjour
"lorsqu'une couleur est renseignée dans un onglet mois, cette couleur se reporte immédiatement dans la case correspondante dans l'onglet mois."
????
"lorsqu'une couleur est renseignée dans un onglet mois, cette couleur se reporte immédiatement dans la case correspondante dans l'onglet mois."
????
Bonjour
Au lieu de boucler sur toutes les cellules tu peux copier toute la plage et la coller en collage spécial mise en forme uniquement ce qui donnerait par ex appartement pour janvier :
Attention la plage à copier ne doit comporter aucune cellule fusionnée
Je rappelle qu’il faut à tout prix éviter les cellules fusionnées quand on veut utiliser des macros
On peut avantageusement les remplacer par un centrage du texte sur plusieurs colonnes (sélectionner les cellules adjacentes puis Format de cellules - Alignement - Horizontal choisir Centré sur plusieurs colonnes)
Cdlmnt
Via
Au lieu de boucler sur toutes les cellules tu peux copier toute la plage et la coller en collage spécial mise en forme uniquement ce qui donnerait par ex appartement pour janvier :
Sheets("JANV").Range("D5:AB200").Select Selection.Copy Sheets("RECAP").Select Range("X5").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False
Attention la plage à copier ne doit comporter aucune cellule fusionnée
Je rappelle qu’il faut à tout prix éviter les cellules fusionnées quand on veut utiliser des macros
On peut avantageusement les remplacer par un centrage du texte sur plusieurs colonnes (sélectionner les cellules adjacentes puis Format de cellules - Alignement - Horizontal choisir Centré sur plusieurs colonnes)
Cdlmnt
Via
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
1:
"Je souhaite que lorsqu'une couleur est renseignée dans un onglet mois, cette couleur se reporte immédiatement dans la case correspondante dans l'onglet mois."
le code que tu nous montre ne correspond pas à cette demande et ne nous sert à rien
2:
dans la feuille Recap il y a 2 lignes par tech. on b=ne retrouve que ces 2 lignes pour le tech1
3:
il y a t'il une liste des couleurs utilisées? si oui la quelle; bleu, jaune, rose....
ta demande m' apparaît ainsi comme mal préparée et sent la planche glissante ! Dis toi bien que l'on a que ce que tu écris et montre pour t'aider
"Je souhaite que lorsqu'une couleur est renseignée dans un onglet mois, cette couleur se reporte immédiatement dans la case correspondante dans l'onglet mois."
le code que tu nous montre ne correspond pas à cette demande et ne nous sert à rien
2:
dans la feuille Recap il y a 2 lignes par tech. on b=ne retrouve que ces 2 lignes pour le tech1
3:
il y a t'il une liste des couleurs utilisées? si oui la quelle; bleu, jaune, rose....
ta demande m' apparaît ainsi comme mal préparée et sent la planche glissante ! Dis toi bien que l'on a que ce que tu écris et montre pour t'aider
Bonjour,
1- et bien si, lorsque je met une couleur dans un onglet "mois" la couleur se renseigne automatiquement à l'ouverture de l'onglet récap, à l'utilisation c'est "immédiat". S'il existe des solutions meilleures je suis intéressé.
2- Je ne suis pas sur d'avoir bien compris quel est le problème. Mais concernant le fait qu'il y ai 2 ligne, la première correspond au nom du Tech la deuxième ligne la localisation.
3- Oui et non, des couleurs vont être récurrentes mais il risquent d'y en avoir d'autres. De plus ce ne sont pas que des "CoulorIndex".
J'ai bien conscience que vous avez uniquement les informations que je vous donne. Je pensais avoir donner suffisamment d'informations. Je n'ai, par contre, pas forcément conscience des informations qui peuvnt être nécessaire pour proposer des solutions différentes.
Cordialement,
1- et bien si, lorsque je met une couleur dans un onglet "mois" la couleur se renseigne automatiquement à l'ouverture de l'onglet récap, à l'utilisation c'est "immédiat". S'il existe des solutions meilleures je suis intéressé.
2- Je ne suis pas sur d'avoir bien compris quel est le problème. Mais concernant le fait qu'il y ai 2 ligne, la première correspond au nom du Tech la deuxième ligne la localisation.
3- Oui et non, des couleurs vont être récurrentes mais il risquent d'y en avoir d'autres. De plus ce ne sont pas que des "CoulorIndex".
J'ai bien conscience que vous avez uniquement les informations que je vous donne. Je pensais avoir donner suffisamment d'informations. Je n'ai, par contre, pas forcément conscience des informations qui peuvnt être nécessaire pour proposer des solutions différentes.
Cordialement,
Bonjour
Renvoie moi ton fichier modifié et la macro que tu as faite en t'inspirant de mon dernier post et je regarderai
Cdlmnt
Renvoie moi ton fichier modifié et la macro que tu as faite en t'inspirant de mon dernier post et je regarderai
Cdlmnt
Bonjour,
Décidément , ta demande est floue et change au fur et à mesure des post
Donc tiré de mon grenier, le choix d'une couleur RVB ( la + complète) d'ailleurs renvoyée quand tu choisis une couleur Excel dans les menus, (procédure que tu lanceras par une macro événementielle double clic ou clic droit de souris dans cellule voulue) En y ajoutant la localisation (mois, date ou colonne, trak), il te sera facile de transférer la couleur dans la feuille "recap" au bon endroit et immédiatement comme tu le désires
photo de la procédure

Rappel: sur les forums, on ne fait pas à la place, on aide sur une difficulté
Décidément , ta demande est floue et change au fur et à mesure des post
Donc tiré de mon grenier, le choix d'une couleur RVB ( la + complète) d'ailleurs renvoyée quand tu choisis une couleur Excel dans les menus, (procédure que tu lanceras par une macro événementielle double clic ou clic droit de souris dans cellule voulue) En y ajoutant la localisation (mois, date ou colonne, trak), il te sera facile de transférer la couleur dans la feuille "recap" au bon endroit et immédiatement comme tu le désires
photo de la procédure

Rappel: sur les forums, on ne fait pas à la place, on aide sur une difficulté
Merci, je vais voir si j'arrive à l’adapter et à obtenir ce que je veux.
Je ne pense pas que ma demande soit floue et encore moins qu'elle change au fur et à mesure, on ne doit juste pas se comprendre mais peu importe.
Je n'attend en aucun cas que l'on fasse à ma place ! Je ne suis pas un pro, j'essaye d'apprendre au fil de mes besoins, les forums me permettent de m'ouvrir à des solutions que je ne pensais même pas possible. Visiblement ma demande/mon post vous déplais depuis le début, mais il n'y a aucun problème, vous n'êtes pas obligé d'y répondre si il y a un quelque chose qui vous dérange, je ne le prendrais pas mal.
Cordialement,
Je ne pense pas que ma demande soit floue et encore moins qu'elle change au fur et à mesure, on ne doit juste pas se comprendre mais peu importe.
Je n'attend en aucun cas que l'on fasse à ma place ! Je ne suis pas un pro, j'essaye d'apprendre au fil de mes besoins, les forums me permettent de m'ouvrir à des solutions que je ne pensais même pas possible. Visiblement ma demande/mon post vous déplais depuis le début, mais il n'y a aucun problème, vous n'êtes pas obligé d'y répondre si il y a un quelque chose qui vous dérange, je ne le prendrais pas mal.
Cordialement,
Re
Ton fichier en retour
https://mon-partage.fr/f/gzFrRT7a/
1) il y avait des liaisons dans la feuille RECAP que j'ai supprimé
2) J'avais omis dans la macro de décomposer le Select de la Sheet et le Select de la Range
3) la macro doit être dans un module(je l'ai mise en Module 1) et pas dans le worksheet de la feuille Recap
4) Appeler la macro par le raccourci ctrl+k
L'appel par un bouton ou par la procédure événementielle de la feuille Recap fait buguer, je ne sais pas pourquoi !
Cdlmnt
Ton fichier en retour
https://mon-partage.fr/f/gzFrRT7a/
1) il y avait des liaisons dans la feuille RECAP que j'ai supprimé
2) J'avais omis dans la macro de décomposer le Select de la Sheet et le Select de la Range
3) la macro doit être dans un module(je l'ai mise en Module 1) et pas dans le worksheet de la feuille Recap
4) Appeler la macro par le raccourci ctrl+k
L'appel par un bouton ou par la procédure événementielle de la feuille Recap fait buguer, je ne sais pas pourquoi !
Cdlmnt
Bonjour
avec un double-clic dans une cellule d'un des mois (janvier à décembre),on sélectionne la couleur RGV d'une cellule et cette couleur est copiée au jour et au track concerné en feuille "recap"
https://mon-partage.fr/f/mbPNH5UH/
attention:
-recopier la ligne 70 sur tous les mois ( la fonction VBA "find" n'aime pas les dates au format texte)
-non valable sur les lignes entre les tracks puisque valeur non spécifiée dans recap et mois !!!
avec un double-clic dans une cellule d'un des mois (janvier à décembre),on sélectionne la couleur RGV d'une cellule et cette couleur est copiée au jour et au track concerné en feuille "recap"
https://mon-partage.fr/f/mbPNH5UH/
attention:
-recopier la ligne 70 sur tous les mois ( la fonction VBA "find" n'aime pas les dates au format texte)
-non valable sur les lignes entre les tracks puisque valeur non spécifiée dans recap et mois !!!
Bonjour
C'est sans doute que ton fichier réel est bien plus étoffé et comporte des formules qui sont recalculées à chaque sélection de feuille car il n'y a pas de raison que la copie des 12 mois soit très longue
Essaie de mettre en début de macro pour passer en calcul manuel pour éviter les recalculs :
sans oublier en fin de macro pour repasser en calcul automatique
Cdlmnt
Via
C'est sans doute que ton fichier réel est bien plus étoffé et comporte des formules qui sont recalculées à chaque sélection de feuille car il n'y a pas de raison que la copie des 12 mois soit très longue
Essaie de mettre en début de macro pour passer en calcul manuel pour éviter les recalculs :
Application.Calculation = xlCalculationManual
sans oublier en fin de macro pour repasser en calcul automatique
Application.Calculation = xlCalculationAutomatic
Cdlmnt
Via
Il y a tous les mois de l'année 2020 (décembre 2019 inclus)
En soit je ne pense pas que le code en lui même sera moins long, mais à l’exécution peut être ? Ou je me trompe...
https://mon-partage.fr/f/hPCG4BhB/
C'est mon fichier complet, j'ai enlevé les informations qui pouvaient être "confidentielles". Dans une zone de texte dans "récap" je t'ai mis la macro initiale que j'avais, je ne sais pas si l'une ou l'autre et mieux ou plus "adaptable".
Pour information, ça peut avoir son intérêt , il y a plusieurs utilisateurs sur ce fichier.
Merci beaucoup pour ton aide, je te laisse voir de ton côté.
Cordialement,