Frm de recherche VBA (userform)

Fermé
Nounou1902 - 18 sept. 2021 à 13:38
yg_be Messages postés 22696 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 avril 2024 - 18 sept. 2021 à 14:13
bonjour à tous,

Je me permet de poster un message car depuis plusieurs jours je suis sur un colle et je ne comprend vraiment pas comment faire et c'est la fin de mon projet il ne me reste plus que ça.

La demande concerne la page intitulée "rapport d'expansion"

Pour quelqu'un qui connaît le VBA il n'y a pas grand chose a trouver mais pour moi ça me paraît impossible.

J'ai créer un formulaire de recherche (userform) j'ai relié toutes les plage comme vous pourrez le voir dans le fichier Excel ci-joint ou dans le code ci-dessous

Le formulaire fonctionne sauf quand je créer une nouvelle feuille qui est associé au bouton macro dont le code est ci dessous également et bien mon formulaire de recherche ce met à ne plus chercher dans la bonne colonnes.

Merci infiniment a celui qui trouvera ma colle.

Et si ce n'est pas trop demandé quel code pourrai-je introduire pour que quand le "numero de lot" n'existe pas il arrête de chercher à l'infini et me met un message d'erreur (le numero de lot n'existe pas)

Et vraiment sa c'est du plus le code pour pouvoir effacer avec la toucher effacer la case intitulé (LE NUMERO DE LOT)

Merci infiniment à celui qui arrivera à resoudre ce problème cela me permettrait de finaliser la réalisation de mon projet que je dois donné la semaine prochaine.

Voici le code du FRM de recherche :

Private Sub UserForm_Initialize()

Me.Message_lbl = "Veuillez inscrire le numéro de lot concernant la production à rechercher"

End Sub

Private Sub lenumerodelot_Change()

'se positionner'

Feuil3.Activate

Range("H5").Select

'on boucle tous les lots de la colonne H'

Do Until ActiveCell = CLng(Me.lenumerodelot)

ActiveCell.Offset(1, 0).Select

Loop

Me.lesdates = ActiveCell.Offset(0, -7)

Me.les_operateurs = ActiveCell.Offset(0, 21)

Me.qualiteprogramee = ActiveCell.Offset(0, -6)

Me.matierepremiere = ActiveCell.Offset(0, -4)

Me.laquantite = ActiveCell.Offset(0, -1)

Me.expansionunoudeux = ActiveCell.Offset(0, 1)

Me.expanseurlist = ActiveCell.Offset(0, 3)

Me.heurededebut = ActiveCell.Offset(0, 4)

Me.heuredefin = ActiveCell.Offset(0, 5)

End Sub

Private Sub btn_fermer_Click()

Unload Me

End Sub

Voici le code de la macro pour ouvrir une nouvelle feuille (car c'est pour être à prendre en considération) :

Sub NOUVELLE_FEUILLE_DE_PRODUCTION()

ActiveSheet.Unprotect

Range("A1:AE35").Copy

Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 40).Select

ActiveSheet.Paste

Range("B1:B3").ClearContents

Range("A5:N30").ClearContents

Range("E32:N34").ClearContents

ActiveWindow.Zoom = 55

Range("A1").Select

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

End Sub

Et un photo pour ceux ou celle qui ne souhaite pas telecharger le fichier pour montrer sa composition :

1 réponse

yg_be Messages postés 22696 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 avril 2024 1 471
18 sept. 2021 à 14:13
bonjour, il est préférable d'éviter select et activate.
par ailleurs, pour éviter de chercher à l'infini, le mieux c'est de déterminer quand s'arreter. peut-être, par exemple, quand la cellule est vide?
ainsi:
Private Sub lenumerodelot_Change()
dim cl as range
set cl= Feuil3.Range("H5")
Do Until cl = ""
    if cl = CLng(Me.lenumerodelot) then
            Me.lesdates = cl.Offset(0, -7)
            ' ...
            Me.heuredefin = cl.Offset(0, 5)
            exit sub
    end if
    set cl=cl.Offset(1, 0)
Loop
msgbox "le numero de lot n'existe pas"
end sub
0