Nommer les colonnes avec VBA
Bonjour à tous,
Je crée ce sujet pour discuter d'un fichier Excel que j'utilise pour automatiser le calcul du chiffre d'affaires pour une entreprise. Actuellement, mon code fonctionne correctement et répond à mes besoins en termes de calculs.
Cependant, en voulant ajouter des colonnes pour inclure davantage de variables, je me suis rendu compte que je devais ajuster mon code et le réécrire pour chaque dossier. Existe-t-il une solution pour contourner ce problème lorsque j'ajoute des colonnes au milieu et être certain que le code va sélectionner la bonne ligne et la bonne colonne pour mes calculs ?
Ci-dessous, vous trouverez une partie de mon code VBA.
Merci d'avance.
Sub calcul_916()
Dim lastRow As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("DATA_916")
ws.Activate
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).row
If lastRow < 8 Then Exit Sub
ws.Range("W8:W" & lastRow).Value = ws.Range("D8:D" & lastRow).Value
ws.Range("X8:X" & lastRow).Formula = "=VLOOKUP(C8, PARAMETRES!$L$8:$O$16, 2, FALSE)"
ws.Range("Y8:Y" & lastRow).Formula = "=VLOOKUP(C8, PARAMETRES!$L$8:$O$16, 4, FALSE)"
ws.Range("Z8:Z" & lastRow).Formula = "=IF(Y8<>" & ws.Cells(4, "Y").Address & ", 0, 1)"
ws.Range("AA8:AA" & lastRow).Formula = "=IF(Y8<>" & ws.Cells(4, "Y").Address & ", 0, 1/COUNTIF($B$8:$B$" & lastRow & ", B8))"
ws.Range("W8").Select
ws.Range(Selection, Selection.End(xlToRight)).Select
ws.Range(Selection, Selection.End(xlDown)).Select
ws.Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ws.Range("A8:O8").Select
ws.Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Call filtrer_916
End SubBonjour,
La conversion de votre tableau de données en tableau structuré (TS) devrait résoudre votre problème car au lieu d'utiliser des adresses de colonne vous pourriez utiliser le nom des colonnes y compris dans les formules si vous avez une version d'Excel supérieure (je crois) à 2010. Sur le site, il y a plein d'infos sur les tableaux structurés, entre autres https://www.excel-pratique.com/fr/astuces/tableau-structure
Je vous conseillerai aussi pour les données "PARAMETRES!$L$8:$O$16" d'utiliser un tableau structuré (dans ce cas vous utilisez directement le nom du tableau) soit à minima de nommer la plage. Dans les 2 cas, cela vous éviterait une modification du code si ces données évolues.
Cdlt,
Cylfo