Suppression ou modif de tableau avec VBA sans Userform
Bonjour tout le monde.
Je n'arrive pas a résoudre un problème d'ajout et de modification d'un tableau base de données de produits transformé en tableau (onglet BDDPrix).
A l'époque je ne suis pas passé par un userform pour ajouter des données mais par une simple feuille qui ajoute les données via un bouton.
Je comptais pratiquer de la même façon pour la modification et la suppression mais rien ne se passe comme je le veux.
L'onglet servant pour la modif et la suppr est l'onglet ModifierArticles du classeur.
L'onglet ou modifier/supprimer les données est l'onglet BDDPrix.
Lorsque l'on clique sur la croix rouge l'article sélectionné a l'aide d'une combobox devrait être supprimé.
Lorsque l'on clique sur le bouton en bas a droite 'Modifier l'article' la modification de l'article sélectionné devrait être faite.
J'ai trouvé sur le forum un code qui ne marche pas chez moi, mais il y avait pas mal de choses a modifier et je m'y suis probablement pas bien exécuté !!
Je vous mets au-dessous les codes que j'ai fait.
Pour le code suppression, je l'ai tellement bidouillé que ça ne ressemble à rien lol
Si vous pouviez m'aider a rendre cela plus propre et faire que cela fonctionne, je vous en serait très reconnaissant
D'avance merci
LE code (ne vous moquez pas :) )
Sub supprimerArticle()
Sheets("ModifierArticles").Unprotect
Sheets("BDDPrix").Unprotect
If Range("b5") = "" Then
MsgBox ("Veuillez sélectionner un numéro de prix!")
Range("b5").Select
Else
If MsgBox("Voulez-vous vraiment supprimer l'article # " & Range("b5") & "?", vbYesNo) = vbYes Then
'On Error Resume Next
Else
End If
End If
'Sheets("ModifierArticles").Protect
End Sub
'**************************
Sub ModifierUnArticle()
Sheets("ModifierArticles").Unprotect
Dim no_ligne As Integer
Sheets("BDDPrix").Select
Sheets("BDDPrix").Unprotect
no_ligne = ComboBox1.ListIndex + 2
If ComboBox1.Value = "" Then
MsgBox ("Veuillez sélectionner un numéro de prix!")
Else
Cells(no_ligne, 1) = Range("p11")
Cells(no_ligne, 2) = Range("q11")
Cells(no_ligne, 3) = Range("r11")
Cells(no_ligne, 4) = Range("s11")
Cells(no_ligne, 5) = Range("t11")
Cells(no_ligne, 6) = Range("u11")
Cells(no_ligne, 7) = Range("ww11")
Cells(no_ligne, 8) = Range("x11")
Cells(no_ligne, 9) = Range("y11")
Cells(no_ligne, 10) = Range("z11")
Cells(no_ligne, 11) = Range("aa11")
Cells(no_ligne, 12) = Range("ab11")
Cells(no_ligne, 13) = Range("ac11")
Cells(no_ligne, 14) = Range("ad11")
MsgBox ("L'article a bien été modifié.")
Sheets("BDDPrix").Protect
End If
'Sheets("ModifierArticles").Protect
End Sub
Bonjour,
A tester :
Sub SupprimerArticle()
Dim I As Integer
Dim AireArticles As Range
On Error GoTo Fin
Sheets("BDDPrix").Unprotect
Set AireArticles = Range("BDDPrix[N_art]")
With Sheets("ModifierArticles")
.Unprotect
If .Range("b5") = "" Then
MsgBox "Veuillez sélectionner un numéro de prix!", vbCritical
.Range("b5").Activate
Else
If MsgBox("Voulez-vous vraiment supprimer l'article # " & Range("b5") & "?", vbYesNo) = vbYes Then
For I = 1 To AireArticles.Count
If AireArticles(I) = .Range("B5") Then
AireArticles(I).EntireRow.Delete
End If
Next I
Else
End If
End If
End With
GoTo Fin
Fin:
Set AireArticles = Nothing
Sheets("BDDPrix").Protect: Sheets("ModifierArticles").Protect
End SubSub ModifierUnArticle()
Dim Continuer As Boolean
Dim Combo As ComboBox
Dim I As Integer
Dim AireArticles As Range, CelluleArticle As Range
Dim ShMod As Worksheet
On Error GoTo Fin
Sheets("BDDPrix").Unprotect
Set AireArticles = Range("BDDPrix[N_art]")
Set ShMod = Sheets("ModifierArticles")
With ShMod
.Unprotect
Set Combo = .OLEObjects("ComboBox1").Object
If Combo.Value = "" Then
MsgBox "Veuillez sélectionner un numéro d'article !", vbCritical
GoTo Fin
End If
End With
Continuer = False
For I = 1 To AireArticles.Count
If AireArticles(I) = ShMod.Range("B5") Then
Set CelluleArticle = AireArticles(I)
Continuer = True
Exit For
End If
Next I
If Continuer = False Then
MsgBox "Article non trouvé !", vbCritical
GoTo Fin
End If
With CelluleArticle
'Cells(no_ligne, 1) = Range("p11") ' La modification du numéro d'article n'a pas de sens
.Offset(0, 1) = ShMod.Range("q11")
.Offset(0, 2) = ShMod.Range("r11")
.Offset(0, 3) = ShMod.Range("s11")
.Offset(0, 4) = ShMod.Range("t11")
.Offset(0, 5) = ShMod.Range("u11")
.Offset(0, 6) = ShMod.Range("ww11")
.Offset(0, 7) = ShMod.Range("x11")
.Offset(0, 8) = ShMod.Range("y11")
.Offset(0, 9) = ShMod.Range("z11")
.Offset(0, 10) = ShMod.Range("aa11")
.Offset(0, 11) = ShMod.Range("ab11")
.Offset(0, 12) = ShMod.Range("ac11")
.Offset(0, 13) = ShMod.Range("ad11")
End With
MsgBox "L'article a bien été modifié !", vbInformation
GoTo Fin
Fin:
Set Combo = Nothing
Set AireArticles = Nothing: Set CelluleArticle = Nothing
Set ShMod = Nothing
Sheets("BDDPrix").Protect: Sheets("ModifierArticles").Protect
End SubMerci Eric, je vais tester ca :)
Comme je vis au Canada, c'est le début de la nuit pour nous, je testerais ca demain apres une bonne nuit.
Mais un gros merci pour ta rapidité.
MErci a Eric pour la resolution a mon probleme :)
Tout marche bien.
Je modifie les propriétés de ma combobox pour qu'elle se mette a jour lorsqu'il y a suppression d'article et c'est tout bon :)
Un gros merci et bonne journée a tous