Bonjour à tous,
Dans le cadre de mon travail, j'ai réalisé un fichier Excel qui contient de la matière en stock. J'ai réalisé plusieurs macros permettant d'insérer, de rechercher des éléments dans la base de données..
Le problème que je rencontre est sur la macro de "changement de feuille", lancé par le bouton "passage de stock à utiliser".
J'applique un filtre, pour ensuite copier ou couper la ligne qui ressort via le filtre. Or lors de l'opération de copier/coller, la ligne copier n'est pas celle du filtre actif mais la première ligne de la base de données sans les filtres. Je ne sais pas si je suis très clair.
Voici la macro en question.
Sub Changement_fiche()
Dim L As Integer
Sheets("Stock").Select
Lot = InputBox("Quel est le lot souhaité? ", "Saisie lot")
Sheets("Stock").Select
Range("Tableau4[[#Headers],[Numéro de lot]]").Select
ActiveSheet.ListObjects("Tableau4").Range.AutoFilter Field:=1, Criteria1:=Lot
d = [Subtotal(3, A:A)]
If d > 2 Then
Lon = InputBox("Quel est la longueur souhaité? ", "Saisie longueur")
Range("Tableau4[[#Headers],[Longueur (mm)]]").Select
ActiveSheet.ListObjects("Tableau4").Range.AutoFilter Field:=2, Criteria1:=Lon
d = [Subtotal(3, A:A)]
If d > 2 Then
Lar = InputBox("Quel est la largeur souhaité? ", "Saisie largeur")
Range("Tableau4[[#Headers],[Largeur (mm)]]").Select
ActiveSheet.ListObjects("Tableau4").Range.AutoFilter Field:=3, Criteria1:=Lar
d = [Subtotal(3, A:A)]
If d > 2 Then
Ep = InputBox("Quel est l'épaisseur souhaité? ", "Saisie épaisseur")
Range("Tableau4[[#Headers],[Epaisseur (mm)]]").Select
ActiveSheet.ListObjects("Tableau4").Range.AutoFilter Field:=4, Criteria1:=Ep
d = [Subtotal(3, A:A)]
If d <> 2 Then
Spec = InputBox("Quel est la spec souhaité? ", "Saisie spec")
Range("Tableau4[[#Headers],[Spec]]").Select
ActiveSheet.ListObjects("Tableau4").Range.AutoFilter Field:=5, Criteria1:=Spec
d = [Subtotal(3, A:A)]
End If
End If
End If
End If
If d = 1 Then
Call MsgBox("Il n'y a pas de matière sous ces données", Erreur)
ActiveSheet.ShowAllData
Exit Sub
End If
If Sheets("Stock").Range("F" & 2).Value = "Tole" Then
Sheets("Utilisé").Rows(2).Insert
Sheets("Stock").Range("A2:M2").Cut Sheets("Utilisé").Range("A2:L2")
Sheets("Stock").Select
Sheets("Stock").Rows(2).Delete
Range("Tableau4[#Headers]").Select
ActiveSheet.ShowAllData
Else
L = InputBox("Quel est le nombre de lopins à usiner ?", "Saisie lopins")
If L > Sheets("Stock").Range("G2").Value Then
Call MsgBox("Il n'y a pas autant de lopins disponible")
Sheets("Stock").Select
Range("Tableau4[#Headers]").Select
ActiveSheet.ShowAllData
ElseIf L = Sheets("Stock").Range("G2").Value Then
Sheets("Utilisé").Rows(2).Insert
Sheets("Stock").Range("A2:M2").Cut Sheets("Utilisé").Range("A2:L2")
Sheets("Stock").Select
Sheets("Stock").Rows(2).Delete
Range("Tableau4[#Headers]").Select
ActiveSheet.ShowAllData
Else
Sheets("Utilisé").Rows(2).Insert
Sheets("Stock").Range("A2:M2").Copy Sheets("Utilisé").Range("A2:L2")
Sheets("Utilisé").Range("G2") = L
Sheets("Stock").Select
Sheets("Stock").Range("G2") = Sheets("Stock").Range("G2") - L
Sheets("Utilisé").Range("L2") = L * Sheets("Utilisé").Range("J2").Value
Sheets("Utilisé").Range("M2") = L * Sheets("Utilisé").Range("K2").Value
Sheets("Stock").Range("L2") = Sheets("Stock").Range("G2") * Sheets("Stock").Range("J2").Value
Sheets("Stock").Range("M2") = Sheets("Stock").Range("G2") * Sheets("Stock").Range("K2").Value
Range("Tableau4[#Headers]").Select
ActiveSheet.ShowAllData
End If
End If
Dim DateSheet
DateSheet = InputBox("Quel est le jour de l'utilisation de cette matière ?", Date)
Sheets("Utilisé").Select
Range("N2").Select
ActiveCell.FormulaR1C1 = DateSheet
Call Somme_Stock
Call Somme_Utilisé
Sheets("Utilisé").Select
d = Cells(Rows.Count, 1).End(xlUp).Row
Rows("2:" & d).Font.Color = RGB(0, 0, 0)
Rows("2:" & d).Font.Bold = False
End Sub
Merci à vous pour votre aide futur
Dans le cadre de mon travail, j'ai réalisé un fichier Excel qui contient de la matière en stock. J'ai réalisé plusieurs macros permettant d'insérer, de rechercher des éléments dans la base de données..
Le problème que je rencontre est sur la macro de "changement de feuille", lancé par le bouton "passage de stock à utiliser".
J'applique un filtre, pour ensuite copier ou couper la ligne qui ressort via le filtre. Or lors de l'opération de copier/coller, la ligne copier n'est pas celle du filtre actif mais la première ligne de la base de données sans les filtres. Je ne sais pas si je suis très clair.
Voici la macro en question.
Sub Changement_fiche()
Dim L As Integer
Sheets("Stock").Select
Lot = InputBox("Quel est le lot souhaité? ", "Saisie lot")
Sheets("Stock").Select
Range("Tableau4[[#Headers],[Numéro de lot]]").Select
ActiveSheet.ListObjects("Tableau4").Range.AutoFilter Field:=1, Criteria1:=Lot
d = [Subtotal(3, A:A)]
If d > 2 Then
Lon = InputBox("Quel est la longueur souhaité? ", "Saisie longueur")
Range("Tableau4[[#Headers],[Longueur (mm)]]").Select
ActiveSheet.ListObjects("Tableau4").Range.AutoFilter Field:=2, Criteria1:=Lon
d = [Subtotal(3, A:A)]
If d > 2 Then
Lar = InputBox("Quel est la largeur souhaité? ", "Saisie largeur")
Range("Tableau4[[#Headers],[Largeur (mm)]]").Select
ActiveSheet.ListObjects("Tableau4").Range.AutoFilter Field:=3, Criteria1:=Lar
d = [Subtotal(3, A:A)]
If d > 2 Then
Ep = InputBox("Quel est l'épaisseur souhaité? ", "Saisie épaisseur")
Range("Tableau4[[#Headers],[Epaisseur (mm)]]").Select
ActiveSheet.ListObjects("Tableau4").Range.AutoFilter Field:=4, Criteria1:=Ep
d = [Subtotal(3, A:A)]
If d <> 2 Then
Spec = InputBox("Quel est la spec souhaité? ", "Saisie spec")
Range("Tableau4[[#Headers],[Spec]]").Select
ActiveSheet.ListObjects("Tableau4").Range.AutoFilter Field:=5, Criteria1:=Spec
d = [Subtotal(3, A:A)]
End If
End If
End If
End If
If d = 1 Then
Call MsgBox("Il n'y a pas de matière sous ces données", Erreur)
ActiveSheet.ShowAllData
Exit Sub
End If
If Sheets("Stock").Range("F" & 2).Value = "Tole" Then
Sheets("Utilisé").Rows(2).Insert
Sheets("Stock").Range("A2:M2").Cut Sheets("Utilisé").Range("A2:L2")
Sheets("Stock").Select
Sheets("Stock").Rows(2).Delete
Range("Tableau4[#Headers]").Select
ActiveSheet.ShowAllData
Else
L = InputBox("Quel est le nombre de lopins à usiner ?", "Saisie lopins")
If L > Sheets("Stock").Range("G2").Value Then
Call MsgBox("Il n'y a pas autant de lopins disponible")
Sheets("Stock").Select
Range("Tableau4[#Headers]").Select
ActiveSheet.ShowAllData
ElseIf L = Sheets("Stock").Range("G2").Value Then
Sheets("Utilisé").Rows(2).Insert
Sheets("Stock").Range("A2:M2").Cut Sheets("Utilisé").Range("A2:L2")
Sheets("Stock").Select
Sheets("Stock").Rows(2).Delete
Range("Tableau4[#Headers]").Select
ActiveSheet.ShowAllData
Else
Sheets("Utilisé").Rows(2).Insert
Sheets("Stock").Range("A2:M2").Copy Sheets("Utilisé").Range("A2:L2")
Sheets("Utilisé").Range("G2") = L
Sheets("Stock").Select
Sheets("Stock").Range("G2") = Sheets("Stock").Range("G2") - L
Sheets("Utilisé").Range("L2") = L * Sheets("Utilisé").Range("J2").Value
Sheets("Utilisé").Range("M2") = L * Sheets("Utilisé").Range("K2").Value
Sheets("Stock").Range("L2") = Sheets("Stock").Range("G2") * Sheets("Stock").Range("J2").Value
Sheets("Stock").Range("M2") = Sheets("Stock").Range("G2") * Sheets("Stock").Range("K2").Value
Range("Tableau4[#Headers]").Select
ActiveSheet.ShowAllData
End If
End If
Dim DateSheet
DateSheet = InputBox("Quel est le jour de l'utilisation de cette matière ?", Date)
Sheets("Utilisé").Select
Range("N2").Select
ActiveCell.FormulaR1C1 = DateSheet
Call Somme_Stock
Call Somme_Utilisé
Sheets("Utilisé").Select
d = Cells(Rows.Count, 1).End(xlUp).Row
Rows("2:" & d).Font.Color = RGB(0, 0, 0)
Rows("2:" & d).Font.Bold = False
End Sub
Merci à vous pour votre aide futur