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 -
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.
Merci d'avance pour votre aide,
Megatronnbjja
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:
- Gestion des erreus
- Logiciel gestion locative gratuit excel - Télécharger - Comptabilité & Facturation
- Logiciel gestion photo gratuit - Guide
- Gestion des fichiers - Télécharger - Gestion de fichiers
- Gestion autorisation application android - Guide
- Logiciel gestion cabinet médical gratuit - Télécharger - Organisation
4 réponses
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
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
Bonjour a vous deux,
une facon de faire (voir aide excel range.find)
ce code pourrait etre un peu modife pour eviter les .activate
Bonne suite
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
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).
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).
Re,
essayez ceci (eval et fournisseur peuvent etre enlevees puisqu'utilisees une seule fois)
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