Macro qui ne fonctionne que sur l'onglet concerné
Bonjour à tous,
Débutante en macro, je rencontre un soucis.
J'ai écrit 4 macros afin de récupérer des données et de les combiner dans un seul et même onglet.
Toutes les macros écrites de façon indépendantes fonctionnent mais je dois obligatoirement être positionnée sur l'onglet concerné par la macro.
Cela est bloquant car je souhaiterai combiner les 4 macros afin d'ajouter un bouton de MAJ global
Voici, ci-dessous l'une des macros. La variable WS ne doit pas être correcte ? lorsque je la lance sur un autre onglet, il y a un blocage au niveau de la ligne que j'ai identifiée en gras
Dim ws As Worksheet
Dim DerniereLigne As Long
Dim DerniereColonne As Long
Dim Destination As Worksheet
Dim PlageDestination As Range
' Définir la feuille active
Set ws = ThisWorkbook.Worksheets("TCD CDI.CDD")
' Trouver la dernière ligne et la dernière colonne avec des données
DerniereLigne = ws.Cells(ws.Rows.Count, "R").End(xlUp).Row
DerniereColonne = ws.Cells(6, ws.Columns.Count).End(xlToLeft).Column
' Sélectionner le tableau entier à partir de la ligne 3 et colonne R
ws.Range(ws.Cells(6, "R"), ws.Cells(DerniereLigne, DerniereColonne)).Select
Selection.Copy
Set Destination = ThisWorkbook.Sheets("Masse salariale B26")
Set PlageDestination = Destination.Range("A130").End(xlUp).Offset(1, 0)
PlageDestination.PasteSpecial Paste:=xlPasteValues
PlageDestination.PasteSpecial Paste:=xlPasteFormats
'Désactiver le mode "copier" (optionnel)
Application.CutCopyMode = False
je vous remercie par avance pour votre aide,
très bonne journée à tous,
Bonjour,
Vous avez bien identifié le problème, et à vrai dire votre code "devrait" fonctionner. C'est juste que "Selection" (notre hantise) ne fonctionne que sur la feuille active. Donc même si vous avez écrit ws.Range… et bien l'utilisation de .Select à la fin force l'utilisation de la feuille active au lieu de ws.
Heureusement, la solution est simple : ne pas utiliser .Select! On peut copier directement :
Sub CopierDonneesAvecCopy()
Dim ws As Worksheet
Dim DerniereLigne As Long
Dim DerniereColonne As Long
Dim Destination As Worksheet
Dim PlageSource As Range
Dim PlageDestination As Range
' Définir la feuille source
Set ws = ThisWorkbook.Worksheets("TCD CDI.CDD")
' Trouver la dernière ligne et la dernière colonne avec des données
DerniereLigne = ws.Cells(ws.Rows.Count, "R").End(xlUp).Row
DerniereColonne = ws.Cells(6, ws.Columns.Count).End(xlToLeft).Column
' Définir la plage source sans la sélectionner
Set PlageSource = ws.Range(ws.Cells(6, "R"), ws.Cells(DerniereLigne, DerniereColonne))
' Copier la plage source // ICI ON UTILISE COPY DIRECTEMENT, SANS SELECT
PlageSource.Copy
' Définir la feuille de destination
Set Destination = ThisWorkbook.Sheets("Masse salariale B26")
Set PlageDestination = Destination.Range("A130").End(xlUp).Offset(1, 0)
' Coller les valeurs et les formats
PlageDestination.PasteSpecial Paste:=xlPasteValues
PlageDestination.PasteSpecial Paste:=xlPasteFormats
' Désactiver le mode "copier"
Application.CutCopyMode = False
End SubBonjour
dans cette ligne Set ws = ThisWorkbook.Worksheets("TCD CDI.CDD")
il faut mettre une virgule entre chaque nom de feuille là tu as un espace et un point
Crdlt
Merci beaucoup pour votre retour !
En utilisant la variable "plagesource" comme mentionné dans votre commentaire au lieu de select cela fonctionne.
Je vais pouvoir modifier chacune de mes macros afin de les compiler et ajouter un bouton afin de tout actualiser en même temps.
Je vous remercie, très bonne journée à vous
Je vous en prie, content d'aider. Bonne journée !