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 Sub

Bonjour

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 !

Rechercher des sujets similaires à "macro qui fonctionne que onglet concerne"