erreur d'exécution 424

mhz

XLDnaute Junior
Bonjour,

j'ai une erreur dans mon code VBA et le message "erreur d'exécution apparait"

c'est à cette ligne le problème survient :
Set rFndVal = shPrm.Columns(sListCol & ":" & sListCol).Find(What:=sValue, LookAt:=xlWhole)

Si vous avez la solution à mon problème ce serait merveilleux !

Merci d'avance !
 

Pièces jointes

  • Formulaire des aides.xlsm
    70.9 KB · Affichages: 40
  • Formulaire des aides.xlsm
    70.9 KB · Affichages: 41
  • Formulaire des aides.xlsm
    70.9 KB · Affichages: 42

Si...

XLDnaute Barbatruc
Re : erreur d'exécution 424

salut

bien que n'ayant pas eu de suite à ma dernière intervention dans l'autre fil ...
un autre exemple avec toutes les listes déroulantes réactualisables.
Comme Robert j’ai modifié pas mal de choses;); entre autres, les noms des contrôles de saisie sont de type Cnn désigne le numéro de colonne de report. Il est plus simple de boucler.
Je n’ai pas abordé les tests de validité des saisies.
J’avais pensé à un Module de Classe mais pas d’évènement Exit pour un contrôle Combobox.

Si... cela t'intéresse, je pourrai te donner les explications.
 

Pièces jointes

  • UsF Listes réactualisables.xlsm
    58.2 KB · Affichages: 37

mhz

XLDnaute Junior
Re : erreur d'exécution 424

Bonjour et merci beaucoup Robert pour votre aise !!!
C'est exactement ce que je recherchais !
J'ai pris presque réussi à tout adapter seulement il y a une erreur que je n'arrive pas à résoudre :/

"erreur d'exécution 35787"

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'à la sortie de la ComboBox1
Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
'condition 1 : si la procédure de vérification d'existence d'une donnée "ValueExist" renvoie [VRAI]
If ValueExist(Me.ComboBox1.Value, 1) = True Then
For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'userForm
If Not CTRL.Name = "ComboBox1" Then 'condition 2 : si le contrôle n'est pas la ComboBox1
'si la propriété [Tag] du contrôle n'est pas vide, récupère la donnée de la ligne LR,
'colonne : propriété [Tag] du contrôle convertie en byte, de l'onglet O
If CTRL.Tag <> "" Then CTRL.Value = O.Cells(LR, CByte(CTRL.Tag))
End If 'fin de la condition2
Next CTRL 'prochaine contrôle de la boucle
'comme je n'ai pas pu tester j'ai rajouté ces 3 lignes mais normalement elle peuvent être supprimées...
Me.DTPicker1.Value = O.Cells(LR, 2) 'récupère la date
Me.DTPicker2.Value = O.Cells(LR, 9) 'récupère la date de début
Me.DTPicker1.Value = O.Cells(LR, 13) 'récupère la date de fin
Me.CommandButton1.Caption = "VALIDER" 'modifie le texte du Bouton "VALIDER"
Else 'sinon
For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'userForm
If Not CTRL.Name = "ComboBox1" Then 'condition 2 : si le contrôle n'est pas la ComboBox1
'si la propriété [Tag] du contrôle n'est pas vide, efface le contenu du contrôle
If CTRL.Tag <> "" Then CTRL.Value = ""
End If 'fin de la condition2
Next CTRL 'prochaine contrôle de la boucle
'comme je n'ai pas pu tester j'ai rajouté ces 3 lignes mais normalement elle peuvent être supprimées...
Me.DTPicker1.Value = Date 'récupère la date
Me.DTPicker2.Value = Date 'récupère la date
Me.DTPicker1.Value = Date 'récupère la date
Me.CommandButton1.Caption = "VALIDER" 'modifie le texte du Bouton "VALIDER"
End If 'fin de la condition 1
End Sub

J'ai trouver une réponse sur un forum qui parle de données vides dans DTPicker, j'ai essayé de changer les guillemets, mais rien n'a fonctionné...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : erreur d'exécution 424

Bonjour le fil bonjour le forum

@ Mhz,

Bizarre que tu aies un erreur sur cette ligne car le code dit :
Si la propriété [Tag] du contrôle n'est pas vide, supprime le contenu du contrôle...
Code:
If CTRL.Tag <> "" Then CTRL.Value = ""
La seule explication que j'ai c'est que tu as donné une valeur à la propriété [Tag] d'un contrôle qui n'accepte pas la propriété [Value]. Comme un Label ou une Checkbox.
Si c'est cela, il ne faut attribuer une valeur à la propriété [Tag] qu'aux comboboxes et au textboxes. Les autres contrôles ne doivent pas avoir de Tag.

Je peux me tromper mais sans ton fichier je ne pourrais t'aider davantage...
 

mhz

XLDnaute Junior
Re : erreur d'exécution 424

Bonjour !
J'ai commencé à adapter mon fichier mais comme il y a pas mal de différences entre les fichiers j'ai repris le votre.
J'ai remis les dtpicker, enlever des commentaires,... j'ai cherché partout si pour la valeur false dans la propriété vallue mais il y a rien d'écris...

Voilà le fichier.
 

Pièces jointes

  • formulaire test.xlsm
    65.7 KB · Affichages: 37
  • formulaire test.xlsm
    65.7 KB · Affichages: 39
  • formulaire test.xlsm
    65.7 KB · Affichages: 41

Robert

XLDnaute Barbatruc
Repose en paix
Re : erreur d'exécution 424

Bonjour le fil, bonjour le forum,

Je suis bien embêté parce que chez moi ça fonctionne. Es-tu vraiment sûre que la ligne qui plante est bien celle que tu m'a décrite ?
J'ai vérifié la propriété [Tag] de tous les contrôles et tout est OK.
Je t'explique le pourquoi du code. Si tu sélectionnes un demandeur existant dans la liste, les contrôles récupèrent les données du demandeur. Mais je me suis rendu compte que si tu changeais d'avis et décidais de remplacer le demandeur sélectionné par un nouveau demandeur, alors les contrôles gardaient les données du premier demandeur. Pour résoudre ce problème j'ai alors décider d'utiliser une condition :
Code:
If ValueExist(Me.ComboBox1.Value, 1) = True Then
    For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'userForm
        If Not CTRL.Name = "ComboBox1" Then 'condition 2 : si le contrôle n'est pas la ComboBox1
            'si la propriété [Tag] du contrôle n'est pas vide, récupère la donnée de la ligne LR,
            'colonne : propriété [Tag] du contrôle convertie en byte, de l'onglet O
            If CTRL.Tag <> "" Then CTRL.Value = O.Cells(LR, CByte(CTRL.Tag))
        End If 'fin de la condition2
    Next CTRL 'prochaine contrôle de la boucle
    'comme je n'ai pas pu tester j'ai rajouté ces 3 lignes mais normalement elle peuvent être supprimées...
    Me.DTPicker1.Value = O.Cells(LR, 2) 'récupère la date (à décommenter chez toi)
    Me.DTPicker2.Value = O.Cells(LR, 9) 'récupère la date de début (à décommenter chez toi)
    Me.DTPicker1.Value = O.Cells(LR, 13) 'récupère la date de fin (à décommenter chez toi)
    Me.CommandButton1.Caption = "MODIFIER" 'modifie le texte du Bouton "VALIDER / MODIFIER"
Else 'sinon
    For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'userForm
        If Not CTRL.Name = "ComboBox1" Then 'condition 2 : si le contrôle n'est pas la ComboBox1
            'si la propriété [Tag] du contrôle n'est pas vide, efface le contenu du contrôle
            If CTRL.Tag <> "" Then CTRL.Value = ""
        End If 'fin de la condition2
    Next CTRL 'prochaine contrôle de la boucle
    'comme je n'ai pas pu tester j'ai rajouté ces 3 lignes mais normalement elle peuvent être supprimées...
    Me.DTPicker1.Value = Date 'récupère la date
    Me.DTPicker2.Value = Date 'récupère la date
    Me.DTPicker1.Value = Date 'récupère la date
    Me.CommandButton1.Caption = "VALIDER" 'modifie le texte du Bouton "MODIFIER"
End If 'fin de la condition 1
Cela vérifie si le demandeur existe dans la liste et , en fonction de la réponse [True] ou [False], alimente ou vide les contrôles.
Tu me dis que c'est cette ligne qui plante :
Code:
If CTRL.Tag <> "" Then CTRL.Value = ""
mais il n'y a aucune raison qu'elle plante !
Il faut que tu fasses tourner le code pas à pas à l'aide de la touche [F8] dès l'initialisation de l'UserForm.
Pour cela :
• va dans l'editeur visual basic ([Alt]+[F11])
• clique sur le composant UserForm1 dans la cadre en haut à gauche
• quand tu vois ton userform s'afficher dans le grand cadre à droite tu appuies sur la touche [F7]
• la fenêtre de l'UserForm et remplacée par le code de cet userform.
• place ton curseur dans la première ligne :
Code:
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
• appuie maintenant sur la touche [F8] pour lire ligne après ligne ([F8] après [F8])
Bien sûr c'est très long car quand il y a des boucles il faut tout passer. Si le code s'arrête c'est que L'UserForm est affiché. Il te faut le remplir et continuer avec [F8] jusqu'à ce que tu aies un message d'erreur avec la ligne qui plante surligée de jaune...
Tu peux accélérer la lecture des boucles en rajoutant des point d'arrêt (à l'aide de la touche [F9]) dans la ligne juste àprès une boucle et remplacer la touche [F8] (lecture pas à pas) par la touche [F5] (lecture normale jusqu'àu point d'arrêt s'il y en a)...

J'espère que tu vas découvrir le problème car, encore une fois, chez moi pas de bug ! Mais je n'ai pas les DTPickers...
 

mhz

XLDnaute Junior
Re : erreur d'exécution 424

Merci pour votre aide, je vais m'y atteler !
J'utilise la touche F8 comme vous dites mais je vais recommencer car je veux vraiment arriver à faire cette manip' c'est la dernière modif que je veux apporter à mon formulaire !!

Effectivement c'est bizarre que sur mon pc ça ne fonctionne pas ! Je vais essayer sur un de mes collègues ou chez moi, peut être que c'est l'ordinateur qui devient fou :D
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : erreur d'exécution 424

Bonjour le fil, bonjour le forum,

peut être que c'est l'ordinateur qui devient fou :D
Rien d'étonnant ! Le dernier que j'avais se prenait pour Don Quichotte il a fallu le faire internet dans un H.P.... Aux dernières nouvelles il se serait échappé et vit des jours paisibles dans une décharge à Moulins dans l'allier (y'a pas de hasard !) sans son allier Sancho qui lui, vit à Vichy où il tente désespérément une cure d'amaigrissement...
Non j'ai pas dit qu'il avait le sang chaud Sancho ! Bon Ok je l'avais pensé très fort...
 

mhz

XLDnaute Junior
Re : erreur d'exécution 424

Bonjour !

J'ai beau avoir retourné le problème dans tout les sens je n'arrive à faire fonctionner le code !
Je comprend pas pourquoi, en plus il détecte 2 erreurs, celle que j'ai déjà posté et une autre :
O.Cells(LI, 2).Value = DTPicker1.Value 'envoie la date du DTPicker1 dans la cellule ligne : L , colonne 2 de l'onglet O => erreur d’exécution 1004, errreur définie par l'application ou par l'objet.

Si quelqu'un à une solution ? En plus ce n'est pas à titre personnel que je mets en place cet outil, mais professionnel du coup c'est frustrant ;( ;( ;(
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : erreur d'exécution 424

Bonjour le fil, bonjour le forum,

N'ayant pas ce contrôle dans ma machine je ne peux malheureusement pas t'aider sur ce coup... Si tu n'obtiens pas d'aide je te conseille de faire un nouveau fil en ne parlant que de ce problème, car j'ai écris ce code sans le testé. Peut-être qu'un DTPicker n'a pas de propriété [Value] ? Il faudrait que tu vérifie dans le fenêtre des propriétés en sélectionnant un DTPicker...

[Édition]
Que valent les variables O et LI quand ça plante ?
Si O n'est pas définie, ça plante...
Si LI = 0 ou dépasse la capacité de son type (voir sa déclaration), ça plante aussi...
Il faudrait vérifier, pas à pas, pourquoi ces variables ont le(s) problème(s) cité(s) plus haut...
 
Dernière édition:

mhz

XLDnaute Junior
Re : erreur d'exécution 424

Très bien je vais résoudre mon problème sur une autre conversation.
Non je n'ai pas trouvé de propriété value.. J'aurais dû vous dire qu'il n'y en avait pas dès le début mais j'y ai pas pensé.
En tout merci beaucoup pour le temps passé à m'aider !
 

mhz

XLDnaute Junior
Re : erreur d'exécution 424

Merci à tous ceux qui m'ont aidé !!
J'ai pu trouver la solution au problème grâce à un autre professionnel d'excel sur le forum en plaçant "On Error Resume Next" au dessus du code "If CTRL.Tag <> "" Then CTRL.Value = "" "
Et j'ai enlevé la variable "LI" à la ligne O.Cells(LI, 2).Value = DTPicker1.Value 'envoie la date du DTPicker1 dans la cellule ligne : L , colonne 2 de l'onglet O et inséré la variable "L".

Mille mercis, mon formulaire marche, mes collègues vont pouvoir l'exploiter à merveille !!!!
 

Discussions similaires

Réponses
14
Affichages
898
Réponses
5
Affichages
249