Mise en forme conditionnelle+Transposition sans doublons et cellules vides

Re,

Il n'y aura aucun tri sur la plage des composants K2:AC2

Ce sera comme tel, sauf si tu as une optimisation de l'étape 1 pour faire en plus un tri croissant (A à Z) mais à notre niveau, ce n'est pas nécessaire. Si cela est simple pour toi à faire, c'est le bienvenu !

Ps: L'étape 2 n'a pas besoin d'avoir de bouton, dès qu'un ID est incrémenté dans la colonne C, les cellules de composants se mettront automatiquement sur fond gris par exemple. (Plage K3:AC10 par exemple qui augmentera en terme de colonnes à chaque nouveau composants et en termes de lignes à chaque nouvel ID qui doit être assemblé)

re,

si il y a un tri à faire sur la plage K2:AC2,

le trie doit il être fait comme si la plage est du texte

par exemple

texte:

131, 156461, 1654, 16546, 35, 354, 4165,

ou bien

le trie doit il être fait comme si la plage est des nombre

nombre:

35, 57, 131, 354, 486, 546, 564

Bonjour Sab,

Désolé du retard, toutes les données sont des cellules au format texte.

Ps: Pour moi, je ne vois pas la différence entre un tri de mombre et un tri de texte...

Et pour l'étape 2, as-tu cerné mon idée ou as-tu besoin d'explications complémentaires ?

Merci encore

Re,

Je viens de penser à un exemple pour illustrer le fonctionnement de la macro étape 2.

a) Texte cherchée C3 (formatting donc AB.123) dans Colonne A (Data donc ID).

b) À chaque fois que ce texte est trouvé, prendre le texte de la colonne C avec la ligne correspondante où le texte a été trouvé et le chercher dans la plage K2:ZZ2 de Formatting.

c) Quand le texte est trouvé dans la plage, mettre sous fond la cellule croisant la ligne 3 (car l'exemple prend C3) et la colonne trouvée.

Représentation des étapes:

a) C3 (Formatting ) cherché ==> Cellules trouvées: A2 / A3 / A4 /A5 (Data)

B) Pour chacune de ces cellules trouvées:

A2 ==> 5646 (C2) ==> K2 (Formatting)

A3 ==> 156461 (C3) ==> L2 (Formatting)

A4 ==> 65465 (C4) ==> M2 (Formatting)

A5 ==> 546 (C5) ==> N2 (Formatting)

c) Donc les cellules à mettre sous fond gris sont les croisements entre:

C3 et K2 donc K3

C3 et L2 donc L3

C3 et M2 donc M3

C3 et N2 donc N3

Et on passe à C4 et ainsi de suite.

Donc ça donne quand ça tourne (je suppose):

C3 (Formatting) donne A2 (Data) qui donne C2 qui donne K2 (Formatting) qui met en fond gris la cellule croisant C3 et K2 donc K3.

Puis on boucle tant qu'on trouve C3 (formatting) dans colonne A (Data), donc donne A3 puis etc

En espérant ne pas avoir une idée un folle

J'ai réussi à me plonger dedans !

Alors, sans macro, j'ai soldé l'étape 2.

Voir excel ci-joint la MFC, j'ai bidouillé un peu et ça fonctionne

Sauf, je n'ai aucune idée si c'est stable (pour l'instant, fonctionne parfaitement sur notre petit bébé).

Mais je suis toujours intéressé de connaître le code VBA pour ça ! Car les formules à rallonge et les rajouts...

Merci beaucoup pour l'aide !

re,

désolé de n'avoir répondu plus tôt, j'ai du m'absenter.

voici la dernière version avec le coloriage de la plage résultat.

7kruskler-ver2.xlsm (27.83 Ko)

Re,

Aucun soucis !

Merci pour le résultat, c'est top !

Juste pour corriger, la colonne A de formatting ne dépend pas de DATA, elle est donc fixe dans notre exemple, donc la macro ne doit rien extraire de Data pour remplir les ID de Formatting. J'ai donc ajouter la feuille WT qui correspond aux ID qui seront produits.

Dans le fichier joint, tu peux voir la petite modif'. J'ai mis liste ID en commentaire car je pourrai en avoir besoin dans le future

Donc, on est top, tout roule !

Maintenant, optimisation finale

Est-ce qu'il est possible de ne montrer dans formatting que les composants dont on a besoin pour WT.

Je m'explique, dans WT, on a une très longue liste de prod, donc avec des doublons d'ID bien sûr (j'ai retouché ton code pour juste avoir la liste sans filtration mais j'ai besoin de filtrer les cellules vides et je n'arrive pas à adapter...).

Donc, dans formatting, ne garder que les composants dont l'ID est présent dans la colonne A de formatting .

De plus, je ne comprends pas pourquoi la ligne de AB.123 dans formatting ne se met pas en fond gris...

Si je suis flou, je prendrai plus de temps ce week end pour expliquer ça.

Merci !

re,

il y avait une différence entre les nom "ab.123" des différents onglets,

Re,

Merci pour le retour et... J'aurai dû voir cette différence...

Dernier tri et ensuite tout sera parfait !

Dans l'excel joint, les composants 35, 57, 1654, 4687, 16546, 46468 ne sont pas utilisés.

Je voudrai donc que les colonnes des composants qui ne sont pas utilisés soient cachées/filtrées.

Sans filtre:

35 57 131 354 486 546 564 645 658 1654 4165 4687 5646 16546 46468 65465 84954.67 156461 4654776

Avec filtre:

131 354 486 546 564 645 658 1654 4165 4687 5646 16546 46468 65465 84954.67 156461 4654776

Merci d'avance !

Ps: Je ne serai sans doute pas dispo d'ici lundi, je m'excuse d'avance de tout retard..

7kruskler-ver3.xlsm (28.98 Ko)

re,

ça serait plus facile de ne pas les reporter dans la liste "formatting" dès le départ,

c'est possible ?

Bonjour !

Désolé du retard, je viens juste d'avoir un peu de temps pour adapter à notre excel et problèmes... Macro beaucoup trop longue.

Au bout d'1h, toujours pas de résultats... J'ai fait un mode pas à pas pour voir si c'était la macro qui avait une boucle infini et au bout de 5~10mins à rester sur F8, magie, premier résultat...

Donc j'ai trouvé des solutions pour faire mes tris etc mais pour cela, j'ai besoin que la macro qui met les cellules en couleurs se boucle en peu de temps tout comme la formule que j'avais fait pour la MFC. (Qui me donne le même résultat que la macro en moins d'une seconde mais je ne peux rien faire avec..).

Dans l'excel joint, j'ai laissé la macro qui m'intéresse dans ce soucis et sur scheduling (anciennement formatting), la formule qui me permettait de faire la MFC (d'où les true) pour voir mon raisonnement, peut sans doute aider à optimiser le temps de calcul de la macro.

Donc il n'y a rien à modifier sur l'excel, mais seulement la façon de la macro pour faire changer de couleur les cellules afin de rendre le calcul bien plus rapide. On a pas de gros processeurs ni de ram, donc ça n'aide pas le traitement, je n'ai pas encore pu essayer sur ma machine perso qui elle a de la ressource. Je ferai un update si cela change quelque chose mais il me faut quand même cette optimisation..

Et pour répondre à la question, ce n'est pas possible. Ce que je donne en exemple est très minimisé de l'excel final. Dans BOM on a environ 6000 lignes avec 7 colonnes et sur scheduling, que dans les 200 pour l'instant avec + de 1000 colonnes...

Merci pour l'aide et encore désolé du retard...

5kruskler-ver3.xlsm (42.24 Ko)

re,

Et pour répondre à la question, ce n'est pas possible. Ce que je donne en exemple est très minimisé de l'excel final. Dans BOM on a environ 6000 lignes avec 7 colonnes et sur scheduling, que dans les 200 pour l'instant avec + de 1000 colonnes...

dommage, ça réduit la plage et donc + de vitesse,

voici l'exemple

Re,

Oui, je suis d'accord.

Il n'y a aucun changement sur Sub format_cellule_de_la_plage()...

De plus, prendre l'excel que j'ai joint où l'essentiel du problème est, celui-ci que tu as joint n'est plus utilie dans le cas présent.

Ou mauvais fichier joint ?

re,

à tester,

dit moi si c'est plus rapide,

Sub format_cellule_de_la_plage()
Dim c, i, a, b, x, y, plg As Range
Set sh1 = Sheets("BOM")
Set sh2 = Sheets("scheduling")
Set plg = Range("H1")

lig = sh2.Cells(Rows.Count, 2).End(xlUp).Row
col = sh2.Cells(2, Columns.Count).End(xlToLeft).Column
pp = Cells(lig, col).Address
    For Each c In sh2.Range("I3:" & Cells(lig, col).Address)
    gg = c.Row
      For i = 2 To sh1.Cells(Rows.Count, 1).End(xlUp).Row
        a = sh2.Cells(c.Row, 2).Value
        b = sh1.Cells(i, 1).Value
        x = sh2.Cells(2, c.Column).Value
        y = sh1.Cells(i, 3).Value
        If a = b And x = y Then Set plg = Union(plg, c)
      Next i
    Next c
   plg.Interior.Color = RGB(191, 191, 191)
End Sub

Re,

Je viens de tester ton adaptation, mais ça tourne...

Je pense pas que ça vienne de quand on rempli les cellules mais la recherche ligne par ligne qui est très longue...

Un style de vlookup arrangé comme j'ai fait dans ma fonction (voir l'une des cellules True) doit bien avoir sa correspondance en VBA non ? :/

Je n'ai pas encore le temps de me plonger dans le language, donc je ne peux faire que des hypothèses

Merci quand même pour l'essai !

re,

je vais regarder du coté tableau(), pour gagner de la vitesse,

de retour demain...

Super, merci beaucoup !

re,

Voici une version avec MFC,

mais je ne crois pas que ce soit plus rapide que d'appliquer une couleur directement.

Re,

Le but est de se passer de cette MFC et d'utiliser la Macro... Car je ne peux pas travailler avec la MFC..

Dans la macro actuelle (version v3 que j'ai upload), n'est-il pas possible au lieu de chercher ligne par ligne de faire une recherche sur une plage ?

Je m'explique, dans scheduling, on prend B3 et on le cherche dans la page de BOM de A3:Axxxx, pour le premier match, on regarde la colonne 3, ce qui nous donne un composant, on le cherche dans la liste de scheduling I2:BBB2 et quand ça match, on met en surbrillance le croisement composant/B3, on passe à la ligne d'en dessous dans BOM, si pas égale à B3, alors on repart pour B4 et ainsi de suite.

Si c'est possible de passer ça en VBA, la vitesse de traitement devraient être instantané je pense. Le ligne par ligne et colonne par colonne est ce qui rend la macro pratiquement interminable.

J'ai hélàs appris le VBA et les formules en Fr il y a des années, donc le fait de me remémorer et faire le switch en anglais n'est pas évident pour se rappeler... Désolé

re,

voici la dernière version avec tableau et couleur, sans MFC

est ce que c'est plus rapide ?

Rechercher des sujets similaires à "mise forme conditionnelle transposition doublons vides"