Suppression de ligne automatique depuis un usf
Bonjour à tous et toutes.
Mon problème du jour...
J'ai un tableau ou je rentre mon besoin en pièces détachées et si la demande n'est pas rentable, je considère qu'il faut récupérer les pièces détachées viables pour réparer d'autres machines. Ca cela fonctionne, les lignes sont colorées en orange via une mfc et reprises dans un autre tableau sur le dashboard.
Ce que j'aimerais, c'est que quand je rentre les pièces détachées de cette machine via l'usf de l'onglet ajout, cela me supprime la ligne de la machine dans l'onglet demande et dans le tableau sur le dashboard.
Sachant que dans ces 3 phases, chaque machine à son identifiant unique " Logid "
Je ne vois pas trop comment faire cela " proprement "...
Merci d'avance !!!!!
Je vois bien pour le Entirerow.delete mais moi, ce n'est pas une ligne entière que je souhaite supprimer mais juste la ligne des 2 tableaux concernés, soit de D à P dans un tableau et de B à D dans l'autre tableau
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonsoir,
Il vous suffit d'utiliser dans votre procédure événementielle d'ajout de votre USF, cette procédure :
Sub Supp_demande()
Dim i As Long
With [tbldemande].ListObject
On Error Resume Next
i = Application.Match(Val(textblog2), .ListColumns("Log ID").DataBodyRange, 0)
If Err = 0 Then .ListRows(i).Delete _
Else MsgBox "ligne non supprimée dans tbldemande"
End With
With [tblcanni].ListObject
On Error Resume Next
i = Application.Match(Val(textblog2), .ListColumns("Log ID").DataBodyRange, 0)
If Err = 0 Then .ListRows(i).Delete _
Else MsgBox "ligne non supprimée dans tblcanni"
End With
End SubBonjour et merci à toi Thev !
Je ne dois pas mettre le code à la bonne place car cela ne fonctionne pas
Option Explicit
Private Sub ListBox1_Click()
ComboBox1.Value = ListBox1.Value
End Sub
Private Sub textbox2_Change()
Dim Mots As Variant
Dim Tbl As Variant
Dim i As Long
Mots = Split(Trim(Me.TextBox2), " ") ' Permet une recherche multiple, taper les requêtes en séparant par un espace
Tbl = Choix
For i = LBound(Mots) To UBound(Mots)
Tbl = Filter(Tbl, Mots(i), True, vbTextCompare)
Next i
Me.ListBox1.List = Tbl
End Sub
' developpez .net/forums/d2159041/logiciels/microsoft-office/excel/macros-vba-excel/combobox-saisie-intuitive/
Private Sub textblog2_Change()
' affiche les contrôles de la partie "Quantités" uniquement si
' les deux contrôles txtblog ET cbomodele sont saisis
' sinon on masque les contrôles de la partie "Quantités"
Ajouter Trim(textblog2) <> "" And Trim(ComboBox1) <> ""
End Sub
Private Sub ComboBox1_Change()
' affiche les contrôles de la partie "Quantités" uniquement si
' les deux contrôles txtblog ET cbomodele sont saisis
' sinon on masque les contrôles de la partie "Quantités"
Ajouter Trim(textblog2) <> "" And Trim(ComboBox1) <> ""
End Sub
Private Sub btajout2_Click()
' enregistrement de la demande
Dim Txt As String, Qte As Long, i As Long, n As Long, lig As Long, col As Long
If SpinButton11.Visible = False Then
' si le spinbutton9 n'est pas visible, c'est que les champs ctxtblog et cbomodele ne sont pas remplis
MsgBox "Veuillez renseigner le LogID et le Modèle ou bien annuler SVP..."
Exit Sub
Else
' les champs ctxtblog et cbomodele sont saisis -> on vérifie qu'il y a au moins une quantité >0
For i = 11 To 20
If CLng(Controls("SpinButton" & i)) <> 0 Then Exit For
Next i
If i = 21 Then
' on a parcourus toutes les quantités des spinbutton et elles sont toutes nulles
MsgBox "Toutes les quantités sont nulles : Veuillez en saisir au moins une ou bien annuler SVP..."
Exit Sub
End If
End If
' à ce stade tout est correct : on vérifie le champ "colis"
If Trim(txColis2) = "" Then MsgBox "Merci de renseigner un colis": Exit Sub
' Tout est correct -> on sauvegarde la demande
' n est la ligne d'écriture, col est la colonne d'écriture
n = Range("d" & Rows.Count).End(xlUp).Row + 1: col = 3
col = col + 1: Cells(n, col) = textblog2
col = col + 1: Cells(n, col) = ListBox1 'cbomodele
For i = 11 To 20: col = col + 1: Cells(n, col) = Controls("spinbutton" & i).Value: Next
col = col + 1: Cells(n, col) = txColis2
'information de l'utilisateur et RAZ du userform
MsgBox "La demande a été enregistrée."
RAZ
End Sub
Sub Supp_demande()
Dim i As Long
With [tbldemande].ListObject
On Error Resume Next
i = Application.Match(Val(textblog2), .ListColumns("Log ID").DataBodyRange, 0)
If Err = 0 Then .ListRows(i).Delete _
Else MsgBox "ligne non supprimée dans tbldemande"
End With
With [tblcanni].ListObject
On Error Resume Next
i = Application.Match(Val(textblog2), .ListColumns("Log ID").DataBodyRange, 0)
If Err = 0 Then .ListRows(i).Delete _
Else MsgBox "ligne non supprimée dans tblcanni"
End With
End Sub
End Sub
Private Sub btannul2_Click()
' referme l'userform
Unload Me
End Sub
' quand on change la quantité d'un SpinButton d'indice i, on change aussi
' la valeur affichée par le contrôle "Qte" d'indice i (et cela pour i = 1 à 8)
Private Sub SpinButton11_Change(): ValeurSpin 11: End Sub
Private Sub SpinButton12_Change(): ValeurSpin 12: End Sub
Private Sub SpinButton13_Change(): ValeurSpin 13: End Sub
Private Sub SpinButton14_Change(): ValeurSpin 14: End Sub
Private Sub SpinButton15_Change(): ValeurSpin 15: End Sub
Private Sub SpinButton16_Change(): ValeurSpin 16: End Sub
Private Sub SpinButton17_Change(): ValeurSpin 17: End Sub
Private Sub SpinButton18_Change(): ValeurSpin 18: End Sub
Private Sub SpinButton19_Change(): ValeurSpin 19: End Sub
Private Sub SpinButton20_Change(): ValeurSpin 20: End Sub
Sub ValeurSpin(xn)
' modifie la valeur du xn ème CommandButton "Qte" associé au xn ème SpinButton
Me.Controls("Qte" & xn).Caption = Me.Controls("SpinButton" & xn).Value
End Sub
Sub Ajouter(x As Boolean)
' Affiche ou masque les contrôles de la partie "Quantités" (x=True on affiche, x=false on masque)
Dim i As Long
For i = 11 To 20
Controls("Intit" & i).Visible = x
Controls("Qte" & i).Visible = x
Controls("SpinButton" & i).Visible = x
Next i
lbColis2.Visible = x: txColis2.Visible = x
End Sub
Sub RAZ()
' réinitialise l'userform à ses valeurs initiales
Dim i
Me.txtblog = "": ComboBox1 = "": txColis2 = "": ListBox1.ListIndex = -1
For i = 11 To 20: Controls("SpinButton" & i).Value = 0: Next
lbColis2.Visible = False: txColis2.Visible = False
Ajouter False
End Sub- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Private Sub btajout2_Click()
' enregistrement de la demande
'................................................
col = col + 1: Cells(n, col) = txColis2
'suppression de la demande
Supp_demande
'information de l'utilisateur et RAZ du userform
MsgBox "La demande a été enregistrée."
RAZ
End SubMerci beaucoup Thev, cela fonctionne nickel
Si j'ai bien compris, c'est, en gros, databodyrange, qui fait que seule la ligne des colonnes concernées est supprimée, pas comme entirerow qui vas supprimer une ligne complète même en dehors du tableau ?
Bonne soirée :)
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Si j'ai bien compris, c'est, en gros, databodyrange, qui fait que seule la ligne des colonnes concernées est supprimée,
DataBodyRange représente la plage des cellules du tableau structuré hors les entêtes, donc uniquement les données.
Listrows(i) représente uniquement la ligne i du tableau et non la ligne entière de la feuille.
Voir mon tutoriel sur le tableau structuré : https://forum.excel-pratique.com/astuces/tableau-structure-instructions-vba-specifiques-a-cet-objet-...
Je vais aller voir cela.
Un grand merci à toi d'avoir pris du temps pour m'aider, comme tu as pu voir, j'ai encore pas mal de choses à apprendre et un gros projet à finir.
J'avance petit à petit et j'ai bien fait de prendre 3 jours de congés pour finir ce projet !!!!!
Je te souhaite une bonne soirée et au plaisir.