VBA Boucle sur les onglets

choup67

XLDnaute Occasionnel
Bonjour à tous,

J'ai un classeur source et un classeur destination. Dans chaque classeur, j'ai exactement les mêmes onglets. Je veux juste que les informations du classeur source soient copiées dans le classeur destination.

Je pourrais très bien copier le fichier entier, mais le problème c'est que je veux que la copie se fasse à chaque enregistrement du fichier source, et comme il est ouvert, ça ne semble pas fonctionner. En cherchant sur le net, j'ai vu qu'il vallait mieux copier les onglets. J'ai réussi à le faire avec un onglet mais pour éviter d'avoir un script trop long, j'aimerai en faire une boucle.

C'est là que je fais appel à vous. J'ai une erreur de selection au niveau de la copie.

Voici mon code :
Code:
Dim classeurSource As Workbook, classeurDestination As Workbook
Dim sh As Worksheet

Application.ScreenUpdating = False

'ouvrir le classeur source (en lecture seule)
Set classeurSource = Application.ThisWorkbook
'définir le classeur destination
Set classeurDestination = Application.Workbooks.Open("\\Fru1fic2\fru2scplog\Dossiers de travail\01 - Organisation Matériel\Plasma\Performances LOG 2012.xls", , False)

    For Each sh In Worksheets
    
        With sh
'copier les données de la "Plasma" du classeur source vers la "Plasma" du classeur destination
classeurDestination.Sheets("sh").Range("A1:M40") = .Range("A1:M40").Value
        End With
        
    Next sh

'fermer et sauvegarder le classeur destination
classeurDestination.Save
classeurDestination.Close False

Application.ScreenUpdating = True

En gros pour chaque onglet du classeur source, je veux copier les données dans l'onglet du même nom dans le classeur destination.

Merci :)
 

choup67

XLDnaute Occasionnel
Re : VBA Boucle sur les onglets

Bon... comme souvent, je bute sur un truc pendant des heures, je poste un "à l'aide" et d'un coup j'ai l'illumination qui suit lol

J'ai rajoué une variable string dans laquelle je stock le nom de l'onglet

Dim DestName as String
DestName = Sh.name
classeurDestination.Sheets(DestName).Range("A1:M40") = .Range("A1:M40").Value
 

Papou-net

XLDnaute Barbatruc
Re : VBA Boucle sur les onglets

Bonjour choup67,

Peut-être comme ceci (non testé) :

Code:
Dim classeurSource As Workbook, classeurDestination As Workbook
Dim sh As Worksheet
Application.ScreenUpdating = False
'ouvrir le classeur source (en lecture seule)
Set classeurSource = Application.ThisWorkbook
'définir le classeur destination
Set classeurDestination =  Application.Workbooks.Open("\\Fru1fic2\fru2scplog\Dossiers de travail\01  - Organisation Matériel\Plasma\Performances LOG 2012.xls", , False)
For Each sh In Worksheets
    With sh
'copier les données de la "Plasma" du classeur source vers la "Plasma" du classeur destination
classeurDestination.Sheets(sh.Name).Range("A1:M40").Value = .Range("A1:M40").Value
        End With
        Next sh
'fermer et sauvegarder le classeur destination
classeurDestination.Save
classeurDestination.Close False
Application.ScreenUpdating = True
Cordialement.

Edit : bonjour à toi aussi, camarchepas
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 201
Messages
2 086 166
Membres
103 149
dernier inscrit
Deepkneec