Macro qui détecte les Interactions dans une matrice

C'est bien ce que j'avais compris...

Le truc, c'est que là, j'ai une autre matrice où la ligne de produit commence en P21 au lieu de U21 (donc colonne 17) et en colonne, ça commence en M25 au lieu de R25 (donc ligne 26).

Alors, je change toute la macro sauf que au lieu de If Cells(i, k) = Cells(j + 4, I)

j'ai mis If Cells(i, k) = Cells(j + 9, I) pour que ça fasse bien 17 + 9 =26

Et au final, et bien ça ne correspond, en tout cas, au moins pour un produit. Celui-ci a une colonne toute grise alors qu'il ne devrait pas, il y a des correspondances, donc ce n'est pas logique...

Par contre, ce qui est bizarre, c'est que si je change de lieu, et que je met à jour, et bien là, ça fonctionne...

Ben vu comme ça, difficile de dire ce qui cloche...

Alors comme dirait V_Elbie :

Le truc, c'est que le fichier fait plus de 100ko et je ne veux pas retirer les macros parce qu'on sait jamais, autant après ça va marcher

Sinon, tu peux me filer ton adresse mail (par MP) et je te l'envoie, le fichier fait 350ko (il y a quand même 4 macros dessus )

Bon, j'ai supprimé les 3 macros non-intéressantes, j'ai laissé que la tienne et il y a toujours le bug, donc c'est bon !

Voilà le fichier :

https://www.excel-pratique.com/~files/doc/CLASS.xls

Merci pour ton aide

Tu remarqueras que c'est la 2ème colonne de la matrice qui ne fonctionne pas alors que tout le reste a l'air bon, j'ai pas vérifier cellule par cellule mais bon...

OK c'est bon j'ai compris...

C'est mon "l=1" qui fout le bordel, vu qu'il est suivi d'un "next l"

Donc finalement si tu fais le raisonnement pas à pas, tu comprends vite que pour toutes les cellules juste à droite d'une grise, on n'a pas testé le premier lieu...

La solution : l=0

Ton code modifié :

Sub colorie()
Application.ScreenUpdating = False
Dim i As Integer, j As Integer
Dim k As Byte, l As Byte
Dim maxi As Integer, maxj As Integer
Dim cel As Range
maxi = [M25].End(xlDown).Row
maxj = [P21].End(xlToRight).Column

' on efface la couleur de toutes les cellules
Range("Q26", Cells(maxi, maxj)).Interior.ColorIndex = xlNone

' on colorie en bleu les intersections de produits dont les lieux correspondent
For i = 26 To maxi
For j = 17 To maxj
        For k = 1 To 8
            For l = 1 To 8
                If Cells(i, k) = Cells(j + 9, l) And Cells(i, k) <> "" Then
                Cells(i, j).Interior.ColorIndex = 8
                j = j + 1
                k = 1
                l = 0
                End If
            Next l
        Next k
    Next j
Next i

' on colorie en gris toutes les cellules non bleues, et on enlève la couleur des bleues
For Each cel In Range("Q26", Cells(maxi, maxj))
    If cel.Interior.ColorIndex <> 8 Then
        cel.Interior.ColorIndex = 15
    ElseIf Not cel.Value = "rien" Then
        cel.Interior.ColorIndex = xlNone
    End If
Next cel
End Sub

Jai modifié pour effacer les couleurs en début de macro, au cas où il y aurait eu des modifs de lieu quand tu relances la macro.

Et aussi pour garder les "rien" en bleu, comme ça tu peux enlever ta MFC (que sinon tu dois copier en cas d'ajout de produit nouveau)

Amicalement,

Sylvain

Ok, c'est cool, merci.

Par contre, ça bug mais ça ne doit pas être une grosse erreur. Il y a un problème avec le code :

For Each cel In Range("Q26", Cells(maxi, maxj))

If cel.Interior.ColorIndex <> 8 Then

cel.Interior.ColorIndex = 15

ElseIf Not cel.Value = "rien" Then cel.Interior.ColorIndex = xlNone

End If

Next cel

End Sub

Ca me marque incompatibilité de type (il faut dire que normalement, il y a écrit "aucune pollution" sur ma matrice au lieu de "rien"). Cependant, j'ai changé dans la macro et rien n'y fait... => C'est pas vraiment un problème, ça marche quand même avec la MFC donc bon...

Autre chose, fait-il que je fasse la modif de l=0 sur les 3 matrices ? => C'est bon j'ai eu ma réponse en changeant la valeur sur ma matrice principale, ça fait beaucoup de cellules blanches en plus

Une petite vérification à laquelle on aurait dû penser de suite : la coloration des cellules doit présenter une symétrie par rapport à la diagonale "rien".

verif 10

Pour ton "incompatibilité" de type", je ne vois pas de raison, ça doit marcher sans soucis.

Bon, je regarderai ça dans la journée.

En tout cas, merci pour ton aide Sylvain !

Bon je réouvre ce sujet car il y a quelques incohérences dans la macro. En effet, pour certains produits qui n'ont aucun lieu en commun, et bien, la cellule reste blanche alors qu'elle devrait se griser.

J'ai l'impression que c'est parce que la lecture des lieux n'est pas très précise. Je m'explique, j'ai deux produits qui n'ont aucun lieu en commun, l'un est fabriqué dans le R08 et l'autre dans le R18, ou encore le R25 et le R23...et bien j'ai l'impression que la plupart du temps où ça bug, c'est qu'il y a un chiffre identique entre les lieux (en plus de la lettre R qui apprait à chaque fois)... MAIS ce n'est pas tout le temps le cas...

Je sais que dans quelques formules sur Excel, il est nécessaire d'indiquer si on veut une comparaison ou encore une recherche précise d'un texte ou valeur ou pas (exemple avec la fomule RECHERCHEV(valeur_cherché;table_matrice;no_index_col;[valeur proche]))

Donc, est-ce que ça fonctionne pareil sur les macro ???

Alors Sylvain, toi qui a travaillé sur ça, une idée pour réparer ce petit problème ??? Bien sûr tout le monde peut m'aider

Salut Poulpow,

Encore là toi ?

C'est un stage qui dure longtemps, ou tu as été embauché ?...

Dans la macro, tu as

If Cells(i, k) = Cells(j + 9, l)

C'est une égalité, donc contrairement à une recherchev, tu ne peux pas avoir de valeur proche

Par contre sans ton fichier on peut difficilement quelque chose pour toi

Il y a des sites qui permettent gratuitement l'hébergement de fichiers lourds.

Moi 8) je fais avec http://www.archive-host.com/ ; 40Mo par fichier, 100Mo d'espace.

Essaye de joindre ton fichier, en indiquant exactement où sont les erreurs, qu'on n'épluche pas les résultats un par un.

A te relire, Sylvain

Non, pas d'embauche, juste un stage qui se termine jeudi prochain ! mais tu me suis depuis mes débuts

Merci merci.

Mais je me suis rendu compte de quelque chose en "fabriquant" le fichier simplifié que j'allais t'envoyer : lorsque je simplifie les noms de produits, je n'ai plus de problème !

En gros, sur mon fichier d'origine, j'ai des noms de produits de fou, avec parfois exactement le même début et avec juste une petite différence à la fin (genre n°10225 et n°10225dist)... avec la simplification en écrivant Produit 1, 2, etc. les interactions marchent bien, en tout cas, j'ai l'impression (en même temps, je ne peux pas vérifier les quelques 10000 cellules qu'il y a )

Donc, tu es sûr qui n'existe pas un moyen de comparer à 100% identique des cellules sous une macro ?

Bon, et bien j'ai du nouvau !

En fait, lorsque je simplifiais mon fichier, j'avais mis pour les produits : produit 1, 2, 3... et ça fonctionnait. Donc, j'ai essayé de remettre les vrais noms et miracle, ça fonctionne toujours...

Donc j'ai remis petit à petit les vrais données dans le fichier simplifié et j'ai trouvé ce qui buggé, c'était une colonne en A, juste à gauche du tableau des lieux. Cette colonne faisait référence aux lieux en recherchant le plus petit des lieux se trouvant sur la même ligne. Donc, étant donné que cette colonne n'était pas vraiment utile, je l'ai retiré et tous les problèmes que j'avais pu recensé ont enfin disparu ! Je ne sais pas s'il y a d'autres risques de bug, mon maître de stage regardera ça de plus près.

Bon en tout cas merci (même si cette fois, tu as rien fait ) !

++

Content que ça remarche...

Poulpow a écrit :

j'ai trouvé ce qui buggé, c'était une colonne en A, juste à gauche du tableau des lieux.

Souviens toi que dans la macro tu balayes les lieux avec

For k = 2 To 14
For l = 2 To 14

Si tu as inséré un colonne avant la B, et que tu n'as pas décalé les macros, il est normal d'avoir des soucis...

Si c'est pas ça je peux pas t'en dire plus d'ici, mais l'essentiel c'est que ça marche !

Bonne fin de stage, j'espère que tu auras une bonne note !

Sylvain TBM a écrit :

Souviens toi que dans la macro tu balayes les lieux avec

For k = 2 To 14
For l = 2 To 14

Bonne fin de stage, j'espère que tu auras une bonne note !

Et bien, pour moi 2 To 14, ce sont les colonnes, donc de la colonne B à la colonne N, non ?

Enfin, c'est pas grave, comme tu dis, ça fonctionne, c 'est le principal !

Et encore une fois, merci pour ton aide

Rechercher des sujets similaires à "macro qui detecte interactions matrice"