Ajouter données dans dernière colonne vide

Bonjour,

je bloque sur l'ajout de données dans la dernière colonne libre.

Les données proviennent de NF_KPI's_MERCH.xlsx

9nf-kpi-s-merch.xlsx (208.18 Ko)

et vont se coller dans COURBES.xlsx à l'aide d'un recherchev

8courbes.xlsx (45.65 Ko)

Le projet est de réaliser des courbes à l'aide de données hebdomadaires.

Je sectionne la dernière cellule vide avec

[IV1].End(xlToLeft).Offset(0, 1).Select

Mais après

je ne parvient pas à sélectionner les 183 cellules en dessous pour y coller la formule

=RECHERCHEV($A1;'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!$1:$1048576;6;0)

Merci beaucoup de votre aide

Bonjour,

Voici un essai, non testé, en agissant sur la zone utilisée. Ce sera probablement à adapter ou corriger :

Sub essai()

dim nvcol as range
dim nbcol%, nblig%

with usedrange 'a adapter probablement
    nbcol = .columns.count
    nblig = .rows.count
    Set nvcol = .resize(nblig, 1).offset(0, nbcol)
end with

with nvcol
    .cells(1).formulalocal = "=RECHERCHEV($A1;'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!$1:$1048576;6;0)"
    .cells(1).autofill destination:=.cells
end with

end sub

Cdlt,

Merci 3GB pour ton aide.

cela se bloque à

    nbcol = .Columns.Count

je ne vois pas quelle modification apporter

Bonjour,

Les modifications portent sur la ligne juste au-dessus, c'est-à-dire la zone ciblée :

Sub essai()

dim nvcol as range
dim nbcol%, nblig%

with Sheets("nomdelafeuilleconcernee").usedrange '<<< remplacer le nom de la feuille par vrai nom !!!
    nbcol = .columns.count 'nombre colonnes
    nblig = .rows.count 'nombre lignes
    Set nvcol = .resize(nblig, 1).offset(0, nbcol) 'nouvelle colonne est la 1ere colonne après décalage de nbcol vers la droite
end with

with nvcol
    .cells(1).formulalocal = "=RECHERCHEV($A1;'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!$1:$1048576;6;0)" 'formule en 1e cellule de nvcol
    .cells(1).autofill destination:=.cells 'propagation formule au reste de la colonne
end with

end sub

Il faut bien définir la zone sur laquelle on travaille et, le cas échéant, la feuille sur laquelle elle se trouve. Et il faut que cette feuille ne soit remplie.

Cdlt,

ceci fonctionne... à la perfection !!!

MERCI BEAUCOUP 3GB top efficacité

Bonjour,

j'ai encore besoin d'aide.

Le projet a pour objectif de créer des courbes qui se mettent à jour automatiquement chaque semaine.

Les données de la dernière semaine viennent s'ajouter dans la première colonne vide.

La zone graphique prend en compte les colonnes de B à UI pour créer les courbes.

Une fois que j'ai ajouté la dernière semaine de données, la macro masque les colonnes vides de B à UI ainsi le graphique n'affiche aucune donnée vide.

Sauf que de temps en temps, les données viennent s'ajouter après les colonnes masquées, soit à partir de la colonne UI.

Je ne parviens pas à régler ce problème... Quelqu'un a-t-il une idée ?

Il y a peut-être une manière de créer des graphiques dynamiques qui s'adaptent automatiquement à la quantité de données présentes ?

Voici un exemple de SOURCES de donnée hebdo (NF_KPIS MERCH.xlsx) :

17nf-kpi-s-merch.xlsx (191.76 Ko)

Voici le fichier DESTINATION (Courbes.xlsx) :

10courbes.xlsx (183.33 Ko)

Voici la MACRO pour faire tout ça :

Sub COURBES_PDL()
'
' COURBES_PDL Macro
'

'
    Cells.Select
    Selection.UnMerge
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "=MID(R[-1]C,18,10)"
    Range("A3").Select
    Columns("A:A").ColumnWidth = 10
    Range("A2").Select
    Selection.Copy
    Range("D5:Q5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows("1:4").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Columns("D:E").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.NumberFormat = "General"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(ISBLANK(RC[-2]),RC[-3],(IF(ISBLANK(RC[-1]),RC[-2],RC[-1])))"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "=MID(RC[-1],1,4)"
    Range("D1:E1").Select
    Selection.Copy
    Range("D2:E300").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Columns("D:D").Select
    Application.CutCopyMode = False
    Selection.Copy
    Columns("D:E").Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("E:E").Select
    Application.CutCopyMode = False
    Selection.Cut
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Selection.ColumnWidth = 17.86
    Columns("C:C").ColumnWidth = 18.43
    Columns("D:D").ColumnWidth = 28.71
    Columns("E:E").ColumnWidth = 22.14
    ActiveWindow.ScrollColumn = 1
    Selection.Cut
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight

                    'ouvrir fichier COURBES.xlsx

        ChDir "Z:\ATELIER RESULTAT\PRESENTATION"
    Workbooks.Open Filename:="Z:\ATELIER RESULTAT\PRESENTATION\COURBES.xlsx"
    Windows("COURBES.xlsx").Activate

                    'Afficher toutes les colonnes de toutes les feuilles

With Sheets("PDLBI").Cells
.EntireColumn.Hidden = False
.EntireRow.Hidden = False
.ColumnWidth = 10
.RowHeight = 15
End With

With Sheets("PDLNDG").Cells
.EntireColumn.Hidden = False
.EntireRow.Hidden = False
.ColumnWidth = 10
.RowHeight = 15
End With

With Sheets("PDLND").Cells
.EntireColumn.Hidden = False
.EntireRow.Hidden = False
.ColumnWidth = 10
.RowHeight = 15
End With

With Sheets("PDLSSC").Cells
.EntireColumn.Hidden = False
.EntireRow.Hidden = False
.ColumnWidth = 10
.RowHeight = 15
End With

With Sheets("PDLMILKIES").Cells
.EntireColumn.Hidden = False
.EntireRow.Hidden = False
.ColumnWidth = 10
.RowHeight = 15
End With

With Sheets("PDLLAITS").Cells
.EntireColumn.Hidden = False
.EntireRow.Hidden = False
.ColumnWidth = 10
.RowHeight = 15
End With

With Sheets("PDLPUREES").Cells
.EntireColumn.Hidden = False
.EntireRow.Hidden = False
.ColumnWidth = 10
.RowHeight = 15
End With

                    'TRAVAIL SUR PDL BI

        Sheets("PDLBI").Select
        Selection.EntireColumn.Hidden = False
        Rows("1:1").Select
    Selection.AutoFilter

        ' Recherchev ajouté en cellule B1 nom secteur

    Range("B1").Select
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(RC1,'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!R1:R1048576,5,0)"
            Range("B1").Select
    Selection.Copy
    Range("B2:B184").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False

    'ajout dernières données dans dernière cellule vide dans Courbes.xls

    Windows("COURBES.xlsx").Activate
        'première cellule vide PDLBI
        Dim nvcolbi As Range
Dim nbcolbi%, nbligbi%

With Sheets("PDLBI").UsedRange '<<< remplacer le nom de la feuille par vrai nom !!!
    nbcolbi = .Columns.Count 'nombre colonnes
    nbligbi = .Rows.Count 'nombre lignes
    Set nvcolbi = .Resize(nbligbi, 1).Offset(0, nbcolbi) 'nouvelle colonne est la 1ere colonne après décalage de nbcol vers la droite
End With

With nvcolbi
    .Cells(1).FormulaLocal = "=RECHERCHEV($A1;'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!$1:$1048576;6;0)" 'formule en 1e cellule de nvcol
    .Cells(1).AutoFill Destination:=.Cells 'propagation formule au reste de la colonne
End With

    Selection.ColumnWidth = 10
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows("1:1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$C$185").AutoFilter Field:=1, Criteria1:=Array( _
        "BD00", "BD20", "BD30", "BD40", "BD50", "BD60", "BD70", "BD80", "BD90", "DV A", "DV B"), _
        Operator:=xlFilterValues
    Columns("B:B").EntireColumn.AutoFit
    Columns("B:B").ColumnWidth = 34
    Columns("B:B").Select
    Selection.ColumnWidth = 35

                                'Masquer les colonnes vides dans PDL BI

    Dim OBI As Worksheet 'déclare la variable O (Onglet)
Dim COLBI As Byte 'déclare la variable COL (COLonne)

Set OBI = Worksheets("PDLBI") 'définit l'onglet O (à adapter à ton cas)
For COLBI = 3 To 254 'boucle sur les colonne 5 à 40 (=> E à AN)
    'masque (>0) /affiche(=0) la colonne en fonction du nombre de valeurs contenues dans la colonne
    OBI.Columns(COLBI).Hidden = IIf(Application.WorksheetFunction.CountA(OBI.Columns(COLBI)) = 0, True, False)
Next COLBI 'prochaine colonne de la ligne
    Range("A1").Select

                               'TRAVAIL SUR PDL NDG

        Sheets("PDLNDG").Select
              Selection.EntireColumn.Hidden = False
        Rows("1:1").Select
    Selection.AutoFilter
        Selection.EntireColumn.Hidden = False
    Range("B1").Select
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(RC1,'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!R1:R1048576,5,0)"
            Range("B1").Select
    Selection.Copy
    Range("B2:B184").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        Dim nvcolndg As Range
Dim nbcolndg%, nbligndg%

With Sheets("PDLNDG").UsedRange '<<< remplacer le nom de la feuille par vrai nom !!!
    nbcolndg = .Columns.Count 'nombre colonnes
    nbligndg = .Rows.Count 'nombre lignes
    Set nvcolndg = .Resize(nbligndg, 1).Offset(0, nbcolndg) 'nouvelle colonne est la 1ere colonne après décalage de nbcol vers la droite
End With

With nvcolndg
    .Cells(1).FormulaLocal = "=RECHERCHEV($A1;'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!$1:$1048576;7;0)" 'formule en 1e cellule de nvcol
    .Cells(1).AutoFill Destination:=.Cells 'propagation formule au reste de la colonne
End With
    Sheets("PDLNDG").Select
    Selection.ColumnWidth = 10
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows("1:1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$C$185").AutoFilter Field:=1, Criteria1:=Array( _
        "BD00", "BD20", "BD30", "BD40", "BD50", "BD60", "BD70", "BD80", "BD90", "DV A", "DV B"), _
        Operator:=xlFilterValues
    Columns("B:B").EntireColumn.AutoFit
    Columns("B:B").ColumnWidth = 34
    Columns("B:B").Select
    Selection.ColumnWidth = 35

     'Masquer les colonnes vides dans PDL NDG

    Dim ONDG As Worksheet 'déclare la variable O (Onglet)
Dim COLNDG As Byte 'déclare la variable COL (COLonne)

Set ONDG = Worksheets("PDLNDG") 'définit l'onglet O (à adapter à ton cas)
For COLNDG = 3 To 254 'boucle sur les colonne 5 à 40 (=> E à AN)
    'masque (>0) /affiche(=0) la colonne en fonction du nombre de valeurs contenues dans la colonne
    ONDG.Columns(COLNDG).Hidden = IIf(Application.WorksheetFunction.CountA(ONDG.Columns(COLNDG)) = 0, True, False)
Next COLNDG 'prochaine colonne de la ligne

    Range("A1").Select

                               'TRAVAIL SUR PDL ND

        Sheets("PDLND").Select
              Selection.EntireColumn.Hidden = False
        Rows("1:1").Select
    Selection.AutoFilter
        Selection.EntireColumn.Hidden = False
    Range("B1").Select
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(RC1,'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!R1:R1048576,5,0)"
            Range("B1").Select
    Selection.Copy
    Range("B2:B184").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        Dim nvcolND As Range
Dim nbcolND%, nbligND%

With Sheets("PDLND").UsedRange '<<< remplacer le nom de la feuille par vrai nom !!!
    nbcolND = .Columns.Count 'nombre colonnes
    nbligND = .Rows.Count 'nombre lignes
    Set nvcolND = .Resize(nbligND, 1).Offset(0, nbcolND) 'nouvelle colonne est la 1ere colonne après décalage de nbcol vers la droite
End With

With nvcolND
    .Cells(1).FormulaLocal = "=RECHERCHEV($A1;'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!$1:$1048576;8;0)" 'formule en 1e cellule de nvcol
    .Cells(1).AutoFill Destination:=.Cells 'propagation formule au reste de la colonne
End With
    Sheets("PDLND").Select
    Selection.ColumnWidth = 10
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows("1:1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$C$185").AutoFilter Field:=1, Criteria1:=Array( _
        "BD00", "BD20", "BD30", "BD40", "BD50", "BD60", "BD70", "BD80", "BD90", "DV A", "DV B"), _
        Operator:=xlFilterValues
    Columns("B:B").EntireColumn.AutoFit
    Columns("B:B").ColumnWidth = 34
    Columns("B:B").Select
    Selection.ColumnWidth = 35

     'Masquer les colonnes vides dans PDL ND

    Dim OND As Worksheet 'déclare la variable O (Onglet)
Dim COLND As Byte 'déclare la variable COL (COLonne)

Set OND = Worksheets("PDLND") 'définit l'onglet O (à adapter à ton cas)
For COLND = 3 To 254 'boucle sur les colonne 5 à 40 (=> E à AN)
    'masque (>0) /affiche(=0) la colonne en fonction du nombre de valeurs contenues dans la colonne
    OND.Columns(COLND).Hidden = IIf(Application.WorksheetFunction.CountA(OND.Columns(COLND)) = 0, True, False)
Next COLND 'prochaine colonne de la ligne

    Range("A1").Select

                               'TRAVAIL SUR PDL SSC

        Sheets("PDLSSC").Select
              Selection.EntireColumn.Hidden = False
        Rows("1:1").Select
    Selection.AutoFilter
        Selection.EntireColumn.Hidden = False
    Range("B1").Select
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(RC1,'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!R1:R1048576,5,0)"
            Range("B1").Select
    Selection.Copy
    Range("B2:B184").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        Dim nvcolSSC As Range
Dim nbcolSSC%, nbligSSC%

With Sheets("PDLSSC").UsedRange '<<< remplacer le nom de la feuille par vrai nom !!!
    nbcolSSC = .Columns.Count 'nombre colonnes
    nbligSSC = .Rows.Count 'nombre lignes
    Set nvcolSSC = .Resize(nbligSSC, 1).Offset(0, nbcolSSC) 'nouvelle colonne est la 1ere colonne après décalage de nbcol vers la droite
End With

With nvcolSSC
    .Cells(1).FormulaLocal = "=RECHERCHEV($A1;'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!$1:$1048576;11;0)" 'formule en 1e cellule de nvcol
    .Cells(1).AutoFill Destination:=.Cells 'propagation formule au reste de la colonne
End With
    Sheets("PDLSSC").Select
    Selection.ColumnWidth = 10
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows("1:1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$C$185").AutoFilter Field:=1, Criteria1:=Array( _
        "BD00", "BD20", "BD30", "BD40", "BD50", "BD60", "BD70", "BD80", "BD90", "DV A", "DV B"), _
        Operator:=xlFilterValues
    Columns("B:B").EntireColumn.AutoFit
    Columns("B:B").ColumnWidth = 34
    Columns("B:B").Select
    Selection.ColumnWidth = 35

     'Masquer les colonnes vides dans PDL SSC

    Dim OSSC As Worksheet 'déclare la variable O (Onglet)
Dim COLSSC As Byte 'déclare la variable COL (COLonne)

Set OSSC = Worksheets("PDLSSC") 'définit l'onglet O (à adapter à ton cas)
For COLSSC = 3 To 254 'boucle sur les colonne 5 à 40 (=> E à AN)
    'masque (>0) /affiche(=0) la colonne en fonction du nombre de valeurs contenues dans la colonne
    OSSC.Columns(COLSSC).Hidden = IIf(Application.WorksheetFunction.CountA(OSSC.Columns(COLSSC)) = 0, True, False)
Next COLSSC 'prochaine colonne de la ligne

    Range("A1").Select

                               'TRAVAIL SUR PDL MILKIES

        Sheets("PDLMILKIES").Select
              Selection.EntireColumn.Hidden = False
        Rows("1:1").Select
    Selection.AutoFilter
        Selection.EntireColumn.Hidden = False
    Range("B1").Select
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(RC1,'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!R1:R1048576,5,0)"
            Range("B1").Select
    Selection.Copy
    Range("B2:B184").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        Dim nvcolMILKIES As Range
Dim nbcolMILKIES%, nbligMILKIES%

With Sheets("PDLMILKIES").UsedRange '<<< remplacer le nom de la feuille par vrai nom !!!
    nbcolMILKIES = .Columns.Count 'nombre colonnes
    nbligMILKIES = .Rows.Count 'nombre lignes
    Set nvcolMILKIES = .Resize(nbligMILKIES, 1).Offset(0, nbcolMILKIES) 'nouvelle colonne est la 1ere colonne après décalage de nbcol vers la droite
End With

With nvcolMILKIES
    .Cells(1).FormulaLocal = "=RECHERCHEV($A1;'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!$1:$1048576;10;0)" 'formule en 1e cellule de nvcol
    .Cells(1).AutoFill Destination:=.Cells 'propagation formule au reste de la colonne
End With
    Sheets("PDLMILKIES").Select
    Selection.ColumnWidth = 10
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows("1:1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$C$185").AutoFilter Field:=1, Criteria1:=Array( _
        "BD00", "BD20", "BD30", "BD40", "BD50", "BD60", "BD70", "BD80", "BD90", "DV A", "DV B"), _
        Operator:=xlFilterValues
    Columns("B:B").EntireColumn.AutoFit
    Columns("B:B").ColumnWidth = 34
    Columns("B:B").Select
    Selection.ColumnWidth = 35

     'Masquer les colonnes vides dans PDL MILKIES

    Dim OMILKIES As Worksheet 'déclare la variable O (Onglet)
Dim COLMILKIES As Byte 'déclare la variable COL (COLonne)

Set OMILKIES = Worksheets("PDLMILKIES") 'définit l'onglet O (à adapter à ton cas)
For COLMILKIES = 3 To 254 'boucle sur les colonne 5 à 40 (=> E à AN)
    'masque (>0) /affiche(=0) la colonne en fonction du nombre de valeurs contenues dans la colonne
    OMILKIES.Columns(COLMILKIES).Hidden = IIf(Application.WorksheetFunction.CountA(OMILKIES.Columns(COLMILKIES)) = 0, True, False)
Next COLMILKIES 'prochaine colonne de la ligne

    Range("A1").Select

  'TRAVAIL SUR PDL LAITS

        Sheets("PDLLAITS").Select
              Selection.EntireColumn.Hidden = False
        Rows("1:1").Select
    Selection.AutoFilter
        Selection.EntireColumn.Hidden = False
    Range("B1").Select
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(RC1,'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!R1:R1048576,5,0)"
            Range("B1").Select
    Selection.Copy
    Range("B2:B184").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        Dim nvcolLAITS As Range
Dim nbcolLAITS%, nbligLAITS%

With Sheets("PDLLAITS").UsedRange '<<< remplacer le nom de la feuille par vrai nom !!!
    nbcolLAITS = .Columns.Count 'nombre colonnes
    nbligLAITS = .Rows.Count 'nombre lignes
    Set nvcolLAITS = .Resize(nbligLAITS, 1).Offset(0, nbcolLAITS) 'nouvelle colonne est la 1ere colonne après décalage de nbcol vers la droite
End With

With nvcolLAITS
    .Cells(1).FormulaLocal = "=RECHERCHEV($A1;'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!$1:$1048576;9;0)" 'formule en 1e cellule de nvcol
    .Cells(1).AutoFill Destination:=.Cells 'propagation formule au reste de la colonne
End With
    Sheets("PDLLAITS").Select
    Selection.ColumnWidth = 10
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows("1:1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$C$185").AutoFilter Field:=1, Criteria1:=Array( _
        "BD00", "BD20", "BD30", "BD40", "BD50", "BD60", "BD70", "BD80", "BD90", "DV A", "DV B"), _
        Operator:=xlFilterValues
    Columns("B:B").EntireColumn.AutoFit
    Columns("B:B").ColumnWidth = 34
    Columns("B:B").Select
    Selection.ColumnWidth = 35

     'Masquer les colonnes vides dans PDL LAITS

    Dim OLAITS As Worksheet 'déclare la variable O (Onglet)
Dim COLLAITS As Byte 'déclare la variable COL (COLonne)

Set OLAITS = Worksheets("PDLLAITS") 'définit l'onglet O (à adapter à ton cas)
For COLLAITS = 3 To 254 'boucle sur les colonne 5 à 40 (=> E à AN)
    'masque (>0) /affiche(=0) la colonne en fonction du nombre de valeurs contenues dans la colonne
    OLAITS.Columns(COLLAITS).Hidden = IIf(Application.WorksheetFunction.CountA(OLAITS.Columns(COLLAITS)) = 0, True, False)
Next COLLAITS 'prochaine colonne de la ligne

    Range("A1").Select

                               'TRAVAIL SUR PDL PUREES

        Sheets("PDLPUREES").Select
              Selection.EntireColumn.Hidden = False
        Rows("1:1").Select
    Selection.AutoFilter
        Selection.EntireColumn.Hidden = False
    Range("B1").Select
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(RC1,'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!R1:R1048576,5,0)"
            Range("B1").Select
    Selection.Copy
    Range("B2:B184").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        Dim nvcolPUREES As Range
Dim nbcolPUREES%, nbligPUREES%

With Sheets("PDLPUREES").UsedRange '<<< remplacer le nom de la feuille par vrai nom !!!
    nbcolPUREES = .Columns.Count 'nombre colonnes
    nbligPUREES = .Rows.Count 'nombre lignes
    Set nvcolPUREES = .Resize(nbligPUREES, 1).Offset(0, nbcolPUREES) 'nouvelle colonne est la 1ere colonne après décalage de nbcol vers la droite
End With

With nvcolPUREES
    .Cells(1).FormulaLocal = "=RECHERCHEV($A1;'[NF_KPI''s_MERCH.xlsx]KPIs MERCH'!$1:$1048576;12;0)" 'formule en 1e cellule de nvcol
    .Cells(1).AutoFill Destination:=.Cells 'propagation formule au reste de la colonne
End With
    Sheets("PDLPUREES").Select
    Selection.ColumnWidth = 10
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows("1:1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$C$185").AutoFilter Field:=1, Criteria1:=Array( _
        "BD00", "BD20", "BD30", "BD40", "BD50", "BD60", "BD70", "BD80", "BD90", "DV A", "DV B"), _
        Operator:=xlFilterValues
    Columns("B:B").EntireColumn.AutoFit
    Columns("B:B").ColumnWidth = 34
    Columns("B:B").Select
    Selection.ColumnWidth = 35

     'Masquer les colonnes vides dans PDL PUREES

    Dim OPUREES As Worksheet 'déclare la variable O (Onglet)
Dim COLPUREES As Byte 'déclare la variable COL (COLonne)

Set OPUREES = Worksheets("PDLPUREES") 'définit l'onglet O (à adapter à ton cas)
For COLPUREES = 3 To 254 'boucle sur les colonne 5 à 40 (=> E à AN)
    'masque (>0) /affiche(=0) la colonne en fonction du nombre de valeurs contenues dans la colonne
    OPUREES.Columns(COLPUREES).Hidden = IIf(Application.WorksheetFunction.CountA(OPUREES.Columns(COLPUREES)) = 0, True, False)
Next COLPUREES 'prochaine colonne de la ligne

    Range("A1").Select

ActiveWorkbook.Save
ActiveWorkbook.Close

End Sub

Honnêtement, il y a plusieurs centaines de lignes à l'enregistreur de macro donc je ne préfère pas commencer à regarder le code !

Pour les graphiques, oui je pense qu'en ayant des tableaux structurés, ce serait un bon début. Ainsi, vous auriez en source le tableau structuré et donc une référence dynamique.

Bon courage en tout cas,

Rechercher des sujets similaires à "ajouter donnees derniere colonne vide"