Erreur d'exécution 424 vba excel

Fermé
Gaustavo Messages postés 4 Date d'inscription mercredi 15 mars 2017 Statut Membre Dernière intervention 17 mars 2017 - Modifié par Gaustavo le 15/03/2017 à 11:47
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 18 mars 2017 à 12:53
Bonjour,
Je suis nouveau dans ce Forum, je viens de commencer à apprendre le VBA EXCEL et je veux exécuter ma première macro mais un message d'erreur s'affiche lors de l'exécution de ma macro, je serai reconnaissant si quelqu'un peut m'aider pour trouver la solution de mon problème et avancer dans ma formation sur VBA, ci-après mon code :

Sub Facteur()
Dim variable1 As Double, variable2 As Double, variable3 As Double, variable4 As Double, variable5 As Double, variable6 As Double, variable7 As Double, variable8 As Double
Dim variable9 As Double, variable10 As Double, variable11 As Double, variable12 As Double, variable13 As Double, variable14 As Double
Dim variable15 As Double, variable16 As Double, variable17 As Double, variable18 As Double

If Not Application.Intersect(Target, Range("g9:g169")) Is Nothing Then
For Each Cell In Feuil8.Range("g9:g169")
If Cells(i, 2).Value = "Cisailles" Then
variable1 = InputBox$("Veuillez entrer une valeur entre 0,1 et 0,8 pour ce type d'équipement")
Cells(i, 7).Value = variable1
ElseIf Cells(i, 2).Value = "Clés à choc, boulon Ø 6mm" Or Cells(i, 2).Value = "Clés à choc, boulon Ø 12mm" Or Cells(i, 2).Value = "Clés à choc, boulon Ø 16mm" Or Cells(i, 2).Value = "Clés à choc, boulon Ø 20mm" Or Cells(i, 2).Value = "Visseuses 6mm" Or Cells(i, 2).Value = "Visseuses 8mm" Or Cells(i, 2).Value = "Visseuses 10mm" Then
variable2 = InputBox$("Veuillez entrer une valeur entre 0,1 et 0,6 pour ce type d'équipement")
Cells(i, 7).Value = variable2
ElseIf Cells(i, 2).Value = "Clés à choc, boulon Ø 33mm" Or Cells(i, 2).Value = "Clés à choc, boulon Ø 33mm" Then
variable3 = InputBox$("Veuillez entrer une valeur entre 0,1 et 0,3 pour ce type d'équipement")
Cells(i, 7).Value = variable3
ElseIf Cells(i, 2).Value = "Brise béton 14 à 15kg" Or Cells(i, 2).Value = "Brise béton 28kg" Or Cells(i, 2).Value = "Dérouleur à aiguilles" Or Cells(i, 2).Value = "Marteau piqueurs de 7kg" Or Cells(i, 2).Value = "Marteau piqueurs de 13,5kg" Then
variable4 = InputBox$("Veuillez entrer une valeur entre 0,5 et 0,8 pour ce type d'équipement")
Cells(i, 7).Value = variable4
ElseIf Cells(i, 2).Value = "Grignoteuse" Then
variable5 = InputBox$("Veuillez entrer une valeur entre 0,5 et 0,6 pour ce type d'équipement")
Cells(i, 7).Value = variable5
ElseIf Cells(i, 2).Value = "Marteaux burineurs de 1,3kg" Or Cells(i, 2).Value = "Marteaux burineurs de 2,3kg" Then
variable6 = InputBox$("Veuillez entrer une valeur entre 0,2 et 0,3 pour ce type d'équipement")
Cells(i, 7).Value = variable6
ElseIf Cells(i, 2).Value = "Meuleuse pneumatique Ø 100mm" Or Cells(i, 2).Value = "Meuleuse pneumatique Ø 150mm" Or Cells(i, 2).Value = "Meuleuse pneumatique Ø 180mm" Or Cells(i, 2).Value = "Meuleuse pneumatique Ø 235mm" Or Cells(i, 2).Value = "Ponceuse pour meule Ø 127mm" Or Cells(i, 2).Value = "Ponceuse pour meule Ø 180mm" Then
variable7 = InputBox$("Veuillez entrer une valeur entre 0,4 et 0,5 pour ce type d'équipement")
Cells(i, 7).Value = variable7
ElseIf Cells(i, 2).Value = "Perceuses et taraudeuses 6 à 8mm" Or Cells(i, 2).Value = "Perceuses et taraudeuses 8 à 10mm" Or Cells(i, 2).Value = "Perceuses et taraudeuses 10 à 13mm" Then
variable8 = InputBox$("Veuillez entrer une valeur entre 0,4 et 0,6 pour ce type d'équipement")
Cells(i, 7).Value = variable8
ElseIf Cells(i, 2).Value = "Perceuses et taraudeuses 18mm" Or Cells(i, 2).Value = "Perceuses et taraudeuses 22mm" Or Cells(i, 2).Value = "Perceuses et taraudeuses 32mm" Then
variable9 = InputBox$("Veuillez entrer une valeur entre 0,3 et 0,7 pour ce type d'équipement")
Cells(i, 7).Value = variable9
ElseIf Cells(i, 2).Value = "Pistolet de peinture" Or Cells(i, 2).Value = "Pistolet à vernis" Then
variable10 = InputBox$("Veuillez entrer une valeur entre 0,6 et 0,9 pour ce type d'équipement")
Cells(i, 7).Value = variable10
ElseIf Cells(i, 2).Value = "Ponceuse orbitale à disque" Or Cells(i, 2).Value = "Ponceuse orbitale à patin" Then
variable11 = InputBox$("Veuillez entrer une valeur entre 0,8 et 0,9 pour ce type d'équipement")
Cells(i, 7).Value = variable11
ElseIf Cells(i, 2).Value = "Soufflettes (buses Ø 2)" Then
variable12 = InputBox$("Veuillez entrer une valeur entre 0,1 et 0,2 pour ce type d'équipement")
Cells(i, 7).Value = variable12
ElseIf Cells(i, 2).Value = "Palan 1000 kg" Then
variable13 = InputBox$("Veuillez entrer 0,1 comme facteur d'utilisation pour ce type d'équipement")
Cells(i, 7).Value = variable13
ElseIf Cells(i, 2).Value = "Riveteuse" Then
variable14 = InputBox$("Veuillez entrer 0,2 comme facteur d'utilisation pour ce type d'équipement")
Cells(i, 7).Value = variable14
ElseIf Cells(i, 2).Value = "Marteau piqueurs de 35kg" Then
variable15 = InputBox$("Veuillez entrer 0,6 comme facteur d'utilisation pour ce type d'équipement")
Cells(i, 7).Value = variable15
ElseIf Cells(i, 2).Value = "Soudeuse par point" Then
variable16 = InputBox$("Veuillez entrer 0,75 comme facteur d'utilisation pour ce type d'équipement")
Cells(i, 7).Value = variable16
ElseIf Cells(i, 2).Value = "Marteau Démolisseur 20 kg" Then
variable17 = InputBox$("Veuillez entrer 0,8 comme facteur d'utilisation pour ce type d'équipement")
Cells(i, 7).Value = variable17
ElseIf Cells(i, 2).Value = "Perforateur" Then
variable18 = InputBox$("Veuillez entrer 0,85 comme facteur d'utilisation pour ce type d'équipement")
Cells(i, 7).Value = variable18
End If
Next
End If
End Sub
A voir également:

2 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
15 mars 2017 à 13:44
Bonjour Gaustavo, bonjour le forum,

Target est un argument de certaines macros événementielles comme Change, SelectionChange, etc. d'un onglet.
Tu ne peux pas l'utiliser dans une procédure d'un module standard comme tu l'as fait dans ta procédure Sub Facteur().

Second point, tu utilises la variable i mais à aucun moment tu n'en défini la valeur. Donc elle vaut 0 au début et par conséquent Cells(i, 2) va générer une autre erreur...
0
Gaustavo Messages postés 4 Date d'inscription mercredi 15 mars 2017 Statut Membre Dernière intervention 17 mars 2017
16 mars 2017 à 11:13
Bonjour ThauTheme,

Tout d'abord, je tiens à vous remercier chaleureusement pour votre interaction et l'aide que vous m'apportez. Bah, je vous explique mon problème : je suis entrain d'élaborer une feuille de calcul et je veux une instruction qui me permet de parcourir les cellules de toute une colonne en Excel et en fonction de la valeur de la cellule (i,j) affiche une boite de dialogue qui demande de saisir une valeur qui sera affectée à une autre cellule (i,k) qui se trouve dans la même ligne.
Et concernant l'instruction : If Not Application.Intersect(Target, Range("g9:g169")) Is Nothing Then
je l'ai utilisé pour que mon programme s’exécute à chaque clique sur une cellule (i,k).

Je serai ravi et reconnaissant si vous m'aidez à résoudre ces problèmes.
Merci et bonne journée!
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160 > Gaustavo Messages postés 4 Date d'inscription mercredi 15 mars 2017 Statut Membre Dernière intervention 17 mars 2017
16 mars 2017 à 14:08
Bonjour Gaustavo, bonjour le forum,

Pour bien comprendre il me faudrait le fichier ! Voir par exemple https://www.cjoint.com/ pour mettre un fichier en pièce jointe.
0
Gaustavo Messages postés 4 Date d'inscription mercredi 15 mars 2017 Statut Membre Dernière intervention 17 mars 2017
16 mars 2017 à 17:08
Merci beaucoup ThauTheme,

j'ai mis ci-joint l'adresse de mon fichier, vous allez trouvez dans le fichier l'explication du problème ainsi que le travail que j'essaye de faire. Merci encore pour votre aide.

https://www.cjoint.com/c/GCqqa46yeLL
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160 > Gaustavo Messages postés 4 Date d'inscription mercredi 15 mars 2017 Statut Membre Dernière intervention 17 mars 2017
16 mars 2017 à 21:24
Re,

Gaustavo, ce n'est pas une capture d'écran qu'il me faut mais bien les données réelles de l'onglet Feuille de données (pas envie de tout retaper) ! Je pense aussi que pour faciliter les choses le tableau de cet onglet devrait avoir deux colonnes de coefficient à la fin : une colonne coefficient minimum et une colonne coefficient maximum.

En pièce jointe un exemple avec juste deux données et la macro événementielle Change de l'onglet Feuil1 ci-dessous, tu adapteras pour la suite.. J'ai utilisé la formule DECALER pour générée la plage nommé Désignation ce qui la rend dynamique.

Choisis une machine an colonne A...

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim R As Range 'déclare la variable R (Recherche)
Dim FU As Variant 'déclare la variable FU (Facteur d'Utilisation)
Dim Min As Double 'déclare la variable Min (Minimum)
Dim Max As Double 'déclare la variable Max (Maximum)

'si le changement a lieu ailleurs que dans la plage A4:A18, sort de la procédure
If Application.Intersect(Target, Range("A4:A18")) Is Nothing Then Exit Sub
'si la selection contient plus d'une seule cellule ou si la cellule est effacée, sort de la procédure
If Selection.Cells.Count > 1 Or Target.Value = "" Then Exit Sub
'définit la recherche R (recherche dans la plage nommée "Désignation" la valeur entière de la cellule éditée)
Set R = Sheets("Feuille de données").Range("Désignation").Find(Target.Value, , xlValues, xlWhole)
If Not R Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
    Min = R.Offset(0, 3).Value 'définit la variable Min de la première occurrence trouvée
    Max = R.Offset(0, 4).Value 'définit la variable Max de la première occurrence trouvée
End If 'fin de la condition
ici: 'étiquette
'définit le facteur d'utilisation FU
FU = Application.InputBox("Entrer le facteur d'utilisation compris entre :", "FACTEUR D'UTILISATION", Min & " et " & Max, Type:=1)
If FU = False Then Exit Sub 'si bouton [Annuler], sort de la procédure
If CDbl(FU) < Min Or CDbl(FU) > Max Then 'si FU (convertie en double) est inférieure à Min ou supérieure à Max
    MsgBox "Valeur non valide !" 'message
    GoTo ici 'va à l'étiquette "ici"
End If 'fin de la condition
Target.Offset(0, 1).Value = CDbl(FU) 'renvoie dans la cellule à droite la valeur de FU convertie en double
End Sub


Au passage, ta macro CalculPerimetre devrait plutôt se trouver dans un module standard que dans le composant VBA Feuil1(Feuil1)...

Le fichier :
https://www.cjoint.com/c/GCquvxQCVDR
0
Gaustavo Messages postés 4 Date d'inscription mercredi 15 mars 2017 Statut Membre Dernière intervention 17 mars 2017 > ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022
17 mars 2017 à 17:54
Bonjour ThauTheme,

J'espère que vous allez très bien, bah j'ai testé le code que vous m'avez proposé dans ma feuille de calcul mais s’exécute pas automatiquement dès que j'entre une désignation d'un outil, est ce que je dois créer un menu déroulant indépendamment ou c'est inclue dans le programme que vous m'avez envoyé?
Je vous joins mon fichier qui comprend plusieurs feuilles et seulement "feuil de calcul" et "feuille de données" qui sont concernées par le programme. Et c'est d'ailleurs la raison pourquoi je vous ai envoyé la dernière fois seulement les feuilles concernés pour ne pas vous déranger par tout le fichier.

Merci encore de me présenter l'aide et le soutien, c'est vraiment très gentil de votre part.

Le fichier :
https://www.cjoint.com/c/GCrqGFSkN0e
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
18 mars 2017 à 12:53
Bonjour Gaustavo, bonjour le forum,

- Suppression d'une ligne vide dans le tableau des colonnes L à P de l'onglet Feuille de données car avec la formule DECALER pour la plage nommée Désignation elle devient dynamique. Elle s'adapte automatiquement si tu ajoutes ou supprimes des lignes mais elle n'accepte pas de ligne vide.
- Rajout d'une Liste de validation de données dans la plage B9:B169 de l'onglet feuille de calcul
- Adaptation du code avec tes tableaux.

Ça me paraît fonctionnel. Le fichier ici :
https://www.cjoint.com/c/GCsl1amheYR
0