Gestion des erreus

Résolu
megatronnbjja Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   -  
megatronnbjja Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je fais une macro afin de faire une synthèse des notes obtenues par nos fournisseurs.

A chaque évaluation( 2 par an) on rajoute le "relevé de notes" des fournisseurs dans une nouvelle feuille du classeur.
Dans la feuille synthèse, j'ai en colonne: le nom de chaque fournisseur, et en ligne: ses notes obtenues à chaque évaluation.
Le problème est que: les fournisseur ne sont pas tous évalués chaque fois, mais lorsque je lance la macro, même si le fournisseur n'a pas été évalué, j'obtiens une note pour cette période et je ne comprends pas d'où elle sort.
Je mets si dessous ma macro, le problème vient sans aucun doute du: On error resume next, je me rends bien compte que la macro ignore alors le fait que le fournisseur n'a pas été évalué..... Mais je ne sais pas comment faire.

Sub comparaison_fournisseurs()

Dim derlig As Long
Dim dercol As Integer

Dim cel As Range
Dim ligne As Long
Dim eval
Dim fournisseur
Dim i As Byte
Dim j As Byte

Sheets("Synthèse").Activate

derlig = Range("C" & Rows.Count).End(xlUp).Row
dercol = Cells(4, Cells.Columns.Count).End(xlToLeft).Column

For i = 5 To derlig
        For j = 4 To dercol
        eval = Cells(4, j).Value
        fournisseur = Cells(i, 3)
        
Sheets(eval).Activate
        
Set cel = Cells.Find(What:=fournisseur, LookAt:=xlWhole)
On Error Resume Next   'c'est là que ça ne va pas il me semble. Si le fournisseur n'est pas  trouvé sur la page, je veux que la valeur affiché dans mon tableau de synthèse soit par exemple "/" 

ligne = cel.Row

Sheets("Synthèse").Activate
Cells(i, j).Value = Sheets(eval).Cells(ligne, 15)



Next j
Next i



End Sub


Merci d'avance pour votre aide,

Megatronnbjja
A voir également:

4 réponses

melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Coucou,

Pour mieux comprendre,
il faudrait ton tableau sur cjoint.com.

mais ton pb vient de la :

Cells(i, j).Value = Sheets(eval).Cells(ligne, 15)
car si ton fournisseur est trouvé, ton évaluation = feuille fournisseur ligne ou ton fournisseur a été trouvé, colonne 15.
Que contient ta colonne 15 de chacun de tes fournisseurs?? Y compris ceux qui ne sont pas évalués??


Je vais te traduire ce que fait la macro, ca sera déjà un début:

Sub comparaison_fournisseurs()

Dim derlig As Long
Dim dercol As Integer

Dim cel As Range
Dim ligne As Long
Dim eval
Dim fournisseur
Dim i As Byte
Dim j As Byte

Sheets("Synthèse").Activate ' on active la feuille synthèse

derlig = Range("C" & Rows.Count).End(xlUp).Row 'la variable derlig est égale à la dernière ligne de la feuille synthèse
dercol = Cells(4, Cells.Columns.Count).End(xlToLeft).Column 'la variable dercol est égale à la dernière colonne de la feuille synthèse

For i = 5 To derlig 'à partir de la ligne 5 jusqu'à la dernière ligne
For j = 4 To dercol ' à partir de la colonne 4 jusqu'à la dernière colonne
eval = Cells(4, j).Value ' la variable eval = valeur de la cellule ligne 4 colonne J
fournisseur = Cells(i, 3) ' fournisseur = valeur de la cellule de la ligne i colonne 3

Sheets(eval).Activate 'on sélectionne la feuille qui porte le nom de la variable eval soit la cellule ligne 4 colonne j

Set cel = Cells.Find(What:=fournisseur, LookAt:=xlWhole) ' dans cette feuille, on recherche le fournisseur
On Error Resume Next ' ici ca indique que si en dessous il y a un problème, on passe à la colonne suivante
ligne = cel.Row ' la variable ligne = ligne où le fournisseur a été trouvé. Ex : ton fournisseur se trouve en B5, ligne = 5

Sheets("Synthèse").Activate ' on active la feuille synthèse
Cells(i, j).Value = Sheets(eval).Cells(ligne, 15) 'Pour moi ton pb se trouve ici!!!! Car on dit que la cellule de la ligne i et de la colonne j = à la cellule de la ligne i et de la colonne 15. Donc à toi de voir ce que contient la colonne 15 si elle est toujours renseigné, voila pourquoi tu as toujours une valeur



Next j
Next i



End Sub
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour a vous deux,

une facon de faire (voir aide excel range.find)

Sub comparaison_fournisseurs()

Dim derlig As Long
Dim dercol As Integer

Dim cel As Range
Dim ligne As Long
Dim eval
Dim fournisseur
Dim i As Byte
Dim j As Byte

    Sheets("Synthèse").Activate

    derlig = Range("C" & Rows.Count).End(xlUp).Row
    dercol = Cells(4, Cells.Columns.Count).End(xlToLeft).Column

    For i = 5 To derlig
        For j = 4 To dercol
            eval = Cells(4, j).Value
            fournisseur = Cells(i, 3)
        
            Sheets(eval).Activate
        
            Set cel = Cells.Find(What:=fournisseur, LookAt:=xlWhole)
            'On Error Resume Next   'c'est là que ça ne va pas il me semble. Si le fournisseur n'est pas  trouvé sur la page, je veux que la valeur affiché dans mon tableau de synthèse soit par exemple "/"

            If Not cel Is Nothing Then
                ligne = cel.Row
                Sheets("Synthèse").Activate
                Cells(i, j).Value = Sheets(eval).Cells(ligne, 15)
            Else
                Sheets("Synthèse").Activate
                Cells(i, j).Value = "/"
            End If
        Next j
    Next i
End Sub


ce code pourrait etre un peu modife pour eviter les .activate

Bonne suite
0
megatronnbjja Messages postés 63 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Merci pour ta réponse Mélanie. J'avais bien compris ce que faisait ma macro (c'est moi qui l'ai écrit)... : ) Ma colonne 15 contient en fait la moyenne obtenue par chaque fournisseur évalué. Elle est donc renseignée à chaque fois.
Ce qui varie , c'est la liste de fournisseur évalués. Dans ma feuille de synthèse, j'ai la liste complète de tous les fournisseurs de notre pannel. Mais tous les fournisseurs ne sont pas évalués à chaque fois. Donc mon problème était que même si le fournisseur n'était pas présent sur la feuille d'évaluation, ma macro lui "inventait" une note...

f894009, merci pour ton aide!!! Ma macro marche à présent. J'avais testé cette méthode mais en écrivant : If not cel = nothing........ Je ne savais pas que la bonne syntaxe était If not cel is nothing.....

En tous cas, merci beaucoup à vous deux. C'est très appréciable d'obtenir des réponses rapidement.


PS: f894009, je suis encore novice en vba mais ça me plait bien, si tu as des conseils pour "alléger" mon code, je suis preneur!! (si tu as un peu de temps bien sur).
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

essayez ceci (eval et fournisseur peuvent etre enlevees puisqu'utilisees une seule fois)

Sub comparaison_fournisseurs()
    Dim derlig As Long
    Dim dercol As Integer
    Dim cel As Range
    Dim eval
    Dim fournisseur
    Dim i As Byte
    Dim j As Byte

    With Sheets("Synthèse")
        derlig = .Range("C" & Rows.Count).End(xlUp).Row
        dercol = .Cells(4, .Cells.Columns.Count).End(xlToLeft).Column
        For i = 5 To derlig
            For j = 4 To dercol
                eval = .Cells(4, j).Value
                fournisseur = .Cells(i, 3)
                Set cel = Sheets(eval).Cells.Find(What:=fournisseur, LookAt:=xlWhole)
                If Not cel Is Nothing Then
                    .Cells(i, j).Value = Sheets(eval).Cells(cel.Row, 15)
                Else
                    .Cells(i, j).Value = "/"
                End If
            Next j
        Next i
    End With
End Sub
0
megatronnbjja Messages postés 63 Date d'inscription   Statut Membre Dernière intervention  
 
Re,

Merci pour les infos. ça marche très bien. J'appliquerai pour mes prochaines macro.

A+
0