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 :

Modifier une base de données dans un formulaire


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Rédacteur ISO
    Inscrit en
    Septembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Rédacteur ISO
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2014
    Messages : 20
    Points : 11
    Points
    11
    Par défaut Modifier une base de données dans un formulaire
    Bonjour,
    C'est ma première sur ce forum et j'espère ne pas faire d'erreur en créant cette demande.
    Je viens de créer un formulaire pour une base de données rassemblant des commerces et je rencontre deux petits problèmes.
    Lorsque je fait une recherche dans la comboBox et que le nom du commerce n'existe pas dans la BD j'ai une erreur d'exécution "91".
    Le deuxième problème est que je ne peux pas modifier la base de donnée en passant par le formulaire.
    Je précise que s'est mon premier formulaire donc les erreurs doivent être grossières milles excuses
    Je vous copie 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
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Option Explicit
    Dim Ws As Worksheet
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim h As Integer
    End Sub
    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("Commerce").Range("a65536").End(xlUp).Row + 1
    Range("a" & L).Value = TextBox1
    Range("b" & L).Value = TextBox2
    Range("c" & L).Value = TextBox3
    Range("d" & L).Value = TextBox4
    Range("e" & L).Value = TextBox5
    Range("f" & L).Value = TextBox8
    Range("g" & L).Value = TextBox6
    Range("h" & L).Value = TextBox7
    Range("i" & L).Value = TextBox9
    Range("j" & L).Value = TextBox10
    Range("k" & L).Value = TextBox11
    Range("l" & L).Value = TextBox12
    Range("m" & L).Value = TextBox13
    Range("n" & L).Value = TextBox14
    Range("o" & L).Value = TextBox15
    Range("p" & L).Value = TextBox16
    Range("q" & L).Value = TextBox17
    Range("r" & L).Value = TextBox18
    Range("s" & L).Value = TextBox19
    Range("t" & L).Value = TextBox20
    Range("u" & L).Value = TextBox21
    Range("v" & L).Value = TextBox22
    Range("w" & L).Value = TextBox23
    Range("x" & L).Value = TextBox24
    Range("y" & L).Value = TextBox25
    Range("z" & L).Value = TextBox26
    Range("aa" & L).Value = TextBox27
    Range("ab" & L).Value = TextBox28
    Range("ac" & L).Value = TextBox29
    Range("ad" & L).Value = TextBox30
    End If
    End Sub
    Private Sub CommandButton4_change()
    If MsgBox("Etes-vous certain de vouloir modifier ce produit ?", vbYesNo, "Demande de confirmation") = vbYes Then
    Dim Ligne As Long
    Dim I As Integer
      If Me.ComboBox1.ListIndex = -1 Then Exit Sub
      Ligne = Me.ComboBox1.ListIndex + 2
      For I = 1 To 30
        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
    Private Sub CommandButton3_Click()
    Unload Me
    End Sub
    Private Sub ComboBox1_Change()
    Dim Lign As Long
    If ComboBox1 = "" Then Exit Sub
    With Sheets("commerce")
    Lign = .Columns(1).Cells.Find(ComboBox1).Row
    TextBox1.Text = Cells(Lign, 1).Value
    TextBox2.Text = Cells(Lign, 2).Value
    TextBox3.Text = Cells(Lign, 3).Value
    TextBox4.Text = Cells(Lign, 4).Value
    TextBox5.Text = Cells(Lign, 5).Value
    TextBox6.Text = Cells(Lign, 8).Value
    TextBox7.Text = Cells(Lign, 6).Value
    TextBox8.Text = Cells(Lign, 7).Value
    TextBox9.Text = Cells(Lign, 9).Value
    TextBox10.Text = Cells(Lign, 10).Value
    TextBox11.Text = Cells(Lign, 11).Value
    TextBox12.Text = Cells(Lign, 12).Value
    TextBox13.Text = Cells(Lign, 13).Value
    TextBox14.Text = Cells(Lign, 14).Value
    TextBox15.Text = Cells(Lign, 15).Value
    TextBox16.Text = Cells(Lign, 16).Value
    TextBox17.Text = Cells(Lign, 17).Value
    TextBox18.Text = Cells(Lign, 18).Value
    TextBox19.Text = Cells(Lign, 19).Value
    TextBox20.Text = Cells(Lign, 20).Value
    TextBox21.Text = Cells(Lign, 21).Value
    TextBox22.Text = Cells(Lign, 22).Value
    TextBox23.Text = Cells(Lign, 23).Value
    TextBox24.Text = Cells(Lign, 24).Value
    TextBox25.Text = Cells(Lign, 25).Value
    TextBox26.Text = Cells(Lign, 26).Value
    TextBox27.Text = Cells(Lign, 27).Value
    TextBox28.Text = Cells(Lign, 28).Value
    TextBox29.Text = Cells(Lign, 29).Value
    TextBox30.Text = Cells(Lign, 30).Value
    End With
    End Sub
    La commande modifier correspond au commandButton 4.
    Merci d'avance pour votre aide

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Tout d'abord, quand tu poste un code, poste-le entre les balises , pour ça, utilise le bouton dièse (#).
    Ensuite, ceci ne sert à rien donc, à virer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim h As Integer
    End Sub
    ça n'engage que moi mais je suis adepte d'un code aéré et incrémenté de cette façon, je le trouve plus lisible et, dans la mesure du possible, écrire le moins possible de lignes de code alors, quand les boucles le permettent, les utiliser ça aère et rend plus lisible.
    Ton code je ne l'ai pas testé du tout mais là, tu peux plus facilement nous dire où ça coince :
    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
    74
    75
    76
    77
    78
     
    Private Sub CommandButton1_Click()
     
        Dim L As Integer
        Dim I As Integer
     
        If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
     
            With Sheets("Commerce")
     
                L = .Cells(Rows.Count, 1).End(xlUp).Row + 1
     
                For I = 1 To 30
     
                    Cells(L, I).Value = Me.Controls("TextBox" & I).Text
     
                Next I
     
            End With
     
        End If
     
    End Sub
     
    Private Sub CommandButton4_change()
     
        Dim Ws As Worksheet
        Dim Ligne As Long
        Dim I As Integer
     
        Set Ws = Worksheets("Commerce") '<-- je suppose que c'est cette feuille !!!
     
        If MsgBox("Etes-vous certain de vouloir modifier ce produit ?", vbYesNo, "Demande de confirmation") = vbYes Then
     
            If Me.ComboBox1.ListIndex = -1 Then Exit Sub
     
            Ligne = Me.ComboBox1.ListIndex + 2
     
            For I = 1 To 30
     
                If Me.Controls("TextBox" & I).Visible = True Then
     
                    Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I).Text
     
                End If
     
            Next I
     
        End If
     
    End Sub
     
    Private Sub CommandButton3_Click()
     
        Unload Me
     
    End Sub
     
    Private Sub ComboBox1_Change()
     
        Dim Lign As Long
        Dim I As Integer
     
        If ComboBox1 = "" Then Exit Sub
     
        With Sheets("commerce")
     
            Lign = .Columns(1).Cells.Find(ComboBox1).Row
     
            For I = 1 To 30
     
            Me.Controls("TextBox" & I).Text = .Cells(Lign, I).Value
     
            Next I
     
        End With
     
    End Sub
    Dans ce 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
     
    Private Sub CommandButton4_change()
    If MsgBox("Etes-vous certain de vouloir modifier ce produit ?", vbYesNo, "Demande de confirmation") = vbYes Then
    Dim Ligne As Long
    Dim I As Integer
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    For I = 1 To 30
    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
    tu utilise une variable "Ws" que tu n'as pas initialisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       Dim Ws As Worksheet
       '...
     
       Set Ws = Worksheets("Commerce") '<-- je suppose que c'est cette feuille !!!
    En attente des autres explications, bonne soirée !

    Hervé.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Rédacteur ISO
    Inscrit en
    Septembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Rédacteur ISO
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2014
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Merci pour ta réponse
    Il est vrai que ton codage est beaucoup plus clair.
    Pour mon problème du CommandButton4 j'ai initialisé la fonction "Ws" mais le problème reste le même.
    Ce que je souhaite :
    C'est quand je nomme un commerce dans ma ComboBox les données de ma BD s'affichent dans les différents TextBox jusqu'à là pas de de souci.
    si je modifie un des textBox (ex un nouveau n° de téléphone) j'aimerai qu'en cliquant sur modifier (CommandButton4) la modification se fasse dans la BD.
    Actuellement je n'ai même pas la fenêtre "voulez-vous modifier" qui s'affiche.
    Merci de ton aide
    Bonne journée

  4. #4
    Membre à l'essai
    Homme Profil pro
    Rédacteur ISO
    Inscrit en
    Septembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Rédacteur ISO
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2014
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Je viens de refaire le codage du CommanButton4
    J'ai enfin la fenêtre "Voulez-vous modifier" qui apparaît.
    (heu.. j'ai utilisé la balise # mais....)
    [
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton4_click()
        Dim L As Long
        Dim I As Integer
        If MsgBox("Etes-vous certain de vouloir modifier ce contact ?", vbYesNo, "Demande de confirmation") = vbYes Then
         With Sheets("Commerce")
           L = .Cells(Rows.Count, 1).End(x1Up).Row + 1
            For I = 1 To 30
                    Cells(L, I).Value = Me.Controls("TextBox" & I).Text
                Next I
                End With
        End If
    End Sub
    ]
    Mais ça beug encore. Il me semble que je me trompe avec la valeur .cells

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Quand tu utilise With - End With, il faut que les méthodes et propriétés soient précédées d'un point afin d'indiquer au compilateur qu'elles appartiennent à l'objet. Si tu veux que la cellule de la ligne L et de la colonne I ".Cells(L, I).Value" soit bien celle de la feuille "Commerce", il faut qu'elle soit précédée d'un point comme si tu écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sheets("Commerce").Cells(L, I).Value = Me.Controls("TextBox" & I).Text
    Je n'ai pas testé mais juste fais cette petite correction :
    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
     
    Private Sub CommandButton4_click()
     
    Dim L As Long
    Dim I As Integer
     
        If MsgBox("Etes-vous certain de vouloir modifier ce contact ?", vbYesNo, "Demande de confirmation") = vbYes Then
     
            With Sheets("Commerce")
     
                L = .Cells(.Rows.Count, 1).End(x1Up).Row + 1
     
                For I = 1 To 30
     
                    .Cells(L, I).Value = Me.Controls("TextBox" & I).Text
     
                Next I
     
            End With
     
        End If
     
    End Sub
    Hervé.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Rédacteur ISO
    Inscrit en
    Septembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Rédacteur ISO
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2014
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    je viens de faire la modification.
    Le souci qui se pose est sur la ligne 11 et 15 (sur le codage que tu a fais dans ta réponse). je suis sûr de faire une erreur avec (Cells).
    Le message qui s'affiche stipule Erreur d'exécution "1004". Erreur définie par l'application ou par l'objet.
    Bonne journée

  7. #7
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Il y a une erreur sur la constante "xlUp", tu as entrée le chiffre 1 au lieu de la lettre l (L) "x1Up". Je viens de tester et tout fonctionne une fois la modif faite.

    Hervé.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Rédacteur ISO
    Inscrit en
    Septembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Rédacteur ISO
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2014
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Je viens de faire la modif et ça marche.
    Merci beaucoup pour ton aide.
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] rechercher dans une base de donnée depuis un formulaire
    Par infoworld2013 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 25/08/2013, 03h45
  2. [MySQL] Insertion dans une base de données depuis un formulaire
    Par asvin dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 27/10/2008, 19h51
  3. Réponses: 4
    Dernier message: 23/04/2007, 12h01
  4. Réponses: 7
    Dernier message: 05/01/2005, 13h43
  5. Réponses: 4
    Dernier message: 29/11/2004, 16h51

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