VBA problème de code !!

thibaut02

XLDnaute Nouveau
Bonsoir le forum,

Je souhaite créer une matrice de comparaison qui compte le nombre de fois où un site est supérieur à un autre dans un domaine. J'ai un premier tableau dans lequel j'ai extrait premier quartile et dernier quartile et je veux compter le nombre de fois ou un site est dans le premier quartile lorsque l'autre est dans le dernier
J'ai une matrice carré avec tous les sites. La notion de supériorité se fait sur les colonnes c'est à dire qu'en lisant la colonne on sait le nombre de fois ou le site est supérieur à celui de la ligne correspondante.
J'espère être clair mais l'exemple joint devrait aider.


J'ai fait, avec des boucles, une macro qui parcours toute ma matrice et qui remplit chaque case . et un compteur est supposé relevé chaque fois que la relation de supériorité est noté.

Lorsque je l'exécute je me retrouve avec une matrice remplie de zéro et je n'arrive pas à comprendre pourquoi.
Je ne suis pas du tout sûr de l'utilisation de la fonction find, j'ai lu l'aide de Excel pour essayer de comprendre mais j'avoue que mon niveau de débutant en VBA ne m'aide pas bcp.

Merci d'avance pour votre aide

Thibaut02
 

Pièces jointes

  • Analyse Comparative_test.xls
    34.5 KB · Affichages: 35

Paritec

XLDnaute Barbatruc
Re : VBA problème de code !!

Bonsoir thibaut2 le forum,
et des explications dans le fichier tu penses que cela aurait beaucoup dérangé???
ta notion de supérieur inférieur est certainement une évidence pour toi, mais pour toi seulement, d'ailleurs si tu n'as pas encore de réponse c'est pour cela
a+
papou:eek:
 

Bebere

XLDnaute Barbatruc
Re : VBA problème de code !!

bonjour Thibaut
si trouve le site dans quartile sup,compte dans quartile inf jusque la ligne de la correspondance
si ce n'est pas le cas,explique

Code:
Sub matrice_comparaison()
Application.ScreenUpdating = False
Quartiles = Worksheets("Analyse Quartile").Range("H3:K20")
For i = 3 To 16 'colonnes
    For j = 3 To 16 'lignes
    compteur = 0
        For l = 1 To UBound(Quartiles, 1) 'lignes
          For c = 1 To UBound(Quartiles, 2) 'colonnes h:k
                    If Quartiles(l, c) = Worksheets("Matrice de Comparaison").Cells(2, i).Value Then
                    mot = Quartiles(l, c)
                            With Worksheets("Analyse Quartile").Range("C3:F" & l + 2 & "")
                                    Set c2 = .Find(mot, LookIn:=xlValues)
                                    If Not c2 Is Nothing Then
                                            firstAddress = c2.Address
                                        Do
                                            compteur = compteur + 1
                                            Set c2 = .FindNext(c2)
                                        Loop While Not c2 Is Nothing And c2.Address <> firstAddress
                                    End If
                            End With
                    End If
            Next
        Next
       Worksheets("Matrice de Comparaison").Cells(j, i).Value = compteur
    Next
Next

End Sub
 

thibaut02

XLDnaute Nouveau
Re : VBA problème de code !!

Désolé, j'avoue qu'en me relisant je n'ai pas du tout été clair !
J'aurais dû prendre un peu de recul avant d'envoyer mon message. Mais c'est assez compliqué à expliquer en Français en fait !

Dans ma matrice de comparaison : si on lit la cellule E6, par exemple, le nombre doit représenté le nombre de fois où "lorque COM est dans le quartile supérieur, LIS est dans le quartile inférieur" ce pour l'ensemble des caractéristiques.
J'espère avoir été plus clair, je rajoute mon code commenté pour vous expliquer ma démarche
Code:
Sub matrice_comparaison()

For i = 3 To 16 'parcours les colonnes de la matrice

    For j = 3 To 16 ' parcours les lignes
    compteur = 0 ' pour chaque cellule de la matrice, on initialise le compteur à 0, c'est ce compteur qui doit donner le nombre de fois où lorsque le site de la colonne est dans le quartile supérieur, le site de la ligne est dans le quartile inférieur

        For k = 3 To 20 ' compteur qui permet de parcourir le tableau des caractéristiques
        
            For Each c1 In Worksheets("Analyse Quartile").Range("H" & k & ":K" & k & "").Cells 'parcours chaque ligne k du quartile supérieur
                    
                    If c1.Value = Worksheets("Matrice de Comparaison").Cells(2, i).Value Then ' si trouve la valeur de la colonne en cours (ex : COM) alors cherche dans la même ligne quartile inférieur s'il trouve la ligne concernée et incrémente le compteur si oui.
                            With Worksheets(1).Range("C" & k & ":F" & k & "")
                                    Set c2 = .Find(Worksheets("Matrice de Comparaison").Cells(j,2).Value, LookIn:=xlValues)
                                    If Not c2 Is Nothing Then
                                            firstAddress = c2.Address
                                        Do
                                            compteur = compteur + 1
                                            Set c2 = .FindNext(c2)
                                        Loop While Not c2 Is Nothing And c2.Address <> firstAddress
                                    End If
                            End With
                    End If
            Next
        Next
       Worksheets("Matrice de Comparaison").Cells(j, i).Value = compteur
    Next
Next

End Sub

En commentant mon code je me suis aperçu de mon erreur et la correction semble fonctionner, je laisse si d'autre en ont besoin.
Le problème se trouvait dans ma recherche, j'avais mis cells(2,i) au lieu de (j,2) ce qui explique que la macro me renvoyait des zéros.

Comme quoi une bonne nuit de sommeil et commenté son code, c'est efficace. BEn revanche, mon code n'est surement pas très propre ou optimisé :(

Désolé pour le dérangement et merci pour votre aide

Thibaut
 

Discussions similaires

Réponses
9
Affichages
171

Membres actuellement en ligne

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 520
dernier inscrit
Azise