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 a jour de données via formulaire


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Points : 37
    Points
    37
    Par défaut Mise a jour de données via formulaire
    Bonjour,

    J'ai un userform qui me permet d'afficher les données de ma Feuil

    J'ai mis un bouton pour pouvoir enregistrer les modifications

    soit:
    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
    Private Sub CommandButton2_Click()
    Dim Lig As Long
    Dim ws As Worksheets
    Set ws = Worksheets("Feuil1")
     
    ws.Cells(Lig, 1).Value = Me.Nom.Value
    ws.Cells(Lig, 2).Value = Me.photo.Value
    ws.Cells(Lig, 3).Value = Me.Tph.Value
    ws.Cells(Lig, 4).Value = Me.valmarch.Value
    ws.Cells(Lig, 5).Value = Me.prixht.Value
    ws.Cells(Lig, 6).Value = Me.livraison.Value
    ws.Cells(Lig, 7).Value = Me.tva.Value
    ws.Cells(Lig, 8).Value = Me.etattva.Value
    ws.Cells(Lig, 9).Value = Me.prixttc.Value
    ws.Cells(Lig, 10).Value = Me.ventemin.Value
    ws.Cells(Lig, 11).Value = Me.venteestim.Value
    ws.Cells(Lig, 12).Value = Me.ecart.Value
     
    End Sub
    A chaque fois j'obtien une erreur "91" sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.Cells(Lig, 1).Value = Me.Nom.Value
    J'ai lu plusieurs poste et l'aide mais je n'arrive pas as identifier le probleme.

    Pourriez vous m'aider? Merci

  2. #2
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Bonjour,
    La variable Lig n'est pas initialisée... Qu'est-ce qu'elle est sensée contenir ?

  3. #3
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    Avec le code que tu donnes, Lig vaut 0, et la ligne 0 n'existe pas.

    Cordialement,

    PGZ

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Points : 37
    Points
    37
    Par défaut
    Je ne suis pas très bon en VBA

    J'avoue être complètement perdu. De se que j'ai compris "Lig" me permet d'écrire sur une ligne et qu'il reste a définir la colonne par son numéro.

  5. #5
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,
    Citation Envoyé par crashfire Voir le message
    JDe se que j'ai compris "Lig" me permet d'écrire sur une ligne et qu'il reste a définir la colonne par son numéro.
    Oui c'est bien ça mais, comme l'ont signalé pgz et tedo01, si tu n'attribues pas de valeur à ta variable "Lig", par défaut Lig = 0
    Donc ws.Cells(Lig, 1) correspond à ws.Cells(0, 1) et la ligne 0 n'existe pas, d'où le plantage.

    Essaie ceci
    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
    Private Sub CommandButton2_Click()
    Dim Lig As Long
    Dim ws As Worksheets
    Set ws = Worksheets("Feuil1")
    Lig = 10
     
    ws.Cells(Lig, 1).Value = Me.Nom.Value
    ws.Cells(Lig, 2).Value = Me.photo.Value
    ws.Cells(Lig, 3).Value = Me.Tph.Value
    ws.Cells(Lig, 4).Value = Me.valmarch.Value
    ws.Cells(Lig, 5).Value = Me.prixht.Value
    ws.Cells(Lig, 6).Value = Me.livraison.Value
    ws.Cells(Lig, 7).Value = Me.tva.Value
    ws.Cells(Lig, 8).Value = Me.etattva.Value
    ws.Cells(Lig, 9).Value = Me.prixttc.Value
    ws.Cells(Lig, 10).Value = Me.ventemin.Value
    ws.Cells(Lig, 11).Value = Me.venteestim.Value
    ws.Cells(Lig, 12).Value = Me.ecart.Value
     
    End Sub

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Points : 37
    Points
    37
    Par défaut
    ok je comprend le logique
    Mais en definissant Lig=1 vas t il ecrire sur la premiere ligne?
    Car moi je voudrais qu'il remplace les donner que j'ai modifier et cela peux etre sur n'importe qu'elle ligne

  7. #7
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Il faudrait déclarer Lig en début de module (variable globale)
    Comment tu récupère les données dans ton userform à partir de ta feuille pour les modifier?
    Si c'est ça, tu affecte à Lig la valeur de la ligne à modifier, tu fais tes modifs et le ré enregistrement se fera au bon endroit

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Points : 37
    Points
    37
    Par défaut
    Je récupère la ligne via une listbox qui une fois choisi renvoie les autre information vers les textbox de mon formulaire

    Voici le fichier cela risque d'etre plus simple que mes explications
    Gestion article test.rar

  9. #9
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Comme dit précédemment, déclare ta variable Lig globale(dans un module standard ou au début du module de ton Userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
    Dim Lig As Long
     
    'suite des sub, par exemple
    Private Sub UserForm_Initialize()
     
    End Sub
    quand tu récupère les données à modifier, tu affecte à cette variable Lig le n° de la ligne à modifier, ensuite tu fais les modifications dans ton userform et tu réinjecte les données modifiées sur ta feuille au bon endroit (mémorisé par la variable Lig)

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Points : 37
    Points
    37
    Par défaut
    Ok
    option explicite etait bien la mais cela ne change rien

  11. #11
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Je parlais de la déclaration de ligj'avais laissé Option explicit exprès pour que tu saches où déclarer Lig et nulle part ailleurs

  12. #12
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    [Edit] Grillé
    Comment ouvres tu ton UserForm? a aprtir de quoi?, d'un bouton placé sur ta feuille?
    Si c'est le cas, rajoute se code dans ton bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Lig = ActiveCell.row
    MonUserForm.show 'bien sur a la place de MonUserForm tu met le nom du tient.
    Donc avant de cliquer sur ce bouton, tu sélectionnes une cellule sur la ligne que tu souhaites modifier et ensuite tu cliques sur ton bouton.[/Edit]
    Option Explicit n'a rien a voir, il te force juste a déclarer toutes les variables que tu utilises.
    Ce qui t'importe ici dans le code qui t'a été fourni c'est le
    ++
    Qwaz

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Points : 37
    Points
    37
    Par défaut
    @mercatog: J'aivais bien compris et c'est fait mais ca change rien mon bouton et inatif

    @Qwazerty: Je recupere mes donner via une listbox dans mon userform

  14. #14
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Citation Envoyé par crashfire Voir le message
    @Qwazerty: Je recupere mes données via une listbox dans mon userform
    Et? quel est le problème?
    1/Comment remplis tu ta ListBox?

    2/Au moment de mettre a jour ton fichier, il faut bien que Lig pointe la bonne ligne et il te faut bien définir Lig lors de l'affichage de ta UserForm, non ?

    ++
    Qwaz

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Points : 37
    Points
    37
    Par défaut
    Mon problème et qu'il ne se passe juste rien quand je clic sur mon bouton "mise a jour"

    Je comprend vraiment pas car j'ai un autre bouton qui me permet de cree un nouvelle article est qui entre tres bien les donnees dans les bonne colonne.

    Mais mise a jour veux rien savoir.

    Donc si je recapitule

    Dans mon userform j'ai bien declarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Explicit
    Dim Lig As Long
    Dim Impaye As String
    Dim ws As Worksheets
    Ensuite sur mon bouton mise a jour (toujour sur l'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
    Private Sub CommandButton2_Click()
    With Sheets(Impaye)
     
    .Cells(Lig, 1).Value = Me.Nom.Value
    .Cells(Lig, 2).Value = Me.photo.Value
    .Cells(Lig, 3).Value = Me.Tph.Value
    .Cells(Lig, 4).Value = Me.valmarch.Value
    .Cells(Lig, 5).Value = Me.prixht.Value
    .Cells(Lig, 6).Value = Me.livraison.Value
    .Cells(Lig, 7).Value = Me.tva.Value
    .Cells(Lig, 8).Value = Me.etattva.Value
    .Cells(Lig, 9).Value = Me.prixttc.Value
    .Cells(Lig, 10).Value = Me.ventemin.Value
    .Cells(Lig, 11).Value = Me.venteestim.Value
    .Cells(Lig, 12).Value = Me.ecart.Value
    End With
    End Sub

  16. #16
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Et je parie mon billet que tu as toujours la même erreur.

    Tu n'as toujours pas donné de valeur a Lig.

    Tu déclares
    Ok donc la tu dis a VBA que la variable Lig sera de type Long, donc une valeur comprise entre -2 147 483 648 et 2 147 483 647.

    Vu que VBa est un bon gars, il initialise cette variable en lui donnant une valeur, 0 (zero).

    Donc tant que tu aura pas mis quelque part
    Lig = .... le numéro de la ligne que tu veux modifié, Lig restera égale à zero

    Et comme expliqué avant la ligne 0 n'existe pas, donc ça plante!

    ++
    Qwaz

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Points : 37
    Points
    37
    Par défaut
    ok je comprend bien la logique

    Mais je pensais que ca ce declare comme dit par mercatog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Dim Lig As Long
    Alors comment lui indiquer la bonne ligne

  18. #18
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    On tourne en rond, si tu poses les mêmes questions moi aussi

    Citation Envoyé par Qwaz
    1/Comment remplis tu ta ListBox?

    2/Au moment de mettre a jour ton fichier, il faut bien que Lig pointe la bonne ligne et il te faut bien définir Lig lors de l'affichage de ta UserForm, non ?


    ++
    Qwaz

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 82
    Points : 37
    Points
    37
    Par défaut
    Voila
    Pour le lancer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    F_photo.Show
    End Sub
    Pour récupérer les données avec ma listbox

    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
    Private Sub choix_nom_Change()
     
     
      Me.Nom = Me.choix_nom
      photo = Cells(Me.choix_nom.ListIndex + 2, 2)
      Me.Tph = Cells(Me.choix_nom.ListIndex + 2, 3)
      valmarch = Cells(Me.choix_nom.ListIndex + 2, 4)
      prixht = Cells(Me.choix_nom.ListIndex + 2, 5)
      livraison = Cells(Me.choix_nom.ListIndex + 2, 6)
      tva = Cells(Me.choix_nom.ListIndex + 2, 7)
      etattva = Cells(Me.choix_nom.ListIndex + 2, 8)
      prixttc = Cells(Me.choix_nom.ListIndex + 2, 9)
      ventemin = Cells(Me.choix_nom.ListIndex + 2, 10)
      venteestim = Cells(Me.choix_nom.ListIndex + 2, 11)
      ecart = Cells(Me.choix_nom.ListIndex + 2, 12)
      ChDir ActiveWorkbook.Path      ' Les photos sont dans le répertoire de l'application
      If Dir(photo) <> "" Then       ' La photo existe t-elle?
         Me.monimage.Picture = LoadPicture(photo)
      Else
         Me.monimage.Picture = LoadPicture("transparent.gif")
      End If
    End Sub

  20. #20
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Ha ben on y arrive

    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 choix_nom_Change()
     
    Me.Nom = Me.choix_nom
    'ici tu defini la valeur de ta ligne, cette m^mee valeur sera utilisé dans ton autre code pour mettre a jour la ligne
    Lig = choix_nom.ListIndex
    photo = Cells(Lig + 2, 2)
    Me.Tph = Cells(Lig + 2, 3)
    valmarch = Cells(Lig + 2, 4)
    prixht = Cells(Lig + 2, 5)
    livraison = Cells(Lig + 2, 6)
    tva = Cells(Lig + 2, 7)
    etattva = Cells(Lig + 2, 8)
    prixttc = Cells(Lig + 2, 9)
    ventemin = Cells(Lig + 2, 10)
    venteestim = Cells(Lig + 2, 11)
    ecart = Cells(Lig + 2, 12)
    ChDir ActiveWorkbook.Path ' Les photos sont dans le répertoire de l'application
    If Dir(photo) <> "" Then ' La photo existe t-elle?
    Me.monimage.Picture = LoadPicture(photo)
    Else
    Me.monimage.Picture = LoadPicture("transparent.gif")
    End If
    End Sub
    ++
    Qwaz

Discussions similaires

  1. [AC-2003] Mise à jour d'une donnée via formulaire
    Par Lafouine4478 dans le forum IHM
    Réponses: 6
    Dernier message: 21/02/2011, 09h22
  2. [MySQL] Affichage et mise a jour de données via un lien
    Par argon dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 29/06/2008, 13h30
  3. mise a jour des données d'un formulaire
    Par imeys dans le forum IHM
    Réponses: 3
    Dernier message: 28/08/2007, 23h57
  4. Mise à jour de tables via formulaire
    Par sunwind dans le forum IHM
    Réponses: 4
    Dernier message: 09/12/2006, 21h09
  5. Mise à jour champs modifés via formulaire
    Par Al3x dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/01/2006, 18h31

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