IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Userform qui ne se ferme pas et autres.


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Laboratoire
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Laboratoire

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Par défaut Userform qui ne se ferme pas et autres.
    Bonjour à toutes et à tous,
    Je ne suis pas du tout expert dans le domaine, mais j'ai tendance à bidouiller un petit peu les exemples de codes dont je m'inspire pour que ça fonctionne dans mon cas.
    On va donc dire que je suis débrouillard mais sans le côté expert de la chose (et loin de là)
    En gros, j'ai deux tableaux sur deux onglets excel différents.
    Sur le premier j'ai mon tableau avec un système de recherche de produit qui dépends d'une liste du deuxième onglet.

    Dont voici le code : (désolé je ne sais pas comment faire le cadre pour le code.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Dim Choix1()
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Not Intersect([c6:c250], Target) Is Nothing And Target.Count = 1 Then
        Set f = Sheets("bd")
        Set rng = f.Range("A2:A" & f.[A65000].End(xlUp).Row)
        Choix1 = Application.Transpose(rng)
        Me.ComboBox1.List = Choix1
        Me.ComboBox1.Height = Target.Height + 3
        Me.ComboBox1.Width = Target.Width
        Me.ComboBox1.Top = Target.Top
        Me.ComboBox1.Left = Target.Left
        Me.ComboBox1 = Target
        Me.ComboBox1.Visible = True
        Me.ComboBox1.Activate
      Else
        Me.ComboBox1.Visible = False
      End If
    End Sub
    Private Sub ComboBox1_Change()
     If Me.ComboBox1 <> "" Then
         mots = Split(Trim(Me.ComboBox1), " ")
         Tbl = Choix1
         For i = LBound(mots) To UBound(mots)
           Tbl = Filter(Tbl, mots(i), True, vbTextCompare)
         Next i
         Me.ComboBox1.List = Tbl
         Me.ComboBox1.DropDown
     End If
    End Sub
    Private Sub ComboBox1_click()
       ActiveCell.Value = Me.ComboBox1
    End Sub
     
    Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
      Me.ComboBox1.List = Choix1
      Me.ComboBox1.Activate
      Me.ComboBox1.DropDown
    End Sub
    Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      If KeyCode = 13 Then ActiveCell.Offset(1).Select
     
    End Sub

    Cette partie fonctionne et fait ce que je lui demande donc sur ce point c'est nickel (enfin je crois)

    Ensuite j'ai voulu faire un userform pour pouvoir rajouter des lignes à cette liste si celle ci ne contenait pas l'article désiré.
    En gros dans ma userform j'ai 3 textbox avec champs a renseigner (NOM/Fournisseur/Référence)
    Bouton OK, Bouton Annuler.
    En théorie mon bouton OK doit incrémenter ma liste en passant automatiquement à la ligne suivante (afin de ne pas écraser des données existantes)
    Et mon bouton annuler doit vider les cases des 3 TextBox et fermer l'user form.
    Sauf que ca ne se passe pas comme prévu. En fait rien ne se passe et je ne comprends pas pourquoi...

    Voici le code de l'Userform que je veux utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Dim rng As Range
     
    Private Sub CommandButton1_Click()
        UserForm1.Show
    End Sub
     
    Private Sub UserForm_Initialize()
     InitRange
    End Sub
     
    Private Sub cmd2_Click()
     Unload UserForm1
     End
    End Sub
    ' ====
    Private Sub cmd1_Click()
     WriteRecord
     InitTextBox
    End Sub
     
    Private Sub WriteRecord()
     With rng
     .Cells(.Rows.Count + 1, 1) = Me.TextNom
     .Cells(.Rows.Count + 1, 7) = Me.TextFournisseur
     .Cells(.Rows.Count + 1, 2) = Me.TextRef
     End With
     InitRange ' Recalcul la plage
    End Sub
     
    Private Sub InitRange()
     Set rng = ThisWorkbook.Worksheets("BD").Range("A1").CurrentRegion
    End Sub
     
    Private Sub InitTextBox()
     With Me: .TextNom = "": .TextFournisseur = "": .TextRef = "": .TextNom.SetFocus: End With
    End Sub
    J'espère que ma demande n'est pas trop farfelue et qu'une bonne âme pourra m'expliquer ou la bas blesse.

    Merci d'avance!

    Matt

    Edit : Merci pour la modification.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Par défaut
    Bonjour,

    Normalement si tu rajoutes le morceau de code là dessous à ton bouton annuler ça passe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    userform1.hide
    Bonne journée,

  3. #3
    Membre à l'essai
    Homme Profil pro
    Laboratoire
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Laboratoire

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Par défaut
    Bonjour,
    Merci de ton aide, j'ai essayé de rajouter cette partie de code dans le cmd annuler mais non l'userform ne se ferme pas. et d'ailleurs si je remplis les 3 textbox et que je veux valider, ca ne fonctionne pas non plus...
    Est ce que le fait de déclarer rng comme Range dans mes deux onglets différents peut me poser problème ?

    J'avoue que je séche un peu, pourtant j'ai déjà fait des userform et je n'avais pas ce soucis. En gros j'ai fait mon bouton, il m'ouvre bien mon userform mais tout ce qui s'y passe ensuite n'est pas pris en compte.
    J'ai tenté de renommer mes boutons (va savoir des fois) et donc j'ai changé le code. Mais je dois avoir une coquille dedans.
    Je peux éventuellement partager mon fichier mais j'ai lu que certains ne préférait pas les ouvrir. Donc je sais pas trop quoi faire pour l'instant.

    En tout cas merci de ta première intervention.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Par défaut
    Je t'avouerai que je ne vois pas non plus mais je peux te montrer un formulaire que j'ai créé qui marche correctement (Ajout ou suppression ou modification de ligne).

    Intégration des données dans le classeur :
    Ci-dessous tu as ma manière d'intégrer les données. Je viens pointer la cellule où je veux que ces données soient inscrites.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Valider_Click()
     
    Dim Ligne As Integer
    Ligne = Range("A3:A" & Rows.Count).End(xlDown).Row
     
    Sheets("Renseignement").Cells(Ligne + 1, 1) = UserForm1.ListBoxFrn.Value
    Sheets("Renseignement").Cells(Ligne + 1, 5) = UserForm1.TextBoxMLineaire.Value
    Sheets("Renseignement").Cells(Ligne + 1, 6) = UserForm1.TextBoxPoids.Value
    Sheets("Renseignement").Cells(Ligne + 1, 7) = UserForm1.TextBoxJLivr.Value
     
    UserForm1.Hide
     
    End Sub
    Ajout d'une ligne :
    Ici je viens compter le nombre de ligne dans ma liste pour pouvoir intégrer les données à la fin.
    C'est vraiment tout simple et pas forcément optimisé mais ça fonctionne.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Sub AjoutFournisseur()
     
    Dim Ligne As Integer
    Ligne = Sheets("Renseignement").Range("M3:M" & Rows.Count).End(xlDown).Row
     
    Dim NomFournisseur As String
    NomFournisseur = InputBox("Quel est le nom du fournisseur à ajouter ?")
     
    Cells(Ligne + 1, 13) = NomFournisseur
     
    Dim ContactFournisseur As String
    ContactFournisseur = InputBox("Quel est votre contact chez le fournisseur ?")
     
    Cells(Ligne + 1, 14) = ContactFournisseur
     
    Dim AdresseFournisseur
    AdresseFournisseur = InputBox("Quel est l'adresse du fournisseur ?")
     
    Cells(Ligne + 1, 15) = AdresseFournisseur
     
    Dim PaysFournisseur As String
    PaysFournisseur = InputBox("Dans quel pays se trouve le fournisseur ?")
     
    Cells(Ligne + 1, 16) = PaysFournisseur
     
    Dim TDL As String
    TDL = InputBox("Dans quelle TDL se trouve le fournisseur ?")
     
    Cells(Ligne + 1, 17) = TDL
     
    End Sub
    Modification d'une ligne :
    Ici je viens modifier une ligne de donnée déja présente dans la liste. Donc pour ça je viens chercher les données correspondantes que je fais apparaître dans un UserForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub ModifFournisseur()
     
    Dim Ligne As Integer
    Ligne = Sheets("Renseignement").Range("M3:M" & Rows.Count).End(xlDown).Row
     
    Dim Frn As String
    Frn = InputBox("Quel est le nom du fournisseur ?")
     
    For Ligne = 3 To Ligne
     
    If Frn = Cells(Ligne, 13) Then
        InfoFrn.NomFrn = Cells(Ligne, 13)
        InfoFrn.ContactFrn = Cells(Ligne, 14)
        InfoFrn.AdresseFrn = Cells(Ligne, 15)
        InfoFrn.PaysFrn = Cells(Ligne, 16)
        InfoFrn.TDLFrn = Cells(Ligne, 17)
        InfoFrn.NumFrn = Ligne
     
    End If
     
    Next
     
    InfoFrn.Show
     
    End Sub
    Suppression d'une ligne :
    Et enfin, je viens écraser une ligne en la supprimant complètement pour éviter les blancs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub SupprFournisseur()
     
    Dim Ligne As Integer
    Ligne = Sheets("Renseignement").Range("M3:M" & Rows.Count).End(xlDown).Row
     
    Dim SupFrn As String
    SupFrn = InputBox("Quel est le nom du fournisseur à supprimer ?")
     
    For Ligne = 3 To Ligne
     
        If SupFrn = Cells(Ligne, 13) Then
            Range(Cells(Ligne, 13), Cells(Ligne, 17)).Delete
            Exit Sub
        End If
     
    Next
     
    End Sub
    En ce qui concerne la partie Unload :
    Personnellement je reprend chaque textbox auquel j'attribue la valeur "" (ça c'est bon si tu n'en as pas énormément).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        UserForm1.TextBoxMLineaire.Value = ""
        UserForm1.TextBoxPoids.Value = ""
        UserForm1.TextBoxJLivr.Value = ""
    Il y a certainement d'autres méthodes plus simple que ce que j'ai fait mais ça marche.
    En espérant que cela puisse t'aider.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Laboratoire
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Laboratoire

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Par défaut
    Merci pour ton aide. Je regarde ça demain et je tiendrai informé

  6. #6
    Membre à l'essai
    Homme Profil pro
    Laboratoire
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Laboratoire

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Par défaut
    Bonjour Trystan,
    J'ai essayé ton code mais il ne fonctionne pas chez moi.
    J'ai une erreur de capacité quand je veux le lancer.

    Aurais tu un fichier sur lequel je pourrai le tester afin de voir le fonctionnement ? J'ai réussi a ce que la premiere inputbox s'ouvre mais quand je rentre un nom de fournisseur (test) ca me met une erreur de compilation ou de capacité...

    Je te remercie d'avance,.

    Matt

  7. #7
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Par défaut
    Bonjour,

    Je te fais parvenir mon fichier en fin d'après midi pour que tu puisse tester
    Désolé je n'ai pas la possibilité de te l'envoyer avant

    Bonne journée à toi,

  8. #8
    Membre à l'essai
    Homme Profil pro
    Laboratoire
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Laboratoire

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Par défaut
    Je viens juste te dire que je suis un boulet... mon premier code fonctionnait ... mais il fallais simplement l'affecter à l'userform et pas sur l'onglet de données...
    Enfin mon premier code me permettait simplement d'ajouter des données, donc je vais attendre ton fichier pour confirmer le tout.
    Et ensuite je mettrai en résolu ce sujet.
    Merci

  9. #9
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Par défaut
    Bonjour,

    Avec un peu de retard, tu trouveras joint à ce message le fichier dont je te parlais avec le formulaire.

    Tu trouveras deux formulaires :
    - Userform1 : Utiliser pour ajouter des données
    - InfoFrn : Utiliser pour modifier des données déjà présentes

    J'ai modifié toutes les données du fichier donc ne soit pas surpris parce qu'elles n'ont aucun sens.

    Si tu as des questions n'hésites pas,

    Bonne journée à toi,
    Fichiers attachés Fichiers attachés

  10. #10
    Membre à l'essai
    Homme Profil pro
    Laboratoire
    Inscrit en
    Novembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Laboratoire

    Informations forums :
    Inscription : Novembre 2018
    Messages : 6
    Par défaut
    Bonjour,
    Je te remercie, je vais partager ce que j'ai réussi à faire des fois que ca intéresse d'autres personnes.
    Je vais aussi regarder de ce pas ton fichier ainsi que son code.

    Merci encore.

Discussions similaires

  1. Connexion qui ne se ferme pas
    Par ch0upette dans le forum JDBC
    Réponses: 3
    Dernier message: 03/09/2007, 17h28
  2. TransferSpreadsheet et Excel qui ne se ferme pas
    Par it-worker dans le forum VBA Access
    Réponses: 6
    Dernier message: 30/07/2007, 16h58
  3. Formulaire qui ne se ferme pas.
    Par Smint dans le forum Access
    Réponses: 7
    Dernier message: 02/06/2006, 11h34
  4. [VB6]Process qui ne se ferme pas
    Par marsup54 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 19/04/2006, 14h57
  5. [FORMS] Form qui ne se ferme pas
    Par MxPx_23 dans le forum Oracle
    Réponses: 4
    Dernier message: 08/12/2005, 08h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo