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 Sub

Et 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 !

7ferti-mbaay2.xlsm (51.06 Ko)

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

Rechercher des sujets similaires à "procedure type rechercheh"