Réduire code VBA

Résolu/Fermé
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019 - Modifié le 25 nov. 2019 à 16:26
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019 - 28 nov. 2019 à 16:40
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
A voir également:

10 réponses

via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
28 nov. 2019 à 15:02
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
1
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019
28 nov. 2019 à 15:44
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,
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
28 nov. 2019 à 16:21
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
1
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019
28 nov. 2019 à 16:40
Zut!... On se prend la tête sur la macro alors que ca ne vient pas de là....
Tant pis

Merci encore !!!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
26 nov. 2019 à 09:17
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."

????
0
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019
Modifié le 26 nov. 2019 à 12:20
"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
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
26 nov. 2019 à 13:47
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
0
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019
27 nov. 2019 à 11:50
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,
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
26 nov. 2019 à 13:54
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
0
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019
27 nov. 2019 à 12:10
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,
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
27 nov. 2019 à 13:18
Bonjour

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

Cdlmnt
0
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019
27 nov. 2019 à 14:26
https://mon-partage.fr/f/r63Pz9cu/

Voila
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 27 nov. 2019 à 14:06
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é


0
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019
27 nov. 2019 à 16:48
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,
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
27 nov. 2019 à 19:14
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
0
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019
28 nov. 2019 à 13:12
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 28 nov. 2019 à 12:04
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 !!!

0
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019
28 nov. 2019 à 13:16
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,
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
28 nov. 2019 à 13:23
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
0
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019
28 nov. 2019 à 13:35
C'est la manière de sélectionner la couleur qui pose problème

Merci quand même
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
28 nov. 2019 à 13:27
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
0
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019
28 nov. 2019 à 13:38
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 !
0
mdlrt44 Messages postés 25 Date d'inscription jeudi 3 octobre 2019 Statut Membre Dernière intervention 28 novembre 2019
28 nov. 2019 à 14:34
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) ?
0