Modification et supprimer

Bonjour a tous,

j'ai un problème pour mon onglet fournisseur de mon application en ce qui concerne la modification et la suppression de l'élément sélectionner pour la modification quand je souhaite enregistrer la modification cela supprime tout les champ sauf la première cellule et pour la suppression cela me donne un message d'erreur

si quelqu'un peut me dire d'où viens le soucis merci d'avance pour toute aide

Je pense que l'erreur vient d'ici:

Private Sub BtnSupprimerFournisseur_Click()
With Worksheets("bdd2")

       .Cells(X, "A").Value = ""
      .Cells(X, "B").Value = ""
      .Cells(X, "C").Value = ""
      .Cells(X, "D").Value = ""
    etc.......

X vaut "0" donc cells(0,D) ca plante..

Si je dit pas de bétises, dans ta private sub, X n'est pas déclaré donc par défaut il vaut 0 donc normal que ca plante ? tu utilise X dans d'autre procédure mais ce n'est pas lié à celle-ci. Ton code est assez complet et complexe donc difficile d'avoir bcp de recule sur l'ensemble des procédures.

J'espère te donner des pistes de réfléxions pour corriger l'erreur !

Pour le bouton supprimer le soucis est régler merci beaucoup mais pour le bouton modifier le X est déclarer mais j'ai quand meme un soucis je laisse mon code pour ce bouton en espérant que ce soit plus clair :

Private Sub BtnModifF_Click()

Dim X As Long   ' integer = max 32768 lignes, pour plus utiliser Long

   With Worksheets("bdd2")

      X = SuiviCommande.LBxFournisseur.ListIndex + 2

' enregistre les données modifiée

      .Cells(X, "A").Value = Me.TxtBEntreprise
      .Cells(X, "B").Value = Me.TxtBMailEntreprise
      .Cells(X, "C").Value = Me.TxtBTelephone
      .Cells(X, "D").Value = Me.TxtBPortabl
      .Cells(X, "E").Value = Me.TxtBSiteWeb
      .Cells(X, "F").Value = Me.TxtBRue
       .Cells(X, "G").Value = Me.TxtBCodePostal
       .Cells(X, "H").Value = Me.TxtBVille
      .Cells(X, "i").Value = Me.TxtBPays

      'vide les textbox

TxtBEntreprise = ""
TxtBMailEntreprise = ""
TxtBTelephone = ""
TxtBPortabl = ""
TxtBSiteWeb = ""
TxtBRue = ""
TxtBCodePostal = ""
TxtBVille = ""
TxtBPays = ""

   End With
End Sub

EDIT : pour ce bouton pas de plantage je le rappel c'est juste que cela supprime les celllules sauf la A

A chaque une de ces lignes:

      .Cells(X, "A").Value = Me.TxtBEntreprise
      .Cells(X, "B").Value = Me.TxtBMailEntreprise
      .Cells(X, "C").Value = Me.TxtBTelephone
      .Cells(X, "D").Value = Me.TxtBPortabl
      .Cells(X, "E").Value = Me.TxtBSiteWeb
      .Cells(X, "F").Value = Me.TxtBRue
       .Cells(X, "G").Value = Me.TxtBCodePostal
       .Cells(X, "H").Value = Me.TxtBVille
      .Cells(X, "i").Value = Me.TxtBPays

La procédure Private Sub LBxFournisseur_Click() est appellé, le problème vient surement de la les modification effectués sont effacés avant d'etre copiers dans le tableau. mais je ne comprend pas pourquoi cette procédure est appellé...

De plus au cas ou on clique sur Modifier snas avoir selectionné de ligne tu devrais rajouter ca

if x > 1 then

end if

Utilise F8 pour éxécuter pas à pas tes procédures c'est ce qui me permet de trouver ce qui cloche

la procédure LBxFournisseur_Click() est apellé parceque j'ai procédé comme ca pour la modification des commande comme ceci :

Private Sub btnSauvegarderCommande_Click()
Dim X As Long   ' integer = max 32768 lignes, pour plus utiliser Long

   With Worksheets("bdd1")

      X = SuiviCommande.LBxCommande.ListIndex + 2

      .Cells(X, "A").Value = Me.TxtBDesignationProduit
      .Cells(X, "B").Value = Me.TxtBDestinataire
      .Cells(X, "C").Value = Me.CbBSite
      .Cells(X, "D").Value = Me.TxtBFournisseur
      .Cells(X, "E").Value = Me.CbBEtatlivraison
      .Cells(X, "F").Value = Me.CbBServiceFait

       .Cells(X, "G").Value = Me.TxtBNumDA
       .Cells(X, "H").Value = Me.TxtBDateDA
      .Cells(X, "i").Value = Me.TxtBDV
      .Cells(X, "J").Value = Me.TxtBNumBC
     .Cells(X, "K").Value = Me.TxtBDateBC
      .Cells(X, "l").Value = Me.TxtDateCc
      .Cells(X, "M").Value = Me.TxtBDateL

   End With
   Unload Me
End Sub

quand au probleme je ne pense pas qu'il viens du fait que les modifications soit effacées car meme en mettant les lignes qui vident les textbox en commentaire j'ai le meme soucis

Si j'insiste:

Private Sub LBxFournisseur_Click()
Dim X As Long   ' integer = max 32768 lignes, pour plus utiliser Long
With Worksheets("bdd2")
   X = Me.LBxFournisseur.ListIndex + 2

'   TxtBEntreprise = ""
'TxtBMailEntreprise = ""
'TxtBTelephone = ""
'TxtBPortabl = ""
'TxtBSiteWeb = ""
'TxtBRue = ""
'TxtBCodePostal = ""
'TxtBVille = ""
'TxtBPays = ""

'   TxtBEntreprise = .Cells(X, "A")
'    TxtBMailEntreprise = .Cells(X, "B")
'     TxtBTelephone = .Cells(X, "C")
'     TxtBPortabl = .Cells(X, "D")
'     TxtBSiteWeb = .Cells(X, "E")
'     TxtBRue = .Cells(X, "F")
'      TxtBCodePostal = .Cells(X, "G")
'    TxtBVille = .Cells(X, "H")
'      TxtBPays = .Cells(X, "i")
  End With

End Sub

Si je met tout en acolade tout fonctionne parfaitement chez moi.

Ce qui se passe c'est que en éxécutant cette procédure à chaque fois tu viens remplacer les valeurs qui viennent d'être modifiers dans le USForm par les anciennes valeurs toujours présentes dans ton Classeur Excel !

En éxécutant pas à pas on voit bien que à aucuns moments les nouvelles valeurs rentrées par l'utilisateur dans le USForm sont mémorisés par le code elles sont aussitot remplacé par des donnes obsolètes

Salut Gabin37 ,

je comprend donc d'où viens l'erreur mais je ne voit pas comment régler celle ci tu aurais une idée ?

Salut,Pour le moment non..

Quand j'aurais un peu de temps je vais continuer de chercher de mon coté.

Si d'autres intervenants veulent se joindre à nous ils sont les bienvenues !

Pas de soucis Gabin je cherche moi aussi de mon coté et je pense que cela viens de mon index que j'avais pas initialisé a l'ouverture de l'userform j'ai changer plusieurs chose mais toujours rien si quelqu'un a une idée ...

UP

EDIT : je comprend vraiment pas pourquoi cela ne fonctionne pas , mon bouton supprimé qui fonctionne du même principe fonctionne , je perd espoir ...

Bonsoir,

J'ai regardé un petit peu, je suis entrain de construire une base donée avec un ID des salariés de ma boite, Je peux te fournir un code, mais il fonctionne avec un ID (numéro de ligne)

Voir avec les pros du forum comment l'adapter pour toi

Ton tableau de base devient un tableau au sens listobjects : ton rowsource de ta LBxFournisseur devient Tableau1

image image

Ta listbox devient :

Private Sub LBxFournisseur_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

    Dim Line As Long

    On Error Resume Next

    Line = Me.LBxFournisseur.ListIndex

    Me.TxtBEntreprise = Me.LBxFournisseur.Column(1, Line)
    Me.TxtBMailEntreprise = Me.LBxFournisseur.Column(2, Line)
    Me.TxtBTelephone = Me.LBxFournisseur.Column(3, Line)
    Me.TxtBPortabl = Me.LBxFournisseur.Column(4, Line)
    Me.TxtBSiteWeb = Me.LBxFournisseur.Column(5, Line)
    Me.TxtBRue = Me.LBxFournisseur.Column(6, Line)
    Me.TxtBCodePostal = Me.LBxFournisseur.Column(7, Line)
    Me.TxtBVille = Me.LBxFournisseur.Column(8, Line)
    Me.TxtBPays = Me.LBxFournisseur.Column(9, Line)
    Me.Ref = Me.LBxFournisseur.Column(0, Line) 'Ligne

    ThisWorkbook.RefreshAll

End Sub

Ton bouton modifier devient :

Private Sub BtnModifF_Click()

    If Me.TxtBEntreprise = "" Then

        MsgBox "Aucune data modifier"

    Else

        With Sheets("bdd2")
            .ListObjects(1).DataBodyRange(Me.Ref, 2) = Me.TxtBEntreprise
            .ListObjects(1).DataBodyRange(Me.Ref, 3) = Me.TxtBMailEntreprise
            .ListObjects(1).DataBodyRange(Me.Ref, 4) = Me.TxtBTelephone
            .ListObjects(1).DataBodyRange(Me.Ref, 5) = Me.TxtBPortabl
            .ListObjects(1).DataBodyRange(Me.Ref, 6) = Me.TxtBSiteWeb
            .ListObjects(1).DataBodyRange(Me.Ref, 7) = Me.TxtBRue
            .ListObjects(1).DataBodyRange(Me.Ref, 8) = Me.TxtBCodePostal
            .ListObjects(1).DataBodyRange(Me.Ref, 9) = Me.TxtBVille
            .ListObjects(1).DataBodyRange(Me.Ref, 10) = Me.TxtBPays
        End With

        Me.TxtBEntreprise = ""
        Me.TxtBMailEntreprise = ""
        Me.TxtBTelephone = ""
        Me.TxtBPortabl = ""
        Me.TxtBSiteWeb = ""
        Me.TxtBRue = ""
        Me.TxtBCodePostal = ""
        Me.TxtBVille = ""
        Me.TxtBPays = ""

        ThisWorkbook.RefreshAll
        ThisWorkbook.Save

    End If

End Sub

Merci pour ton aide je regarde ça dès demain si j'arrive à l'adapter

Salut Shenzar j'ai regardé donc ce que tu ma envoyé et je trouve que c'est une tres bonne idée mais malheureusement en faisant cela ca risque d'entrer en conflits avec d'autre méthodes de mon programme qui ne fonctionnerons plus mais merci pour ton programme j'ai vu des choses intéressantes donc je pourrais me servir.

bonjour,

Bon courage :)

merci beaucoup j'espère que quelqu'un trouvera la solution

personne n'a de solution ? je suis vraiment bloqué

Si c'est le tableau et la colonne ID Client qui te gêne à ce point tu peux tester alors ça sa marche bien chez moi :

image

Sinon bonne chance :)

Option Explicit
Dim Line As Long

Private Sub LBxFournisseur_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

    On Error Resume Next

    Line = Me.LBxFournisseur.ListIndex + 2

    Me.TxtBEntreprise = Me.LBxFournisseur.Column(0)
    Me.TxtBMailEntreprise = Me.LBxFournisseur.Column(1)
    Me.TxtBTelephone = Me.LBxFournisseur.Column(2)
    Me.TxtBPortabl = Me.LBxFournisseur.Column(3)
    Me.TxtBSiteWeb = Me.LBxFournisseur.Column(4)
    Me.TxtBRue = Me.LBxFournisseur.Column(5)
    Me.TxtBCodePostal = Me.LBxFournisseur.Column(6)
    Me.TxtBVille = Me.LBxFournisseur.Column(7)
    Me.TxtBPays = Me.LBxFournisseur.Column(8)

    ThisWorkbook.RefreshAll

End Sub

Private Sub BtnModifF_Click()

    If Me.TxtBEntreprise = "" Then

        MsgBox "Aucune data modifier"

    Else

        With Sheets("bdd2")
            .Cells(Line, 1) = Me.TxtBEntreprise
            .Cells(Line, 2) = Me.TxtBMailEntreprise
            .Cells(Line, 3) = Me.TxtBTelephone
            .Cells(Line, 4) = Me.TxtBPortabl
            .Cells(Line, 5) = Me.TxtBSiteWeb
            .Cells(Line, 6) = Me.TxtBRue
            .Cells(Line, 7) = Me.TxtBCodePostal
            .Cells(Line, 8) = Me.TxtBVille
            .Cells(Line, 9) = Me.TxtBPays
        End With

        Me.TxtBEntreprise = ""
        Me.TxtBMailEntreprise = ""
        Me.TxtBTelephone = ""
        Me.TxtBPortabl = ""
        Me.TxtBSiteWeb = ""
        Me.TxtBRue = ""
        Me.TxtBCodePostal = ""
        Me.TxtBVille = ""
        Me.TxtBPays = ""

        ThisWorkbook.RefreshAll
        ThisWorkbook.Save

    End If

End Sub

Salut merci encore pour ta réponse tes modifications semble intéressantes mais je n'arrive pas a les faire et a mettre mon tableau en dynamique pourrais tu le faire s'il te plait si ca ne te dérange pas parce que je m'emmêle les pinceaux

mon appli actualiser car j'ai modifier quelques lignes

Bon courage

@ +

Rechercher des sujets similaires à "modification supprimer"