Voici mon code :
Sub MAJ_poids()
' ***********************************************************************************
' ********** SEQUENCE DE MAJ DES DONNEES POIDS PARTIE USINEES **********
' ***********************************************************************************
' Macro enregistrée le 04/08/2014 par ajannin
Dim Matiere As String, Format As String
Dim Poidsmatiere As Integer
Application.EnableEvents = False
If Worksheets("PIECES USINEES").Cells(9, 3).Value Like "FR" Then
a = 2
ElseIf Worksheets("PIECES USINEES").Cells(9, 3).Value Like "CH" Then
a = 0
ElseIf Worksheets("PIECES USINEES").Cells(9, 3).Value Like "CZ" Then
a = 1
ElseIf Worksheets("PIECES USINEES").Cells(9, 3).Value Like "EN" Then
a = 3
End If
' Désactivation de l'écran pendant le calcul
Application.ScreenUpdating = False
' Activation du Sablier
Application.Cursor = xlWait
'passer en calcul manuel
With Application
.Calculation = xlManual
.MaxChange = 0.001
End With
i = 115
While Worksheets("PIECES USINEES").Cells(i, 1).Value <> 0
Matiere = ""
Format = ""
Poidsmatiere = 0
'Matiere
d = 5 'Colonne de départ pour la recherche de l'entete de la liste
l = 0 'Numéro de la colonne recherchée
k = 4 'Ligne de recherche de l'entete de la liste
If Worksheets("TABLEAU_TRADUCTION").Cells(6, 2).Value <> "" Then
While l = 0 And (Worksheets("TABLEAU_TRADUCTION").Cells(k, d).Value <> "" Or Worksheets("TABLEAU_TRADUCTION").Cells(k, d + 1).Value <> "")
If Worksheets("TABLEAU_TRADUCTION").Cells(k, d).Value = Worksheets("TABLEAU_TRADUCTION").Cells(6, 2).Value Then
l = d
End If
d = d + 1
Wend
End If
'Filtre de la liste par ordre croissant pour supprimer les cellules vides
Worksheets("TABLEAU_TRADUCTION").Activate
Range(Cells(k, l), Cells(k, l + 3)).Select
selection.AutoFilter
ActiveWorkbook.Worksheets("TABLEAU_TRADUCTION").AutoFilter.Sort.SortFields. _
Clear
z = Cells(k, l + a).Address
ActiveWorkbook.Worksheets("TABLEAU_TRADUCTION").AutoFilter.Sort.SortFields.Add _
Key:=Range(z), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("TABLEAU_TRADUCTION").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Worksheets("TABLEAU_TRADUCTION").Range(Cells(k, l), Cells(k, l + 3)).Select
selection.AutoFilter
'Traduction de la colonne
If Worksheets("PIECES USINEES").Cells(i, 4).Value <> "" Then
'Recherche de la traduction dans fichier de traduction, si pas trouvé, écriture du mot d'origine avec couleur cellule en rouge
k = 5
FindTranslate = False
While (FindTranslate = False) And Worksheets("TABLEAU_TRADUCTION").Cells(k, l + a).Value <> 0
If Worksheets("PIECES USINEES").Cells(i, 4).Value = Worksheets("TABLEAU_TRADUCTION").Cells(k, l + a).Value And Worksheets("TABLEAU_TRADUCTION").Cells(k, l + 2).Value <> "" Then
Matiere = Worksheets("TABLEAU_TRADUCTION").Cells(k, l + 2).Value
FindTranslate = True
End If
k = k + 1
Wend
End If
'Format
d = 5 'Colonne de départ pour la recherche de l'entete de la liste
l = 0 'Numéro de la colonne recherchée
k = 4 'Ligne de recherche de l'entete de la liste
If Worksheets("TABLEAU_TRADUCTION").Cells(11, 2).Value <> "" Then
While l = 0 And (Worksheets("TABLEAU_TRADUCTION").Cells(k, d).Value <> "" Or Worksheets("TABLEAU_TRADUCTION").Cells(k, d + 1).Value <> "")
If Worksheets("TABLEAU_TRADUCTION").Cells(k, d).Value = Worksheets("TABLEAU_TRADUCTION").Cells(11, 2).Value Then
l = d
End If
d = d + 1
Wend
End If
'Filtre de la liste par ordre croissant pour supprimer les cellules vides
Worksheets("TABLEAU_TRADUCTION").Activate
Range(Cells(k, l), Cells(k, l + 3)).Select
selection.AutoFilter
ActiveWorkbook.Worksheets("TABLEAU_TRADUCTION").AutoFilter.Sort.SortFields. _
Clear
z = Cells(k, l + a).Address
ActiveWorkbook.Worksheets("TABLEAU_TRADUCTION").AutoFilter.Sort.SortFields.Add _
Key:=Range(z), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("TABLEAU_TRADUCTION").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Worksheets("TABLEAU_TRADUCTION").Range(Cells(k, l), Cells(k, l + 3)).Select
selection.AutoFilter
'Traduction de la colonne
If Worksheets("PIECES USINEES").Cells(i, 13).Value <> "" Then
'Recherche de la traduction dans fichier de traduction, si pas trouvé, écriture du mot d'origine avec couleur cellule en rouge
k = 5
FindTranslate = False
While (FindTranslate = False) And Worksheets("TABLEAU_TRADUCTION").Cells(k, l + a).Value <> 0
If Worksheets("PIECES USINEES").Cells(i, 13).Value = Worksheets("TABLEAU_TRADUCTION").Cells(k, l + a).Value And Worksheets("TABLEAU_TRADUCTION").Cells(k, l + 2).Value <> "" Then
Format = Worksheets("TABLEAU_TRADUCTION").Cells(k, l + 2).Value
FindTranslate = True
End If
k = k + 1
Wend
End If
'PoidsMatiere
For m = 5 To 37
If Matiere = Worksheets("TABLEAU_TRADUCTION").Cells(m, 12).Value Then
Poidsmatiere = Worksheets("TABLEAU_TRADUCTION").Cells(m, 14).Value
End If
Next m
'Calcul du poids
If Format = "" Or Format = "LASER" Or Format = "REPRISE" Then
Worksheets("PIECES USINEES").Cells(i, 12).Value = ""
ElseIf Format = "FONDERIE" Then
Worksheets("PIECES USINEES").Cells(i, 12).Value = Worksheets("PIECES USINEES").Cells(i, 12).Value
Else
With Worksheets("PIECES USINEES")
On Error GoTo erreur
.Cells(i, 12) = .Cells(i, 9) * .Cells(i, 10) * .Cells(i, 11) / 1000000000 * Poidsmatiere
GoTo suite
'gestion erreurs
erreur:
.Cells(i, 12) = "Données incorrectes"
suite:
End With
End If
On Error GoTo 0
i = i + 1
Wend
Worksheets("PIECES USINEES").Activate
'passer en calcul automatique
With Application
.Calculation = xlAutomatic
.MaxChange = 0.001
End With
'Désactivation du sablier
Application.Cursor = xlDefault
'Activation de l'écran à la fin des calculs
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
28 août 2014 à 10:14
28 août 2014 à 10:41
Salut Michel,
Désolé pour l'incruste...
La procédure donnée par Michel n'est pas en cause. Je suppose qu'il s'agit d'une erreur dans le format des données de la feuille. Il suffit que l'une des trois valeurs contenues dans : .Cells(i, 9), .Cells(i, 10), .Cells(i, 11) ne soit pas numérique, ou que tu tentes de stocker, dans Poidsmatiere, autre chose qu'une valeur numérique et ça plante...
28 août 2014 à 10:43
28 août 2014 à 10:45