Mettre à jour une BDD et des feuilles liées
Bonjour,
J'ai une BDD (feuille PROGRAMME). De cette feuille, j'ai fait une macro pour la trier en fonction de la colonne 7 et qui crée une feuille à chaque valeur de la colonne 7 (1,2,3,4 etc jusqu'à 12) avec devant le nom "DLV" + une dernière feuille avec un tri sur la colonne 28 et la valeur PAROI DEFORMABLE. J'ai également une macro sur la feuille PROGRAMME qui me permet de mettre à jour mes feuilles créées à chaque modif de ma BDD.
Tout fonctionne à merveille sauf quand je rajoute une ligne à ma BDD, rien ne se passe.
Voici mon code:
Sub dlv(nomfeuille As String, col As Integer, critere As String)
Dim wsdlv As Worksheet
Dim wsprog As Worksheet
Dim ws As Worksheet
Dim creation As Boolean
creation = True
For Each ws In Sheets
If ws.Name = nomfeuille Then
Set wsdlv = ws
wsdlv.Cells.Clear
creation = False
Exit For
End If
Next ws
If creation Then
Set wsdlv = Sheets.Add(After:=Sheets(Sheets.Count))
wsdlv.Name = nomfeuille
End If
Set wsprog = ActiveWorkbook.Worksheets("PROGRAMME")
wsprog.Range("$A$1:$CI$385").AutoFilter Field:=col, Criteria1:=critere
wsprog.AutoFilter.Sort.SortFields.Clear
wsprog.AutoFilter.Sort.SortFields.Add Key:= _
wsprog.Range("B1:B385"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With wsprog.AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
wsprog.Range("A1:CF383").Copy wsdlv.Range("A1")
Application.CutCopyMode = False
wsprog.Range("$A$1:$CI$385").AutoFilter Field:=col
End Sub
Sub TriDLV()
Const sdlv As String = "DLV"
Call dlv(sdlv & "1", 7, "1")
Call dlv(sdlv & "2", 7, "2")
Call dlv(sdlv & "3", 7, "3")
Call dlv(sdlv & "4", 7, "4")
Call dlv(sdlv & "5", 7, "5")
Call dlv(sdlv & "6", 7, "6")
Call dlv(sdlv & "7", 7, "7")
Call dlv(sdlv & "8", 7, "8")
Call dlv(sdlv & "9", 7, "9")
Call dlv(sdlv & "10", 7, "10")
Call dlv(sdlv & "11", 7, "11")
Call dlv(sdlv & "12", 7, "12")
Call dlv("PAROIS_DEFORMABLES", 28, "PAROIS_DEFORMABLES")
End Subet le code maj
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("$A$1:$CI$385")) Is Nothing Then
Call TriDLV()
End If
End SubVoilà, voilà… si quelqu'un a une idée
moi j'avais pensé modifier la déclaration de la plage avec LBound/Ubound
Dim n As Long
Dim RefPos As Long
For n = Lbound(BDD) To Ubound(BDD)
RefPos = n Bonjour,
Si tu as déjà 385 lignes de remplies, la 386 ème ne peut être prise en compte au vu de ton code
il faudrait designer la dernière ligne non vide et l'intégrer dans tes diverses plages
Bonjour M12,
Merci de ta réponse, je ne sais pas le formuler dans mon code, une aide peut-être?