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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    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 974
    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 974
    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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    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 974
    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 974
    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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    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 974
    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 974
    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

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