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
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
A voir également:
- Erreur d'exécution 424 vba excel
- Liste déroulante excel - Guide
- Erreur 1004 vba ✓ - Forum VB / VBA
- Formule excel - Guide
- Déplacer une colonne excel - Guide
- Find vba - Astuces et Solutions
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
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...
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...
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
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
- 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
16 mars 2017 à 11:13
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!
16 mars 2017 à 14:08
Pour bien comprendre il me faudrait le fichier ! Voir par exemple https://www.cjoint.com/ pour mettre un fichier en pièce jointe.
16 mars 2017 à 17:08
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
16 mars 2017 à 21:24
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 SubAu 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
17 mars 2017 à 17:54
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