Procédure type RechercheH
Bonsoir le forum,
Dans le cadre de mon travail, je mets au point un logiciel de gestion de la fertilisation des sols.
Pour cela j'ai mis au point un formulaire (UserForm) au cours duquel l'utilisateur est amené à sélectionner le type de matière organique qu'il apporte sur son sol (exemple: fumier de mouton, fiente de volaille, ....) en cochant des checkbox. Il peut en cocher maximum 2. J'ai ensuite réalisé un tableau dans lequel il est indiqué si la matière organique est utilisée ou non (1 si elle est utilisé, 0 si non) que j'ai appelé reponse_MO.
Je voudrais maintenant mettre en place une procédure qui permettrait de lister quelles matières organiques sont utilisées par l'agriculteur dans des cellules qui se suivent (par exemple si l'utilisateur a coché "Fumier de mouton" et "Fiente de volaille", je voudrais que cette procédure permette d'afficher "Fumier de mouton" en (C,46) et "Fiente de volaille" en (C,47) à partir des valeurs 0 ou 1 de reponse_MO).
Pour cela, j'ai écrit cette procédure
Sub ProcedureRechercheH()
'Rédaction de la fonction RECHERCHEH
Dim NbColonnes As Integer
Dim Compteur As Integer
NbColonnes = reponse_MO.Column.Count
Compteur = 0
For i = 1 To NbColonnes
If reponse_MO(2, i).Value = 1 Then
Worksheets("EntréeDonnées").Cells(3, 46 + Compteur).Value = reponse_MO(1, i).Value
Compteur = Compteur + 1
Else
Worksheets("EntréeDonnées").Cells(3, 46).Value = ""
End If
Next i
End Sub
Cependant, impossible de la faire fonctionner, un beau "Erreur d'exécution 424 : objet requis" apparaît à chaque fois, il semblerait que cela concerne reponse_MO mais je ne comprends pas pourquoi puisqu'il existe?
Je vous remercie par avance pour votre aide précieuse !
Bonjour
Tu écris à propos de "reponse_MO" :
je ne comprends pas pourquoi puisqu'il existe?
Peut-être existe-t-il pour toi mais il n'existe pas pour la macro puisque aucune instruction ne le définit.
Le déclarer comme variable ne suffit pas...
OK ?
Bye !
Bonjour,
Merci pour cette réponse (bien qu'elle me semble un peu sèche ^^). J'ai donc modifié mon code pour déclarer le tableau mais toujours la même "Erreur 424" qui apparaît ! Mon code ressemble maintenant à ça :
Sub ProcedureRechercheH()
'Rédaction de la fonction RECHERCHEH
Dim reponse_MO As Variant, Compteur As Integer
reponse_MO = Sheets("HiddenData").Range("L27:T30")
Compteur = 0
For i = 1 To 9
If reponse_MO(3, i).Value = 1 Then
Worksheets("EntréeDonnées").Cells(3, 46 + Compteur).Value = reponse_MO(1, i).Value
Compteur = Compteur + 1
Else
Worksheets("EntréeDonnées").Cells(3, 46).Value = ""
End If
Next i
End Sub
Merci d'avance pour votre aide
"reponse_MO" telle que tu l'as définie est une variable tableau.
Pour obtenir une des valeurs qu'elle contient, il est incorrect de la faire suivre de ".value" comme on le fait pour obtenir la valeur contenue dans une cellule.
Si tu corriges tu obtiendras :
Sub ProcedureRechercheH()
'Rédaction de la fonction RECHERCHEH
Dim reponse_MO As Variant, Compteur As Integer
Dim i&
reponse_MO = Sheets("HiddenData").Range("L27:T30")
Compteur = 0
For i = 1 To 9
If reponse_MO(3, i) = 1 Then
Worksheets("EntréeDonnées").Cells(3, 46 + Compteur).Value = reponse_MO(1, i)
Compteur = Compteur + 1
Else
Worksheets("EntréeDonnées").Cells(3, 46).Value = ""
End If
Next i
End SubEt ta macro fonctionnera mais je ne sais pas trop ce qu'elle te donnera comme résultat.
Il me faudrait ton fichier et un exemple de ce que tu veux obtenir pour mieux voir...
Bye !
Bonjour,
Merci pour cette correction, l'erreur n'apparaît plus !
En revanche il est vrai que je n'obtiens pas le résultat escompté...
En pièce jointe je vous transmets le fichier ! Ma procédure se trouve dans le UserForm FormEngraisMO. Veuillez excuser la mise en forme, j'ai du supprimer de nombreuses choses pour que le fichier fasse la taille maximale autorisée.
En fait, je souhaiterais que lorsque l'utilisateur coche une des matières organiques, le nom de cette dernière s'affiche dans la feuille "Entrée Données" en (46,C) lorsqu'on appuie sur OK. Et à vrai dire, puisqu'il peut en cocher jusqu'à deux, également que la deuxième MO (s'il y en a) soit affichée en (47,C).
A savoir que dès qu'une matière organique est cochée, un 1 apparaît à la place du 0 dans le tableau reponse_MO (feuille Hidden Data).
Voilà je ne sais pas si j'ai été assez claire, dîtes moi si vous souhaitez que j'améliore mes explications !
Merci d'avance pour votre aide !
Un essai à tester pour le report du type de matière organique en C46 et C47.
Bye !
Votre code marche à merveille, merci beaucoup !
Juste pour ne pas mourir bête, pourriez vous m'expliquer ce que signifie cette partie du code?
Do While fe.Range("C" & lgn) <> ""
lgn = lgn + 1
Exit Do
Loop
fe.Range("C" & lgn) = Controls("CheckMO" & i).Caption
flag = flag + 1
End If
Je n'ai pas bien compris ce que signifiait la condition du while ainsi que le loop.
Je vous remercie encore mille fois pour l'aide apportée et le temps que vous m'avez accordée, je n'aurais jamais pu faire un code aussi propre !
Excellente journée à vous !
NDIAYE a écrit :Je n'ai pas bien compris ce que signifiait la condition du while ainsi que le loop.
C’est là une façon de faire une boucle.
Do while signiffe, en anglais ‘’faire tant que ‘’.
Suit une condition : … la cellule de la colonne C à la ligne lgn n’est pas vide
Si cette condition est remplie la macro exécute les instructions suivantes jusqu'à ''Loop"" qui marque la fin de la boucle
Cette boucle permet de trouver la première cellule vide à partir de la ligne ''lgn'', variable initialisée à 46 et qui s'incrémente ainsi jusqu'à trouver une cellule vide.
On a alors la ligne( lgn) où écrire la valeur (nom du checkbox) et on sort de la boucle.
OK ?
Bye !
D'accord, merci beaucoup pour tout ! (explications et code)
Bonne fin de journée à vous