VBA : Utilisation variables dans un range

Bonsoir à tous,

Je cherche à utiliser une variable dans une instruction utilisant plusieurs bloc de lignes, cela fonctionne avec des références classiques

Range("A2:D57, F2:G57, P2:T57, Y2:Z57").Select

mais bloque quand j'utilise une variable dl en lieu et place de 57

Range("A2:D" & dl, "F2:G" & dl, "P2:T" & dl, "Y2:Z" & dl).Select

si plus de deux arguments, j'obtiens un message d'erreur.

image

si j'utilise Range("A2:D" & dl, "F2:G" & dl).Select, cela fonctionne.

Si quelqu'un a une astuce.

Bonne soirée, merci.

Cordialement.

Bonjour,

1015 messages et tu ne sais encore pas qu'il ne faut pas sélectionner !

Je suppose qu'il est inutile d'insister...

La syntaxe correcte :

Range("A2:D" & i & ", F2:G" & i & ", P2:T" & i & ", Y2:Z" & i).Select

A+

Re,

Merci pour la réponse, mais tu supposes mal, dans ce cas de figure indique moi comment s'en passer et je me désintoxique.

J'essaie de les supprimer, mais ce n'est pas toujours concluant.

Je te remercie pour la bonne syntaxe et suis preneur pour la simplification du code si tu est Ok.

Cordialement.

Désolé je n'avais pas vu le classeur joint donc je n'avais connaissance que du code visible...

Cependant cela ne change pas beaucoup le fondement de ma remarque : Tu utilises un tableau structuré qui par défaut formate toutes les lignes comme la première : Quel besoin as tu d'une macro de mise en forme ?

Enfin bon pourquoi pas... Mais il y aurait beaucoup à dire sur l'utilisation de ce tableau structuré.

Pour l'optimisation du code je te donne le début hein... Tu continueras...

    Application.ScreenUpdating = False
    'Mise en forme de la grille de vente
    With Range("Base_grille[#Headers]")
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With

    With Range("A2:D" & dl, "F2:G" & dl)
      .NumberFormat = "@"
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 1
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With

A noter que ce n'est qu'une des options possible. Dans certains cas, plus difficiles, l'utilisation de Set est nécessaire...

A+

re,

@galopin01,

Mais il y aurait beaucoup à dire sur l'utilisation de ce tableau structuré.

Ce tableau est le résultat d'une requête. Si tu en as le temps et la volonté, je suis preneur de tes remarques.

Cordialement

J'avais un peu compris !

Moi je supprimerai tout ce qui est valeur par défaut et ligne vides. Je ferai un truc un peu comme ça :

Sub MeF_Grille()
Dim dl As Integer
dl = [Base_grille].Rows.Count + 1
    Application.ScreenUpdating = False
    'Mise en forme de la grille de vente
    With Range("Base_grille[#Headers]")
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With
    With Range("A2:D" & dl, "F2:G" & dl)
         .NumberFormat = "@"
        .HorizontalAlignment = xlLeft
        .IndentLevel = 1
    End With
    With Range("E2:E57,W2:X57,AA2:AA57")
         .NumberFormat = "0"
        .HorizontalAlignment = xlRight
        .IndentLevel = 1
    End With
    With Range("H2:L57")
    .NumberFormat = "0.00"
        .HorizontalAlignment = xlLeft
        .IndentLevel = 1
    End With
    With Range("M2:N57")
         .NumberFormat = "#,##0 $"
        .HorizontalAlignment = xlRight
        .IndentLevel = 1
    End With
    With Range("O2:O57")
         .NumberFormat = "#,##0.00 $"
        .HorizontalAlignment = xlRight
        .IndentLevel = 1
    End With
    With Range("U2:V57")
         .NumberFormat = "m/d/yyyy"
        .HorizontalAlignment = xlCenter
    End With
    Cells.EntireColumn.AutoFit
    Range("A1").Select
    Application.ScreenUpdating = True
End Sub

A+

Bonsoir galopin01,

Merci pour la macro, j'analyse cela et je prends bonne note des conseils pour mes prochaines macros.

Bonne continuation,
Cordialement.

Rechercher des sujets similaires à "vba utilisation variables range"