j'utilise dans un fichier excel avec macro, une base de données regroupant différentes machines. Quand je sélectionne une machine de la base de donnée, il m'en ressort les caractéristiques de celle-ci.
Cependant, à travers une macro je peux ajouter / supprimer des machines et leurs caractéristiques dans ma base de données.
j'ai un tableau regroupant les caractéristiques des machines, et une liste de fichier "source" (le nom des machines)
mon problème est le suivant, je peux ajouter les machines sans souci, je peux supprimer n'importe laquelle sans problème, sauf : la 1ère de la liste, si par ma macro je supprime la première machine de ma liste, toute ma liste "source" se retrouve supprimé, et je ne comprend pas pourquoi.
ci joint le bout de code associer à ma fonction supprimer
Code:
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
Dim numac As String
Call protect_off
'on verifie que la machine a supprimer fasse partie de la liste
If Me.txtsup.MatchFound = False Then
MsgBox "La machine " & Me.txtsup.Text & " n'existe pas!", vbExclamation
Call protect_on
Exit Sub
End If
'on donne la valeur de la machine à supprimer a la variable numac
numac = Me.txtsup.Text
p_source.Select
Range("snumac").Select
Do While ActiveCell.Value <> numac
ActiveCell.Offset(1, 0).Select
Loop
'on supprime le numero
Selection.Delete Shift:=xlUp
'on passe sur l'onglet base
p_base.Select
Range("nmachine").Select
Do While ActiveCell.Value <> numac
ActiveCell.Offset(1, 0).Select
Loop
'on supprime la ligne recherchée
ActiveCell.EntireRow.Delete
'on vide le champ de recherche
Me.txtsup.Text = ""
'conclusion
MsgBox "La machine " & numac & " et sa Check List ont été supprimées!", vbInformation
Call protect_on
End Sub
"snumac" étant ma plage de donnée des machines ( = source, numéro machine)
si je n'ai pas été clair, n'hésitez pas
voilà, si quelqu'un à la patience de m'aider, je vous remercie d'avance !
Bonjour,
Peux être . . .
Un textbox renvoie du texte donc au lieu de Do While ActiveCell.Value <> numac mettre comme cela Do While ActiveCell.text <> numac
Re,
sans fichier exemple pas facile.
Pour supprimer des lignes il faut le faire de bas en haut et non de haut en bas.
Evite aussi les select. Une boucle For Next de bas en haut ferait bien l'affaire.
Bruno
Salut bien,
Désolé de mon retard,
voici qui fera l'affaire sous le bouton supprimer
Code:
Private Sub CommandButton2_Click()
Dim numac As String
numac = CDbl(Me.txtsup.Text)
If Me.txtsup.ListIndex = -1 Then 'aucune selection
MsgBox "La machine " & Me.txtsup.Text & " n'existe pas!", vbExclamation
Exit Sub
End If
'on utilise listindex qui donne le nombre de lignes ou est la machine à supprimer
Feuil1.Rows(Me.txtsup.ListIndex + 2).Delete
'listindex commence à 0 et +ligne entete donc voila pour le +2
'on vide le champ de recherche
Me.txtsup.Text = ""
'conclusion
MsgBox "La machine " & numac & " et sa Check List ont été supprimées!", vbInformation
End Sub
il me reste un tout petit souci, il faudrait que la fonction supprime uniquement la machine et son numéro, car à coté j'ai d'autre paramètres (numéro de ligne, périodicité etc ... ) et lorsque je supprime un paramètre en haut de colone, il me supprime toute la ligne donc j'ai certain paramètre qui disparaisse, qui ne devrait pas. Faut-il adapter la ligne "Feuil1.Rows(Me.txtsup.ListIndex + 2).Delete"
j'ai essayer de remplacer Rows par Range ("B2:C65000") mais du coup sa ne supprimer que le numéro de machine sélectionné et pas le nom de la machine avec .. ! sa avance.
OK,
remplace "Feuil1.Rows(Me.txtsup.ListIndex + 2).Delete" par
Dim lig as Long
lig=Me.txtsup.ListIndex + 2 Feuil1.range("B & lig & ":C" & lig).clearcontents 'on efface Me.txsup.RemoveItem 'on supp de la liste
Pour avoir de l'aide en vba mets le curseur sur un mot clé et presse la touche F1
exemple écrit Cdbl et presse F1 si l'aide n'est pas installé je te conseille fortement de l'installer.
Si tu as 1234 dans un textbox ou combobox il renvoie du texte et non du numérique donc Cdbl va traduire le texte en chiffre.
Bruno