Selection rang dynamique

Bonjour tout le monde,

J'ai un classeur avec une requête vers une liste SharePoint intégrant régulièrement de nouvelles données dans un tableau :

tableau requete

Des macros viennent copier chacune des colonnes de données dans des feuilles respectives et réaliser des traitement dessus :

Sub SSA3()
'
' SSA3 Macro
'

'
With Sheets("SSA3").Activate

    Worksheets("Données Brutes").Range("A:B").Copy Worksheets("SSA3").Range("A1")
    Worksheets("SSA3").Range("A:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

    Worksheets("SSA3").Range("E2") = Worksheets("Données Brutes").Range("M13").Formula
    Worksheets("SSA3").Range("F2") = Worksheets("Données Brutes").Range("M14").Formula
    Worksheets("SSA3").Range("G2") = Worksheets("Données Brutes").Range("M15").Formula
    Worksheets("SSA3").Range("H2") = Worksheets("Données Brutes").Range("M16").Formula
    Worksheets("SSA3").Range("I2") = Worksheets("Données Brutes").Range("M17").Formula
    Worksheets("SSA3").Range("J2") = Worksheets("Données Brutes").Range("M18").Formula

    Worksheets("SSA3").Range("F2").Select
    Selection.AutoFill Destination:=Range("F2:F150"), Type:=xlFillDefault
    Worksheets("SSA3").Range("G2").Select
    Selection.AutoFill Destination:=Range("G2:G150"), Type:=xlFillDefault
    Worksheets("SSA3").Range("H2").Select
    Selection.AutoFill Destination:=Range("H2:H150"), Type:=xlFillDefault
    Worksheets("SSA3").Range("I2").Select
    Selection.AutoFill Destination:=Range("I2:I150"), Type:=xlFillDefault
    Worksheets("SSA3").Range("J2").Select
    Selection.AutoFill Destination:=Range("J2:J150"), Type:=xlFillDefault

    Worksheets("SSA3").Range("A:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End With

End Sub

Comment pourrais-je remplacer

Range ("F2:F150")

pour que le rang de la colonne F sélectionné soit égal à la taille de la colonne A remplie ?

Voici mon fichier :

Bonjour,

Si j'ai bien compris la demande ...

Un essai ...

Je n'ai conservé qu'une seule macro dans ThisWorkbook .

Elle sert à toutes les feuilles concernées.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Rng As String
Dim X As Integer

   If Sh.Name = "SSA3" Or Sh.Name = "SSA1" Or Sh.Name = "SSA2" Or Sh.Name = "PG1" Or Sh.Name = "SSA4" Or _
      Sh.Name = "PG2" Or Sh.Name = "PR" Or Sh.Name = "PS" Then

      If Sh.Name = "SSA3" Then Rng = "A:B"
      If Sh.Name = "SSA1" Then Rng = "A:A,C:C"
      If Sh.Name = "SSA2" Then Rng = "A:A,D:D"
      If Sh.Name = "PG1" Then Rng = "A:A,E:E"
      If Sh.Name = "PG2" Then Rng = "A:A,F:F"
      If Sh.Name = "PR" Then Rng = "A:A,G:G"
      If Sh.Name = "PS" Then Rng = "A:A,H:H"
      If Sh.Name = "SSA4" Then Rng = "A:A,I:I"

      With Sh.Activate

         Worksheets("Données Brutes").Range(Rng).Copy Sh.Range("A1")
         Sh.Range("A:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

         Sh.Range("E2") = Worksheets("Données Brutes").Range("M13").Formula
         Sh.Range("F2") = Worksheets("Données Brutes").Range("M14").Formula
         Sh.Range("G2") = Worksheets("Données Brutes").Range("M15").Formula
         Sh.Range("H2") = Worksheets("Données Brutes").Range("M16").Formula
         Sh.Range("I2") = Worksheets("Données Brutes").Range("M17").Formula
         Sh.Range("J2") = Worksheets("Données Brutes").Range("M18").Formula

         Sh.Range("F2").AutoFill Destination:=Range("F2:F" & Cells(Rows.Count, "A").End(xlUp).Row), Type:=xlFillDefault
         Sh.Range("G2").AutoFill Destination:=Range("G2:G" & Cells(Rows.Count, "A").End(xlUp).Row), Type:=xlFillDefault
         Sh.Range("H2").AutoFill Destination:=Range("H2:H" & Cells(Rows.Count, "A").End(xlUp).Row), Type:=xlFillDefault
         Sh.Range("I2").AutoFill Destination:=Range("I2:I" & Cells(Rows.Count, "A").End(xlUp).Row), Type:=xlFillDefault
         Sh.Range("J2").AutoFill Destination:=Range("J2:J" & Cells(Rows.Count, "A").End(xlUp).Row), Type:=xlFillDefault

         Sh.Range("A:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
         X = Sh.Cells(Rows.Count, "H").End(xlUp).Row - 1
         Sh.Range("H" & X + 1) = Sh.Range("H" & X).Formula
      End With
   End If
End Sub

ric

Bonjour ric,

Merci pour ta réponse, comment exécuter ta macro, quand je lance le bouton d'exécution on m'ouvre la liste de macros mais celle-là n'est pas dedans, j'ai beau lui changé de module rien n'y fait,

J'ai essayé de mettre le code dans une macro existante, résultat la macro n'existe plus,

J'ai aussi essayé d'enlever "'(ByVal Sh As Object)" et la on me renvoie une erreur "Objet requis",

Donc la question que je te pose, aussi bête que ça puisse paraître:

Comment exécuter cette macro ?

Je viens de me rendre compte que la macro s'exécutait dès que à chaque activation de feuille (comme son nom l'indique),

Mais j'aimerais quand même savoir comment la rendre "normale" et pouvoir l'utiliser avec un bouton par exemple

J'ai également une autre question, à quoi sert cette partie là :

Sh.Range("A:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
         X = Sh.Cells(Rows.Count, "H").End(xlUp).Row - 1
         Sh.Range("H" & X + 1) = Sh.Range("H" & X).Formula

Le code qu'il y a avant semble faire le boulot, qu'apporte cette partie ?

Bonjour,

Mais j'aimerais quand même savoir comment la rendre "normale" et pouvoir l'utiliser avec un bouton par exemple

J'ai replacé la macro dans le Module1 et j'ai ajouté un bouton dans la feuille Données brutes .

Concernant ...

Sh.Range("A:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
         X = Sh.Cells(Rows.Count, "H").End(xlUp).Row - 1
         Sh.Range("H" & X + 1) = Sh.Range("H" & X).Formula

J'avais une erreur de formule en colonne H sur la dernière ligne de la feuille traitée.

Ce bout de corde replaçait la formule.

C'était probablement ma machine qui était trop mêlée car maintenant, ce bout de code est inutile.

Je l'ai mis en commentaire.

ric

Rechercher des sujets similaires à "selection rang dynamique"