Réduire code VBA [Résolu]

Signaler
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019
-
mdlrt44
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019
-
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 :
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

25 réponses

Messages postés
11475
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
16 décembre 2019
1553
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
mdlrt44
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019

Ah pardon, je pensais que c'était relativement long ^^
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,
Messages postés
11475
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
16 décembre 2019
1553
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
mdlrt44
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019

Zut!... On se prend la tête sur la macro alors que ca ne vient pas de là....
Tant pis

Merci encore !!!
Messages postés
16016
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 décembre 2019
2841
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."

????
mdlrt44
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019

"lorsqu'une couleur est renseignée dans un onglet mois, cette couleur se reporte immédiatement dans la case correspondante dans l'onglet récap." Pardon pour l'erreur
Messages postés
11475
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
16 décembre 2019
1553
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 :
 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
mdlrt44
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019

Bonjour,

Merci beaucoup du retour, j'ai testé mais ça ne fonctionne pas... J'ai surement mal compris ou mal adapté la solution. Malgré que j'ai modifié les cellules fusionnées, pour être certain qu'il n'y ai aucun soucis, ça ne fonctionne pas.

Cordialement,
Messages postés
16016
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 décembre 2019
2841
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
mdlrt44
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019

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,
Messages postés
11475
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
16 décembre 2019
1553
Bonjour

Renvoie moi ton fichier modifié et la macro que tu as faite en t'inspirant de mon dernier post et je regarderai

Cdlmnt
mdlrt44
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019

Messages postés
16016
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 décembre 2019
2841
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é


mdlrt44
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019

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,
Messages postés
11475
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
16 décembre 2019
1553
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
mdlrt44
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019

Bonjour,

Merci beaucoup du retour. Le seul souci c'est que, comme mon ancienne macro, lorsque j'adapte cette macro à tout mon fichier, c'est très long...
C'est la raison pour laquelle je pensais que le premier code pouvait être réduit pour que ça rame moins.

Cordialement
Messages postés
16016
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 décembre 2019
2841
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 !!!

mdlrt44
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019

Merci beaucoup de cette solution mais ça ne correspond pas tout à fait à ce que je cherche. Ca fonctionne très bien mais par rapport à l'utilisation du fichier ça n'est pas viable.

Cordialement,
michel_m
Messages postés
16016
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
13 décembre 2019
2841
Pourtant
post 2
lorsqu'une couleur est renseignée dans un onglet mois, cette couleur se reporte immédiatement dans la case correspondante dans l'onglet récap.

ce que fait ma proposition

Adieu
mdlrt44
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019

C'est la manière de sélectionner la couleur qui pose problème

Merci quand même
Messages postés
11475
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
16 décembre 2019
1553
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 :
Application.Calculation = xlCalculationManual

sans oublier en fin de macro pour repasser en calcul automatique
Application.Calculation = xlCalculationAutomatic


Cdlmnt
Via
mdlrt44
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019

Effectivement, mon fichier final est un peu plus important et il y a déjà pas mal de macro dedans.
Je vais essayer avec ta nouvelle solution.

Merci !
mdlrt44
Messages postés
25
Date d'inscription
jeudi 3 octobre 2019
Statut
Membre
Dernière intervention
28 novembre 2019

Bon bah c'est toujours très long environ 20 secondes pour que tout se "mette à jour"....
Est ce qu'il n'y aurait pas la possibilité de faire une variable pour réduire le code (j'avoue que les variables j'ai beaucoup de mal) ?