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 :

Mise à jour des données par formulaire vba Excel [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Artisan
    Inscrit en
    Février 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Artisan
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2012
    Messages : 32
    Par défaut Mise à jour des données par formulaire vba Excel
    Amis du forum Bonjour
    Je suis à nouveau dans une impasse, comme tous les débutants, et je manque franchement d'inspiration.
    J'ai vraiment besoin d'un lanterne pour ce qui suit :

    Je dispose d'une feuil (DB_CLIENTS) qui est alimentée par un formulaire de création nouveau client (FrmClient). Cette première partie fonctionne plutôt bien.

    J'ai depuis créé un autre formulaire (ModifClient)sur la même base pour modifier ou supprimer les comptes clients existant
    J'alimente ce même formulaire en données par un combobox (CboxIdClient)
    Le formulaire affiche correctement les infos dans les zones correspondantes.

    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
    Private Sub CboxIdClient_Change()
        Dim Rg As Range
        Dim Sh As Worksheet
     
        Set Sh = Worksheets("BD_CLIENTS")
     
        'Recherche l'ID
        Set Rg = Sh.Range("A:A").Find(what:=CboxIdClient.Value, lookat:=xlWhole)
        'Si ID trouvé on alimente les zones du formulaire en données
        If Not Rg Is Nothing Then
            Me.CboxFormesJuridiques.Value = Rg.Offset(0, 1).Value
            Me.ZtxtRaisonSociale.Text = Rg.Offset(0, 2).Value
            Me.CboxCivilite.Value = Rg.Offset(0, 3).Value
            Me.ZtxtNom.Text = Rg.Offset(0, 4).Value
            Me.ZtxtPrenom.Text = Rg.Offset(0, 5).Value
            Me.ZtxtAdresseL1.Text = Rg.Offset(0, 6).Value
            Me.ZtxtAdresseL2.Text = Rg.Offset(0, 7).Value
            Me.ZtxtCodePostal.Text = Rg.Offset(0, 8).Value
            Me.CboxVille.Value = Rg.Offset(0, 9).Value
            Me.ZtxtEmail.Text = Rg.Offset(0, 10).Value
            Me.ZtxtTelephonePrincipal.Text = Rg.Offset(0, 11).Value
            Me.ZtxtTelephoneSecondaire.Text = Rg.Offset(0, 12).Value
        End If
    End Sub
    Je souhaite maintenant mettre à jours ces nouvelles données dans la feuil(DB_CLIENT) et c'est là que je sèche. Je n'arrive pas à déclarer la ligne de référence pour la valeur de la variable que j'ai nommé (NumLign)
    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
    Private Sub CmdModifier_Click()
        Dim NumLign As Chart
     
        NumLign = ???????????????  
     
        With Sheets("BD_CLIENTS")
            Range("B" & Val(NumLign)).Value = CboxFormesJuridiques.Value
            Range("C" & Val(NumLign)).Value = ZtxtRaisonSociale.Value
            Range("D" & Val(NumLign)).Value = CboxCivilite.Value
            Range("E" & Val(NumLign)).Value = ZtxtNom.Value
            Range("F" & Val(NumLign)).Value = ZtxtPrenom.Value
            Range("G" & Val(NumLign)).Value = ZtxtAdresseL1.Value
            Range("H" & Val(NumLign)).Value = ZtxtAdresseL2.Value
            Range("I" & Val(NumLign)).Value = ZtxtCodePostal.Value
            Range("J" & Val(NumLign)).Value = CboxVille.Value
            Range("K" & Val(NumLign)).Value = ZtxtEmail.Value
            Range("L" & Val(NumLign)).Value = ZtxtTelephonePrincipal.Value
            Range("M" & Val(NumLign)).Value = ZtxtTelephoneSecondaire.Value
            Range("N" & Val(NumLign)).Value = ZtxtDate.Value
     
        End With
     
        Unload FrmClient
     
        Call ThisWorkbook.TriGamma
        Call ThisWorkbook.AutoSize
     
        Worksheets("Formulaires").Activate
     
        Message = "Les données du client ont bien été Modifiées !"
        Style = vbOKOnly
        Titre = "Opération validée !"
        MsgBox Message, Style, Titre
     
        FrmClient.Show
     
    End Sub
    Peut-être ne suis-je pas sur la bonne voie. Quelqu'un peut m'aider ?
    Merci.

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Utilise la méthode Find (comme fait dans le premier code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Rg As Range
    Dim NumLign As Long
     
    With Sheets("BD_CLIENTS")
        Set Rg = .Range("A:A").Find(what:=CboxIdClient.Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not Rg Is Nothing Then
            NumLign = Rg.Row
            Set Rg = Nothing
            .Range("B" & NumLign).Value = CboxFormesJuridiques.Value
            .Range("C" & NumLign).Value = ZtxtRaisonSociale.Value
            '...
        End If
    End With
    EDIT

    XlValues à la place de XlValue (désolé pour l'oubli)

  3. #3
    Membre averti
    Homme Profil pro
    Artisan
    Inscrit en
    Février 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Artisan
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2012
    Messages : 32
    Par défaut re Utilise la méthode Find
    Merci mercatog pour cette proposition, j'ai testé et j'ai toutefois un message d'erreur comme celui-ci :

    erreur d'exécution '9'

    L'indice n'appartient pas à la sélection....

    Ce message est rapporté de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rg = .Range("A:A").Find(what:=CboxIdClient.Value, LookIn:=xlValue, lookat:=xlWhole)
    J'ai peut être été maladroit en reportant ta proposition 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
    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
    Private Sub CmdModifier_Click()
        Dim Rg As Range
        Dim NumLign As Long
     
        With Sheets("BD_CLIENTS")
            Set Rg = .Range("A:A").Find(what:=CboxIdClient.Value, LookIn:=xlValue, lookat:=xlWhole)
            If Not Rg Is Nothing Then
                NumLign = Rg.Row
                Set Rg = Nothing
                .Range("B" & NumLign).Value = CboxFormesJuridiques.Value
                .Range("C" & NumLign).Value = ZtxtRaisonSociale.Value
                .Range("D" & NumLign).Value = CboxCivilite.Value
                .Range("E" & NumLign).Value = ZtxtNom.Value
                .Range("F" & NumLign).Value = ZtxtPrenom.Value
                .Range("G" & NumLign).Value = ZtxtAdresseL1.Value
                .Range("H" & NumLign).Value = ZtxtAdresseL2.Value
                .Range("I" & NumLign).Value = ZtxtCodePostal.Value
                .Range("J" & NumLign).Value = CboxVille.Value
                .Range("K" & NumLign).Value = ZtxtEmail.Value
                .Range("L" & NumLign).Value = ZtxtTelephonePrincipal.Value
                .Range("M" & NumLign).Value = ZtxtTelephoneSecondaire.Value
                .Range("N" & NumLign).Value = ZtxtDate.Value
            End If
        End With
     
        Unload ModifClient
     
        Call ThisWorkbook.TriGamma
        Call ThisWorkbook.AutoSize
     
        Worksheets("Formulaires").Activate
     
        Message = "Les données du client ont bien été Modifiées !"
        Style = vbOKOnly
        Titre = "Opération validée !"
        MsgBox Message, Style, Titre
     
        ModifClient.Show
     
    End Sub

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Désolé, une coquille dans le paramètre de Find (je vais éditer le code)

  5. #5
    Membre averti
    Homme Profil pro
    Artisan
    Inscrit en
    Février 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Artisan
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2012
    Messages : 32
    Par défaut
    Merci du coup de pouce, je n'y serais jamais arrivé seul, avec mes petites connaissances.
    Je ne voudrais pas trop abuser mais pour la commande supprimer une ligne, je suis dans la même galère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CmdSupprimer_Click()
     
    End Sub
    une idée ?

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Il faudrait étudier le code et si tu l'avais fais, tu aurais trouvé.
    Sur le même principe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CmdSupprimer_Click()
    Dim Rg As Range
     
    Set Rg = Worksheets("BD_CLIENTS").Range("A:A").Find(what:=CboxIdClient.Value, LookIn:=xlValues, lookat:=xlWhole)
    If Not Rg Is Nothing Then
        Rg.EntireRow.Delete
        Set Rg = Nothing
    End If
    End Sub

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

Discussions similaires

  1. [Toutes versions] VBA : Ouvrir un fichier Word à partir d'Excel en désactivant la mise à jour des données.
    Par napidev dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/12/2014, 16h07
  2. [XL-2010] Mise à jour des données par formulaire vba Excel
    Par mam51100 dans le forum Excel
    Réponses: 0
    Dernier message: 16/02/2012, 10h25
  3. Mise à jour des données par macros.
    Par chpierro62 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 12/01/2012, 13h52
  4. [AC-2000] Mise à jour des données d'un formulaire à partir d'un autre
    Par Vincent79 dans le forum IHM
    Réponses: 6
    Dernier message: 03/09/2009, 14h45
  5. Réponses: 2
    Dernier message: 09/12/2008, 10h21

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