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 :

Problème Listbox, mise à jour BD via textbox [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème Listbox, mise à jour BD via textbox
    Bonsoir à toutes et à tous,

    En cliquant sur une ligne d'une Listbox, je récupère les données de celle-ci dans des textboxs, où j'effectue mes modifications puis en validant avec un bouton ces données doivent être transférées sur la feuille (mise à jour des données) et la Listbox doit se mettre à jour.

    j'ai suivi la procédure pas à pas et je me suis rendu compte qu'après le transfert du 1er textbox (le textbox2) , elle saute à Private Sub ListBox1_Change() et du coup toutes mes modifications disparaissent.

    J'ai eu beau chercher le pourquoi et le comment pour résoudre le problème sans succès. D'autant plus que c'est la première fois que je travaille avec une Listbox.

    je suis parvenu à faire ce formulaire en suivant des tutos et exemples.

    la 1ere colonne représente des outils de productions, les colonnes suivantes leurs caractéristiques et la dernière colonne l’état de l'outil (en service ou hors service).

    Généralement on ne change que l’état de l'outil, c'est pour cela que j'ai mis une checkbox qui doit transmettre directement le changement sur la feuille et la Listbox doit se mettre à jour.

    En espérant que mes explications sont assez claires. Je vous remercie par avance.

    Cordialement
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir Cathodique, bonsoir le forum,

    Le problème vient de l'alimentation de la ListBox1 par la méthode RowSource... C'est pour cela que je n'utilise jamais cette méthode. Son seul avantage c'est que la propriété [ColumnHeads] fonctionne. À toi de choisir la propriété [ColumnHeads] ou un code qui ne plante pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub UserForm_Initialize()
    Set F = ThisWorkbook.Worksheets("Outils")
    Set rng = F.Range("A1").CurrentRegion
    With rng
        Set rng = .Offset(1).Resize(.Rows.Count - 1)    ' Redimensionnement de la plage des données pour ne pas prendre en compte la première ligne
    End With
     
    With Me.ListBox1
        .List = rng.Value
        .ColumnCount = 13   ' Nombre de colonnes à afficher
        .ColumnWidths = "50;60;50;80;80;80;50;50;60;60;80;120;80"    ' Largeur des colonnes à affciher si 0 = invisible
    End With
    End Sub
    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 Btn_Modif_Outil_Click()
    Dim LI As Integer
     
    If Me.TextBox1 = "" Then MsgBox "Aucun Poste sélectionné!": Exit Sub
    LI = Me.ListBox1.ListIndex + 2
     
    On Error Resume Next
    ' F.Cells(c.Row, 1) = Me.TextBox1.Value    'No Outil
    F.Cells(LI, 2) = Me.TextBox2.Value    ''site
    F.Cells(LI, 3) = Me.TextBox3.Value    'p
    F.Cells(LI, 4).Value = Me.TextBox4.Value  ' xxxxxx
    F.Cells(LI, 5).Value = Me.TextBox5.Value  'marque
    F.Cells(LI, 6).Value = Me.TextBox6.Value  'no serie
    F.Cells(LI, 7).Value = CInt(Me.TextBox7.Value)  't
    F.Cells(LI, 8).Value = CInt(Me.TextBox8)   'i
    F.Cells(LI, 9).Value = CInt(Me.TextBox9)   'année de fabrication
    F.Cells(LI, 10).Value = CInt(Me.TextBox10)   'année mise en service
    F.Cells(LI, 11).Value = Me.TextBox11.Value   'code
    F.Cells(LI, 12).Value = Me.TextBox12.Value   'observation
    F.Cells(LI, 13).Value = Me.TextBox13.Value   'etat outil
    MsgBox "Correction terminée!", vbInformation
    Unload Me
    UserForm1.Show
    End Sub

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour Thautheme

    As-tu essayé le truc qui consiste à supprimer le lien Rowsource avant les modifications pour le rétablir après les modifications ?
    Ca semble bien fonctionner.
    Ceci dit, je ne suis pas un spécialiste de Rowsource car je ne l'ai jamais utilisé jusqu'à maintenant dans mes programmes.

    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
    Rowsource = Me.ListBox1.Rowsource
      Me.ListBox1.Rowsource = ""
     
        ' F.Cells(c.Row, 1) = Me.TextBox1.Value    'No Outil
        F.Cells(c.Row, 2) = Me.TextBox2.Value    ''site
         F.Cells(c.Row, 3) = Me.TextBox3.Value    'p
         F.Cells(c.Row, 4).Value = Me.TextBox4.Value  ' xxxxxx
         F.Cells(c.Row, 5).Value = Me.TextBox5.Value  'marque
         F.Cells(c.Row, 6).Value = Me.TextBox6.Value  'no serie
         F.Cells(c.Row, 7).Value = CInt(Me.TextBox7.Value)  't
         F.Cells(c.Row, 8).Value = CInt(Me.TextBox8)   'i
         F.Cells(c.Row, 9).Value = CInt(Me.TextBox9)   'année de fabrication
         F.Cells(c.Row, 10).Value = CInt(Me.TextBox10)   'année mise en service
         F.Cells(c.Row, 11).Value = Me.TextBox11.Value   'code
         F.Cells(c.Row, 12).Value = Me.TextBox12.Value   'observation
         F.Cells(c.Row, 13).Value = Me.TextBox13.Value   'etat outil
     
      Me.ListBox1.Rowsource = Rowsource

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour, je vous remercie beaucoup. Je teste et vous met au courant.

    En fait, mon idée initiale était l'utilisation d'une listview puis je me suis tourné vers une listbox et ce, par rapport à ce que j'ai pu lire sur la listview.

    Il parait qu'elle n'est pas fiable pour des raisons de compatibilité entre les différentes versions d'excel et dépend aussi du système d'exploitation.

    J'ai pu constaté que les fichiers exemples que j'ai pu trouver sur le forum et ailleurs plantaient. J'ai eu des messages d'erreur et dans l'userform on ne retrouve plus la listview.

    Encore merci. Bonne journée!
    Images attachées Images attachées    

  5. #5
    Invité
    Invité(e)
    Par défaut
    Re,
    @Tauthemene, en effet avec ton code ça fonctionne bien, merci beaucoup.

    @Docmarti, Merci mais comment dois-je déclarer RowSource, car j'ai un message:"Erreur de compilation: Variable non définie."

    Les 2 solutions m'intéresse pour en apprendre un peu plus. En vous remerciant.
    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
    Private Sub Btn_Modif_Outil_Click()
    Dim c As Range
    If Me.TextBox1 = "" Then MsgBox "Aucun outil sélectionné!": Exit Sub
    '
    RowSource = Me.ListBox1.RowSource
      Me.ListBox1.RowSource = ""
     
        ' F.Cells(c.Row, 1) = Me.TextBox1.Value    'No Outil
        F.Cells(c.Row, 2) = Me.TextBox2.Value    ''site
         F.Cells(c.Row, 3) = Me.TextBox3.Value    'p
         F.Cells(c.Row, 4).Value = Me.TextBox4.Value  ' xxxxxx
         F.Cells(c.Row, 5).Value = Me.TextBox5.Value  'marque
         F.Cells(c.Row, 6).Value = Me.TextBox6.Value  'no serie
         F.Cells(c.Row, 7).Value = CInt(Me.TextBox7.Value)  't
         F.Cells(c.Row, 8).Value = CInt(Me.TextBox8)   'i
         F.Cells(c.Row, 9).Value = CInt(Me.TextBox9)   'année de fabrication
         F.Cells(c.Row, 10).Value = CInt(Me.TextBox10)   'année mise en service
         F.Cells(c.Row, 11).Value = Me.TextBox11.Value   'code
         F.Cells(c.Row, 12).Value = Me.TextBox12.Value   'observation
         F.Cells(c.Row, 13).Value = Me.TextBox13.Value   'etat outil
     
      Me.ListBox1.RowSource = RowSource
     
    MsgBox "Correction terminée!", vbInformation
    End Sub

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re,

    Désolé, juste une question qui n'est pas en rapport avec mon sujet.

    Comment avez-vous inséré du texte au bas de votre message. je doute bien que ça se trouve dans mon profil mais où exactement?

    C'est pour ne pas faire de bêtise, merci.

    Bonne journée

  7. #7
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par cathodique Voir le message
    Re,

    @Docmarti, Merci mais comment dois-je déclarer RowSource, car j'ai un message:"Erreur de compilation: Variable non définie."
    C'est parce que tu as mis la commande
    en tête du code de ce module.
    Lorsque Option Explicit apparaît dans un module, on doit déclarer explicitement toutes les variables à l'aide des instructions Dim ou ReDim.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Rowsource As String
    Le but de Option Explicit est de supprimer le risque de mal orthographier le nom des variables.

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

Discussions similaires

  1. [XL-2010] Problème de mise à jour d'une textbox en fonction de la valeur d'une combobox
    Par benadry dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/06/2014, 10h22
  2. Réponses: 3
    Dernier message: 11/01/2013, 14h28
  3. Réponses: 3
    Dernier message: 15/09/2008, 08h32
  4. problème de mise à jour via un trigger
    Par clement42 dans le forum Sybase
    Réponses: 4
    Dernier message: 17/01/2007, 10h29

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