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 :
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