Macro s'éxécutant ou pas selon l'onglet actif

  • Initiateur de la discussion Initiateur de la discussion Hawkeye56
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

H

Hawkeye56

Guest
Bonjour à tous 🙂

Je commence une macro sensée copier le résultat d'un filtre automatique situé dans l'onglet "Données" vers l'onglet "Consosite" (les 2 onglets sont dans le même classeur).

Le problème qui se pose: La macro s'exécute uniquement si l'onglet actif est "Données".

Comment faire pour qu'elle s'exécute quel que soit l'onglet actif???

Merci par avance de votre aide

Ci-joint mon fichier
 

Pièces jointes

Re : Macro s'éxécutant ou pas selon l'onglet actif

Bonjour,
comme tu demandes de copier le tableau de l'onglet "Données" et que tu détermines la dernière ligne par ....End(xlUp)....
il faut que tu dises également que c'est la dernière ligne de l'onglet "Données"

Code:
Worksheets("Données").Range("A1:L" & [COLOR="Red"]Worksheets("Données").[/COLOR]Range("A65536").End(xlUp).Row).Copy Worksheets("Consosite").Range("A1")
 
Re : Macro s'éxécutant ou pas selon l'onglet actif

Salut Bhbh,
Hawkeye56

Le code peut être également
Code:
Sub Consositeintégral()
Worksheets("Consosite").Cells.Delete
[COLOR=green][B][COLOR=blue]With[/COLOR] Worksheets("Données")[/B][/COLOR]
  [B][COLOR=green].[/COLOR][/B]Range("A1:L" & [COLOR=green][B].[/B][/COLOR]Range("A65536").End(xlUp).Row).Copy Worksheets("Consosite").Range("A1")
[B][COLOR=blue]End With[/COLOR][/B]
Worksheets("Consosite").Rows("1").EntireRow.Delete
End Sub

With, instruction
Exécute une série d'instructions appliquées à un seul objet ou à un type défini par l'utilisateur.
Syntaxe
With object
[statements]
End With

La syntaxe de l'instruction With comprend les éléments suivants :
objectNom d'un object ou d'un type défini par l'utilisateur.statementsFacultatif. Une ou plusieurs instructions dont l'exécution doit être appliquée à object.

Voilà 😀
 
Re : Macro s'éxécutant ou pas selon l'onglet actif

Bonjour BhBh, BrunoM45,

Bhbh, ta solution fonctionne 🙂

Bruno M45, j'avais déjà essayé With/Endwith sans succès:

With Worksheets("Données")
.Range("A1:L" & .Range("A65536").End(xlUp).Row).Copy Worksheets("Consosite").Range("A1")


Le terme en gras cause une erreur

Merci de votre aide🙂
 
Re : Macro s'éxécutant ou pas selon l'onglet actif

Bonsoir à tous,

J'ai crié victoire trop tôt 🙁 :
Quand je lance la macro dans son intégralité avec l'onglet "consosite" actif tout va bien. Lorsque l'onglet actif est "Données" la macro s'exécute sur cet onglet et ravage ma base de données.

J'ai pourtant bien essayé de préciser les onglets dans le code mais ça n'est pas efficace...Je vous soumets mon code:

Sub Consositeintégrale()

Workbooks("Stat-site.xls").Worksheets("Consosite").Cells.Delete
Workbooks("Stat-site.xls").Worksheets("Données").Range("A1:L" & Worksheets("Données").Range("A65536").End(xlUp).Row).Copy Worksheets("Consosite").Range("A1")


With Workbooks("Stat-site.xls").Worksheets("Consosite")
Rows("1").EntireRow.Delete
End With

'Hauteur de ligne= 20
With Workbooks("Stat-site.xls").Worksheets("Consosite")
Cells.Select
Selection.RowHeight = 20
End With

Rows("1:1").Select
'Insertion de 2 lignes
Selection.Insert Shift:=xlDown
Rows("1:1").Select
Selection.Insert Shift:=xlDown


'Collage de "D3" en "B1"
Range("D3").Copy Range("B1")
With Selection.Font
.Name = "Arial"
.Size = 24
.ColorIndex = xlAutomatic
.Bold = True
End With

'''''

'Sélection et suppression des colonnes C D E F G H I
Range("C:C,D😀,E:E,F:F,G:G,H:H,I:I").Select
Range("I1").Activate
Selection.Delete Shift:=xlToLeft

''''''''''''''''''''''''''''''''''''
'Addition et suppression des doublons
For Each Cell In Range("A1:A" & Range("A65536").End(xlUp).Row)

For i = 1 To Range("A65536").End(xlUp).Row
Set Rng = Cell.Offset(i, 0)
If Rng <> "" And Rng = Cell Then
Range("A" & Cell.Row).Select
ligne = Cell.Row
' ajout des valeurs de la colonne D lors d'une détection de doublons
Cells(ligne, 3).Value = Cells(ligne, 3).Value + Cells(ligne + i, 3).Value
' suppression de la ligne en doublons
Range(Cells(ligne + i, 1), Cells(ligne + i, 5)).Delete
'Ajouter à la liste
' sortie de la boucle
i = i - 1
End If
Next i
Next Cell
''''''''''''''''''''''''''''''''''''''''''''


'Insertion colonne B + convertion et formatage
Columns("B:B").Select
Selection.Insert Shift:=xlToRight
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 1), Array(3, 1))
Columns("B:B").Select
Selection.NumberFormat = "000"

''''''''''''''''''''''''''''''''''''''''''''
'Insertion de la ligne 1
Rows("3:3").Select
Selection.Insert Shift:=xlDown

'Copie et collage des en-têtes de colonne ligne 1
Sheets("Modèle").Range("A1:G1").Copy Sheets("Consosite").Range("A3")

'Copie et collage de la formule en F4
Sheets("Modèle").Range("F2").Copy Sheets("Consosite").Range("F4")

'Recopie de la formule contenue en "E4" jusqu'à la dernière ligne
Range("F4:F" & Range("A65536").End(xlUp).Row).FillDown


'Ajustement des colonnes B,C,D
Columns("B:B").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
Columns("D😀").EntireColumn.AutoFit

'Redimmensionne les colonnes E et F
Columns("E:E").ColumnWidth = 9#
Columns("F:F").ColumnWidth = 9#


'Alignement col A à droite et col B à gauche
Columns("A:A").Select
Range("A2").Activate
With Selection
.HorizontalAlignment = xlGeneral
End With
With Selection
.HorizontalAlignment = xlRight
End With
Columns("B:B").Select
Range("B2").Activate
With Selection
.HorizontalAlignment = xlLeft
End With

'Fusion et centrage de "A1"
Range("A1:F1").Select
With Selection
Rows("1:1").RowHeight = 60
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.MergeCells = True

Range("A1:E1").Select
With Selection.Interior
.ColorIndex = 33
.Pattern = xlSolid
End With
End With


'Mise en forme de A1 à F1
Range("A1:F1").Select
With Selection.Font
.Name = "Arial"
.ColorIndex = 2
End With

With Selection.Borders(xlEdgeLeft)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlDouble
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
With Selection.Interior
.ColorIndex = 5
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With


'Bordure colonnes A et B
Range("A4:B" & Range("A65536").End(xlUp).Row).Select

With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

'Redimensionne la colonne A
Columns("A:A").ColumnWidth = 14#

'Redimensionne la ligne 3
Rows("3:3").RowHeight = 50

'''''''''''''''''''''

'Sélectionne de A3 et F3 jusqu'à la dernière ligne non vide
Range("A3:F" & Range("A65536").End(xlUp).Row).Select


'Déclenche le sous total
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(6), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True

'Alignement vertical
Range("A4:F" & Range("A65536").End(xlUp).Row).Select
With Selection
.VerticalAlignment = xlCenter
End With

With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Font.ColorIndex = 5

End Sub
 
Re : Macro s'éxécutant ou pas selon l'onglet actif

Salut Hawkeye56,

Tu ne qualifie par correctement tes instructions !

Pour chaque action que tu exécutes, il faut soit te placer directement dans la feuille concernée.
Sheets("Consosite").Activate

Soit définir la feuille sur la quelle tu travailles dans un Object Worksheets
Dim ShtC As Worksheet
Set ShtC = Sheets("Consosite")

Ensuite tu qualifies tes actions avec l'objet "ShtC"
Exemple :
Code:
Range("C:C,D:D,E:E,F:F,G:G,H:H,I:I").Select
Range("I1").Activate
Selection.Delete Shift:=xlToLeft
Devient
Code:
ShtC.Range("I1").Activate
ShtC.Range("C:C,D:D,E:E,F:F,G:G,H:H,I:I").Delete Shift:=xlToLeft
Comme ça tu es certain que l'action Delete de Range se fait sur l'objet ShtC, donc sur la feuille "Consosite"

Il faut également éviter les 'select' qui ne sont pas nécessaires et alourdissent le déroulement de la macro.

Tu n'est pas obligé de sélectionner une feuille, une cellule, pour effectuer une action dessus.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour