XL 2016 Frm de recherche VBA (userform)

nounou1902

XLDnaute Nouveau
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 plages comme vous pourrez le voir 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


Tres cordialement
 
Solution
Bonjour à tous

Bien que trop tard je poste quand même...

VB:
Private Sub lenumerodelot_Change()

Dim Derlig&, i&
Derlig = Feuil3.Range("H" & Rows.Count).End(xlUp).Row
Range("H5").Select
For i = 5 To Derlig

    If Range("H" & i) = CLng(Me.lenumerodelot) Then
        Range("H" & i).Offset(0, 0).Select

        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 =...

JM27

XLDnaute Barbatruc
Bonsoir
Pourquoi mettre des list box pour récupérer une info -( un text box peut très bien le faire)

en zippant le fichier il passe

J'ai passé le style de ta combo box Me.lenumerodelot en dropdownlist au lieu de dropdowncombo , ce qui évite des recherches infructueuses.

A toi de finir sur les exemples

nota: je ne comprends pas ta copie dans la Sub NOUVELLE_FEUILLE_DE_PRODUCTION()

Tu viens copier dans la même feuille en A70 ta zone à partir de A5 ????

et ainsi de suite avec un décalage de environ 40 lignes ( est ce bien cela ?)

Pour info : tu vas vite avoir des soucis , a force de copier des zones à la suite les unes des autres cela va vite remplir ta feuilles ( je sais il y a plus d'un million de lignes) et tes recherches seront de plus en plus difficiles.
Il faudrait repenser ton fonctionnement : je verrai plutôt une base de données qui sera remplie par l'intermédiaire d'un userform de saisie ( et de consultation) , qui sera bien plus facile à exploiter , mais pour cela il faudra revoir ta méthode de fonctionnement. et tout cela n'est que supposition car je n'ai peut être pas tout compris dans ton fonctionnement.( je crois comprendre que des opérateurs remplissent une feuille de production en fin de poste)

J'ai rajouté une ligne en A1 pour éviter d'avoir le collage des boutons à chaque transfert de données

Edit : j'ai modifié plusieurs fois de suite le fichier , car j'ai trouvé de nombreuses erreurs , prendre cette dernière version .
 

Pièces jointes

  • expansion 4.zip
    761.1 KB · Affichages: 9
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonjour à tous

Bien que trop tard je poste quand même...

VB:
Private Sub lenumerodelot_Change()

Dim Derlig&, i&
Derlig = Feuil3.Range("H" & Rows.Count).End(xlUp).Row
Range("H5").Select
For i = 5 To Derlig

    If Range("H" & i) = CLng(Me.lenumerodelot) Then
        Range("H" & i).Offset(0, 0).Select

        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)
        Exit Sub
    Else
        If Derlig = i Then
            Me.lesdates = ""
            Me.les_operateurs = ""
            Me.qualiteprogramee = ""
            Me.matierepremiere = ""
            Me.laquantite.Value = ""
            Me.expansionunoudeux = ""
            Me.expanseurlist = ""
            Me.heurededebut = ""
            Me.heuredefin = ""
            Exit Sub
        End If
    End If
Next i

End Sub

*Je suis du même avis que @JM27 c'est une usine à gaz en devenir 🤪

@Phil69970
 
Dernière édition:

nounou1902

XLDnaute Nouveau
Bonjour,

Alors déjà merci infiniment pour votre aide précieuse inscrit principalement le code VBA de Phil69970 ainsi que changer les listbox en textbox comme tu me la conseillé JM27 j'ai changer quelque peut l'ordre des instructions comme le code ci-joint :
Private Sub UserForm_Initialize()
Me.Message_lbl = "Veuillez inscrire le numéro de lot concernant la production à rechercher"

End Sub

Private Sub lenumerodelot_Change()

Dim Derlig&, i&
Derlig = Feuil3.Range("H" & Rows.Count).End(xlUp).Row
Range("H5").Select
For i = 5 To Derlig

If Range("H" & i) = CLng(Me.lenumerodelot) Then
Range("H" & i).Offset(0, 0).Select

Me.lesdates = ActiveCell.Offset(0, -7)
Me.lesoperateurs = ActiveCell.Offset(0, 21)
Me.qualiteprogramee = ActiveCell.Offset(0, -6)
Me.laquantite = ActiveCell.Offset(0, -1)
Me.lesexpanseurs = ActiveCell.Offset(0, 3)
Me.heurededebut = ActiveCell.Offset(0, 4)
Me.heuredefin = ActiveCell.Offset(0, 5)
Me.refmatierepremiere = ActiveCell.Offset(0, -4)
Me.premiereoureprise = ActiveCell.Offset(0, 1)
Exit Sub
Else
If Derlig = i Then
MsgBox "ce lot n'existe pas ou la production n'est pas repertoriée"

Me.lesdates = ""
Me.lesoperateurs = ""
Me.qualiteprogramee = ""
Me.laquantite = ""
Me.refmatierepremiere = ""
Me.premiereoureprise = ""
Me.lesexpanseurs = ""
Me.heurededebut = ""
Me.heuredefin = ""
Exit Sub
End If
End If
Next i

End Sub

Private Sub btn_fermer_Click()
Unload Me

End Sub

Je me poser la question si il était possible de pouvoir avoir les deux informations concernant la recherche avec numéro de lot (en colonne H) et intégrer une liste box qui en fonction de ce que le numéro de lot à trouvé (donc après l'avoir rentrer) nous donne la possibilité de choisir entre "PREMIERE PASSE" ou "REPRISE" affichant donc la description correspondante.

Ps : A savoir que nous avec un numéro de lot il ne peut y avoir que une (PREMIERE PASSE) et une (REPRISE).
Comme nous pouvons le voir via la photo ci-joint en I5 et I8 nous avons le numéro de lot 1.

Merci encore
 

Pièces jointes

  • 2021-09-19 (5).png
    2021-09-19 (5).png
    222.1 KB · Affichages: 24

nounou1902

XLDnaute Nouveau
Je parle pas trop le langage BBA même si je pense avoir une bonne logique je manque d'expérience.
Je sais pas comment l'écrire mais je pourrais dire :
le bouton première passe reste cocher et si je coche le bouton reprise va cherche dans la colonne H le numéro 1 et dans la colonne I l'inscription "REPRISE" puis il affiche les recherches.
Enfin il doit y avoir tellement de façon étant donné que la logique peut prendre plusieurs chemins pour arriver au même point la preuve avec mon Usine à gaz lol :')
 

nounou1902

XLDnaute Nouveau
Non tous est parfait,
quand je marque un numéro qui existe sa production apparait, quand il n'existe pas j'ai un message d'erreur donc parfait, seul petit truc mais c'est pas grave je ferait avec quand je veux rentrer un nouveau numéro de lot dans le FRM de recherche je dois re sélectionner le numéro plutôt que d'appuyer sur la touche effacer mais c'est pas bien méchant.

Je peux également rechercher après avoir dupliquer une nouvelle feuille de production, dans (toutes les feuilles qui s'inscrivent en dessous et la feuille en cours de production)
il me manque juste mon problème inscrit dans mon précédent mail.

Oui sans problème tu trouveras le fichier en zip ci-joint.
 

Pièces jointes

  • expansion 4 MODIF 2.zip
    756.1 KB · Affichages: 8

JM27

XLDnaute Barbatruc
bonsoir
ta recherche du numéro de lot s'effectue sur l'ensemble de la feuille rapport d'expansion ??

dans ce cas quand tu vas avoir une centaine de feuilles d'intervention mémorisées, que va t'il se passer ?

ton code va ramer grave a terme, il n'est pas besoin de sélectionner ou d'activer une cellule pour réaliser une boucle.
Les select et activate sont à proscrire.
de même il n'est pas nécessaire de sélectionner une feuille pour travailler dessus.

une petite remarque : je tai dit de changer les lisbox par des textbox , mais pas la combobox numéro de lot par une textbox!

de plus j'avais déplacé dans mon fichier les boutons de commandes nouvelle feuille de production, imprimer et recherche , car comme tu fait à chaque nouvelle feuille de production tu copie aussi ces boutons, a terme plusieurs centaines de boutons !!!
ce que je t'ai dit au post #7:
J'ai rajouté une ligne en A1 pour éviter d'avoir le collage des boutons à chaque transfert de données


en gardant la combo box tu pourras réaliser une recherche intuitive.( si tu as beaucoup de numéro de lot)
 
Dernière édition:

nounou1902

XLDnaute Nouveau
Oui j'effectue ma recherche sur l'ensemble de la feuille rapport d'expansion.
Je pense que tu as raison mais apres nous changerons de feuille chaque année et je dois faire cela car je vais connecter une feuille excel en lien avec un autre donc je dois proceder comme cela étant donné que mon expérience est limité en codage VBA.
Concernant ta feuille tu as raison je pense que je vais la réutiliser en copiant uniquement le code donc merci encore de me le rappeler.
A titre informatif nous créons environ 10 lot par jour donc je suis partie sur une base de 4000 pour prévoir large.
À toute hasard aurait tu une réponse à ma question pour inclure dans le code l'ajout de selection (par défaut première passe) étant donné que c'est obligé pour commencer et (la possibilité de coché reprise) et donc afficher les informations sur la ligne correspondante au mot reprise dans la colonne I.

Merci encore pour le temps que tu m'accordes
 

Discussions similaires

Réponses
2
Affichages
80
Réponses
21
Affichages
883
  • Question
Microsoft 365 Code VBA
Réponses
2
Affichages
292

Statistiques des forums

Discussions
311 713
Messages
2 081 808
Membres
101 819
dernier inscrit
lukumubarth