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 :

VBA Formulaire personnalisé


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 2
    Points
    2
    Par défaut VBA Formulaire personnalisé
    Bonjour,

    Je m'adresse à vous en tant que total novice à la matière. J'effectue un petit devoir pour mes études sur Excel. Ainsi je me suis lancé dans le codage d'un formulaire pour mon projet. Mais il s'avère que je n'y comprend pas grand chose malgré les nombreux tuto visionné.

    Ainsi je me tourne vers vous car j'ai plusieurs problèmes.
    Le formulaire concerne l'onglet "Liste d'inscription". Celui-ci ne gère pas du tout comme il le faudrai mon tableau. La modification est biaisé, ma ComboBox2 modifie la colonne A alors que je voudrai qu'elle modifie la I. Je ne peux pas modifier directement ceux qu'il se trouve dans ma ComboBox1. Je voudrais que le bouton Nouveau ajoute une nouvelle inscription avec un maximum de 120 inscriptions. Et que si j'appuis sur nouveau ma nouvelle inscription s'ajoute dans la première ligne totalement vide. Je voudrai également accessoirement avoir des infos sur la façon de faire pour ajouter des TextBox.

    Je vous laisse mon fichier en pièce jointe pour que vous puissiez le consulter. Sinon je peux mettre directement ici mon code.

    Merci d'avance pour votre éclaircissement
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    bonsoir
    Je vous laisse mon fichier en pièce jointe pour que vous puissiez le consulter. Sinon je peux mettre directement ici mon code.
    c'est ce que disent les règles du forum
    ton code et ou se bloque
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Excusez mon ignorance, je vous met ça.

    Donc voici. Pour le bouton nouveau contact qui n'ajoute rien à mon tableau alors que je voudrai qu'il "ajoute une nouvelle inscription avec un maximum de 120 inscriptions. Et que si j'appuis sur nouveau ma nouvelle inscription s'ajoute dans la première ligne totalement vide."

    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
    'Pour le bouton Nouveau contact
    Private Sub CommandButton1_Click()
        Dim L As Integer
        If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
            L = Sheets("Liste d'inscription").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement ? la premi?re ligne de tableau non vide
            Range("A" & L).Value = ComboBox1
            Range("I" & L).Value = ComboBox2
            Range("B" & L).Value = TextBox1
            Range("C" & L).Value = TextBox2
            Range("D" & L).Value = TextBox3
            Range("E" & L).Value = TextBox4
            Range("F" & L).Value = TextBox5
            Range("G" & L).Value = TextBox6
            Range("H" & L).Value = TextBox7
        End If
    End Sub

    Pour le bouton modifier je recherche à ce que "ma ComboBox2 modifie la colonne I alors qu'elle modifie la A." Je sais pas si c'est ce code qu'y y fais quelquechose ou un autre

    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
    'Pour le bouton Modifier
    Private Sub CommandButton2_Click()
        Dim Ligne As Long
        Dim I As Integer
     
        If MsgBox("Confirmez-vous la modification de ce contact ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
            If Me.ComboBox1.ListIndex = -1 Then Exit Sub
            Ligne = Me.ComboBox1.ListIndex + 5
            Ws.Cells(Ligne, "A") = ComboBox2
            For I = 1 To 7
                If Me.Controls("TextBox" & I).Visible = True Then
                    Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
                End If
            Next I
        End If
    End Sub

    Je vous met ici mon code complet ci ça peut aider. Merci et excusez moi de la lourdeur de mon message.

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Option Explicit
    Dim Ws As Worksheet
     
     
    'Pour le formulaire
    Private Sub UserForm_Initialize()
        Dim J As Long
        Dim I As Integer
     
        ComboBox2.ColumnCount = 1 'Pour la liste d?roulante Civilit?
        ComboBox2.List() = Array("", "Oui", "Non")
        Set Ws = Sheets("Liste d'inscription") 'Correspond au nom de votre onglet dans le fichier Excel
        With Me.ComboBox1
            For J = 5 To Ws.Range("A" & Rows.Count).End(xlUp).Row
                .AddItem Ws.Range("A" & J)
            Next J
        End With
        For I = 1 To 7
            Me.Controls("TextBox" & I).Visible = True
        Next I
    End Sub
     
    'Pour la liste d?roulante N°Inscription
    Private Sub ComboBox1_Change()
        Dim Ligne As Long
        Dim I As Integer
     
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        Ligne = Me.ComboBox1.ListIndex + 5
        ComboBox2 = Ws.Cells(Ligne, "I")
        For I = 1 To 7
            Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
        Next I
    End Sub
     
    'Pour le bouton Nouveau contact
    Private Sub CommandButton1_Click()
        Dim L As Integer
        If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
            L = Sheets("Clients").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement ? la premi?re ligne de tableau non vide
            Range("A" & L).Value = ComboBox1
            Range("I" & L).Value = ComboBox2
            Range("B" & L).Value = TextBox1
            Range("C" & L).Value = TextBox2
            Range("D" & L).Value = TextBox3
            Range("E" & L).Value = TextBox4
            Range("F" & L).Value = TextBox5
            Range("G" & L).Value = TextBox6
            Range("H" & L).Value = TextBox7
        End If
    End Sub
    'Pour le bouton Modifier
    Private Sub CommandButton2_Click()
        Dim Ligne As Long
        Dim I As Integer
     
        If MsgBox("Confirmez-vous la modification de ce contact ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
            If Me.ComboBox1.ListIndex = -1 Then Exit Sub
            Ligne = Me.ComboBox1.ListIndex + 5
            Ws.Cells(Ligne, "A") = ComboBox2
            For I = 1 To 7
                If Me.Controls("TextBox" & I).Visible = True Then
                    Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
                End If
            Next I
        End If
    End Sub
     
     
    'Pour le bouton Quitter
    Private Sub CommandButton3_Click()
        Unload Me
    End Sub

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    pas à pas :
    je crois que y a une erreur lors de définition de la dernière ligne non vide
    Définir L comme long et non pas integer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim L As long
        If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
            L = Sheets("Liste d'inscription").Range("A" & Rows.Count).End(xlUp).Row + 1 'Pour placer le nouvel enregistrement ? la premi?re ligne de tableau non vide
            Range("A" & L).Value = ComboBox1
            Range("I" & L).Value = ComboBox2
            Range("B" & L).Value = TextBox1
            Range("C" & L).Value = TextBox2
            Range("D" & L).Value = TextBox3
            Range("E" & L).Value = TextBox4
            Range("F" & L).Value = TextBox5
            Range("G" & L).Value = TextBox6
            Range("H" & L).Value = TextBox7
        End If
    End Sub
    vérifier ça d'abord
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je ne comprend pas ce qu'il convient de modifier. Je n'ai toujours pas compris les "L" qui constitue des variables, pourtant j'ai lu des tutos mais je ne comprend pas son utilité. Le bouton Nouveau Contact fonctionne, mais il insère les nouvelles donnée à la fin du tableau et non pas à la première cellule vide.. Que dois-je faire ?

    J'ai effectivement changé "Interger" en "Long". Mais rien ne change, le bouton nouveau contact ajoute toujours une ligne à la fin, même si des lignes sont totalement vide avant.

    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
    Private Sub CommandButton1_Click()
        Dim L As Long
        If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
            L = Sheets("Liste d'inscription").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement ? la premi?re ligne de tableau non vide
            Range("A" & L).Value = ComboBox1
            Range("I" & L).Value = ComboBox2
            Range("B" & L).Value = TextBox1
            Range("C" & L).Value = TextBox2
            Range("D" & L).Value = TextBox3
            Range("E" & L).Value = TextBox4
            Range("F" & L).Value = TextBox5
            Range("G" & L).Value = TextBox6
            Range("H" & L).Value = TextBox7
        End If
    End Sub

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    Bonjour
    l'enregistrement d'un nouveau client se fait à la première ligne vide dans ton tableau
    Pour éviter le risque il est conseillé d'ajouter
    with sheets("Clients")
    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
    Private Sub CommandButton1_Click()
        Dim L As Integer
        With Sheets("Clients")
        If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
            L = .Range("A" & Rows.Count).End(xlUp).Row + 1 'Pour placer le nouvel enregistrement ? la premi?re ligne de tableau non vide
     
            .Range("A" & L).Value = ComboBox1
            .Range("I" & L).Value = ComboBox2
            .Range("B" & L).Value = TextBox1
            .Range("C" & L).Value = TextBox2
            .Range("D" & L).Value = TextBox3
            .Range("E" & L).Value = TextBox4
            .Range("F" & L).Value = TextBox5
            .Range("G" & L).Value = TextBox6
            .Range("H" & L).Value = TextBox7
        End If
        End With
        End Sub
    Bonjour
    Pour l'initialisation de ton userform tu n'as besoin que du numéro du nouvelle d'enregistrement qui est égal à la dernier numéro +1 et les autres combo et textbox sont vides
    si c'est le cas tu peut modifier l'initialisation comme suit
    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
    Private Sub UserForm_Initialize()
        Dim J As Long
        Dim I As Integer
     
        ComboBox2.ColumnCount = 1 'Pour la liste d?roulante Civilit?
        ComboBox2.List() = Array("", "Oui", "Non")
        Set Ws = Sheets("Clients") 'Correspond au nom de votre onglet dans le fichier Excel
        With Me.ComboBox1
           J = Ws.Range("A" & Rows.Count).End(xlUp).Row
                .Value = J - 3      
        End With
        For I = 1 To 7
            Me.Controls("TextBox" & I).Visible = True
        Next I
    End Sub
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour.

    Merci beaucoup pour votre aide.

    J'ai modifier les code en question, cependant ça ne fonctionne pas.

    Le code pour initialisation de mon userform n'arrange rien, au contraire cela ma juste enlever l'utilité de ma combobox1, il n'y a plus de liste déroulante, du coup le bouton ajouter contact ne sert plus qu'à rajouter une ligne.

    (Le code en question)
    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
    Private Sub UserForm_Initialize()
        Dim J As Long
        Dim I As Integer
     
        ComboBox2.ColumnCount = 1 'Pour la liste d?roulante Civilit?
        ComboBox2.List() = Array("", "Oui", "Non")
        Set Ws = Sheets("Clients") 'Correspond au nom de votre onglet dans le fichier Excel
        With Me.ComboBox1
           J = Ws.Range("A" & Rows.Count).End(xlUp).Row
                .Value = J - 3      
        End With
        For I = 1 To 7
            Me.Controls("TextBox" & I).Visible = True
        Next I
    End Sub
    Mon objectif étant que je puisse entrer de nouveau contact dans la première ligne vide de mon tableau, or pour le moment elle rajoute seulement une ligne en bas de mon tableau.

    J'ai également effectué les autres modifications recommandé, çeux-la ne modifie rien.

    Si je peux appuyer mon propos avec des captures d'écran je peux le faire, il faudrait juste que je sache quelle screen serai pertinent pour vous aiguiller.

    Merci à vous

  8. #8
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    Bonjour
    un début de poste malgré que les pièces jointes sont déconseillées
    Fichiers attachés Fichiers attachés
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour BENNASR,

    Merci pour ta contribution vraiment, j’apprécie. Le formulaire fonctionne effectivement très bien.
    Cependant je ne trouve toujours pas de code me permettant d'ajouter un nouveau contact à la première ligne vide. Par Exemple quand je supprime l'intégralité de la ligne 2 du tableau que j'active mon formulaire, que je rentre des données et que j'appuie sur le bouton "Nouveau", mon nouveau contact ce rajoute directement à la dernière ligne du tableau (soit à la ligne 125), et ceux alors que ma deuxième ligne est vide. Cela pose problème dans le sens ou les données dans le tableau ont pour objectif d'être provisoire (elles sont vouées à être supprimées), et dans ce cas cela me formerai un tableau avec des "troues".

    Voila tout pour moi.

    Si tu à une solution j'en t'en serai vraiment reconnaissant.

    Merci encore

  10. #10
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    bonjour
    A mon avis il est recommandé que tout ajout de nouveau client se fera à la dernière ligne
    Quand tu cherche à supprimer un client tu supprime toutes la ligne correspondante et non pas effacer la ligne comme ça tu n'aura pas un tableau avec des lignes vides
    donc commence par nettoyer ton tableau et BONNE CONTINUATION
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

Discussions similaires

  1. [Outlook 2003] Parcourir un formulaire personnalisé en VBA
    Par Rikikix dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 02/10/2008, 14h42
  2. [VB.net 2005] Formulaire personnalisé
    Par PoZZyX dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/05/2006, 16h57
  3. Réponses: 2
    Dernier message: 17/03/2006, 18h15
  4. Réponses: 3
    Dernier message: 13/06/2005, 14h07
  5. Réponses: 2
    Dernier message: 04/02/2005, 11h03

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