Ne pas afficher les éléments sélectionnés lors d'une MACRO

Bonjour,

J'ai plusieurs macros qui effectuent des sélections grâce à la méthode Range("X:X").Select afin de mettre en forme ou copier des données de façon automatique.

Lors de l'exécution des macros, l'utilisateur voit toutes ces sélections ainsi :

191215124306848508

Est-il possible de "masquer" ces zones qui sont sélectionnées lors de l’exécution de mes macros ?

Un exemple d'une procédure où l'on voit les sélections :

Sub Macro1()
        Range("E5:J5,L5:P5").Select

        With Selection
            .Borders(xlEdgeLeft).LineStyle = xlContinuous
            .Borders(xlEdgeTop).LineStyle = xlContinuous
            .Borders(xlEdgeBottom).LineStyle = xlContinuous
            .Borders(xlEdgeRight).LineStyle = xlContinuous
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = True
            .Name = "Arial"
        End With

        With Selection.Font
            .Name = "Arial"
            .Size = 12
            .Bold = False
            .ColorIndex = xlAutomatic
        End With

        With Selection.Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
End Sub

Sub Macro2()
    With Feuil1

        Set zone = .Range(.Cells(5, 1), .Cells(.Cells(.UsedRange.Count, 1).End(xlUp).Row, 16))

        zone.Select
          With Selection.Font
            .Name = "Arial"
            .Size = 12
            .Bold = False
            .ColorIndex = xlAutomatic
          End With

          With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = True
            .ReadingOrder = xlContext
          End With
        End With

End Sub

Merci par avance pour votre aide

Bapt"

Bonjour,

Il n'est nullement besoin de sélectionner quoi que ce soit dans ce cas,

c'est déconseillé en général et quasiment jamais nécessaire.

Autrement dit, l'utilisation de .Select est à bannir dans 99,9% des cas

Option Explicit
Sub Macro1()
Dim r As Range
    Set r = Worksheets("Feuil1").Range("E5:J5,L5:P5")
    With r
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = True
        .Name = "Arial"
        With .Font
            .Name = "Arial"
            .Size = 12
            .Bold = False
            .ColorIndex = xlAutomatic
        End With
        With .Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    End With
End Sub
Sub Macro2()
Dim r As Range
    With Worksheets("Feuil1")
      Set r = .Range(.Cells(5, 1), .Cells(.Cells(.UsedRange.Count, 1).End(xlUp).Row, 16))
    End With
    With r
        With .Font
            .Name = "Arial"
            .Size = 12
            .Bold = False
            .ColorIndex = xlAutomatic
        End With
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = True
        .ReadingOrder = xlContext
    End With
End Sub

Bonjour Patrice33740,

Merci pour ton aide.

Dans le cas d'un "copier/coller" comme le code ci-dessous, il y a également une parade ?

    Feuil1.Select
        Range("C3").Select
        Selection.Copy
            Feuil1.Select
            Range("E5").Select
    ActiveSheet.Paste

Oui (et j'évite d'utiliser le codename) :

  With Worksheets("Feuil1")
     .Range("C3").Copy Destination:=.Range("E5")
  End With

Merci beaucoup ! Je vais mettre à jour mon fichier avec tes lumières

Pour mon information personnelle, pourquoi tu ne préfères pas utiliser les codename ?

De mon côté j'utilise ce codename de peur que le nom des feuilles de classeur soient un jour modifiée et que le VBA ne fonctionne plus ...

Bapt"

Re,

De mon côté j'utilise ce codename de peur que le nom des feuilles de classeur soient un jour modifiée et que le VBA ne fonctionne plus ...

C'est pas garanti à 100%, je préfère que VBA plante plutôt qu'il s'applique à la mauvaise feuille. Il est plus simple de maitriser les noms que les codenames

D'accord je comprends ta point de vue

Merci encore de ton aide, je passe en résolu.

Baptiste

Bonjour,

On utilise les "codename" précisément pour que ça ne plante jamais même si pour un raison le nom de feuille a été modifié !

A+

Bonjour,

On utilise les "codename" précisément pour que ça ne plante jamais même si pour un raison le nom de feuille a été modifié !

A+

Comme j'ai dis, c'est pas une garantie à 100%, en particulier lorsqu'on supprime/ajoute des feuilles.

Essaies :

  • Dans un fichier avec plusieurs feuilles, supprimes Feuil1 / Enregistres / Fermes Excel
  • Ouvres le fichier / Ajoutes une nouvelle feuille : son codeName est Feuil1 !

Bien sur mais tu pourrais en dire autant si tu n'utilises pas les codename. C'est encore pire car dans ce cas ça ne pas marche pas non plus si tu renommes la feuille...

De plus en général les gens qui utilisent les codename sont rarement des débutants d'une part ils se prémunissent contre la suppression et d'autre part ils modifient le codename (en général pour utiliser des noms plus adaptés...)

A+

ils se prémunissent contre la suppression ...

Je ne parle pas d'accident mais de suppressions/ajouts normaux par code.

Rechercher des sujets similaires à "pas afficher elements selectionnes lors macro"