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 Sub

et 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 Sub

Voilà, 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?

Rechercher des sujets similaires à "mettre jour bdd feuilles liees"