Variable objet Workbooks et Range côte à côte

Bonjour à tous.

Je suis face un un problème et je ne trouve pas de solution donc si vous pouviez m’éclairer ^^

Deux variable :

Dim Classeur As Workbook
    Set Classeur = Workbooks("test.xlsm")

et

Dim Plage As Range
    Set Plage = Sheets("test).Range("A1:E2")

Comment je dois m'y prendre pour avoir c'est deux variables côte à côte pour obtenir au final

Workbooks("test.xlsm").Sheets("test").Range("A1:E2")

Merci d'avance pour votre aide.

Bonne journée.

DieZe

Bonjour,

Si j'ai bien compris le besoin :

set Plage = Workbooks("test.xlsm").Sheets("test").Range("A1:E2")

Bouben

Bonjour bouben,

non, je veux pouvoir utiliser mes deux variables côte à côte pour avoir ce résultat

Je veux en faite utiliser mes deux variables de cette façon en gros :

Classeur Plage = Worksheet("test2.xlsm").Sheets("test2").Range("A1:E2")

pour avoir comme traitement :

Workbooks("test.xlsm") Sheets("test).Range("A1:E2") = Worksheet("test2.xlsm").Sheets("test2").Range("A1:E2")

Et le problème c'est que du coup il me manque le point devant le Sheets enfin je suppose que c'est le problème.

En tout cas à l’exécution j'ai une erreur '13' Incompatibilité de type

J'aurai pu faire comme tu as dis avoir qu'une seule variable comprenant le classeur, les feuilles et les plages mais dans ce cas je vais devoir multiplier mon nombre de variable "Range" par 5 car j'ai 5 classeurs a traiter.

En gros pour la destination j'ai 5 classeurs avec chacun 6 feuilles "identique" avec chacune 10 plages sauf une d'entre elle qui en a que 3.

Donc en utilisant deux variable comme je le souhaite ça me fait 5 variables pour les classeurs et 53 variables pour les plages

alors que si j'en fais qu'une je me retrouve avec 53x5=265 variables à déclarer.

Apres peu être que ce que je veux faire n'est pas possible ou pas la bonne façon de faire ^^

Désolé si je ne suis pas très clair dans mes explications.

DieZe.

Bonsoir,

Voici le principe de mon code, ça sera peu être plus explicite.

Sub test()

'Déclaration de la variable
Dim NSem As Byte
'Valeurs de la variables
NSem = Cells(2, 6)

'Ouverture des fichiers destinataires
Workbooks.Open Filename:=ThisWorkbook.Path & "\test1.xlsm"
Workbooks.Open Filename:=ThisWorkbook.Path & "\test2.xlsm"

'Déclaration des variables des différents Classeurs
Dim UNWB As Workbook, DEUXWB As Workbook, WB As Workbook
'Valeurs des variables des différents Classeurs
Set UNWB = Workbooks("test1.xlsm")
Set DEUXWB = Workbooks("test2.xlsm")
Set WB = Workbooks("test.xlsm")

'Déclaration variables des plages de destination
Dim Plage1 As Range, Plage2 As Range, Plage3 As Range, Plage4 As Range
'Valeurs variables des plages de destination
Set Plage1 = Sheets("1").Range("A1:B2")
Set Plage2 = Sheets("1").Range("A3:B4")
Set Plage3 = Sheets("2").Range("A1:B2")
Set Plage4 = Sheets("2").Range("A3:B4")

'Déclaration des variables des plages de cellule à copier
Dim uncopy As Range, deuxcopy As Range
'Valeurs des variables des plages de cellule à copier
Set uncopy = WB.Sheets("PourCopie").Range("A1:B2")
Set deuxopy = WB.Sheets("PourCopie").Range("A3:B4")

    If NSem = 1 Then
        UNWB Plage1.Value = uncopy.Value
        DEUXWB Plage1.Value = deuxcopy.Value
    End If

Set Plage1 = Nothing

    If NSem = 2 Then
        UNWB Plage2.Value = uncopy.Value
        DEUXWB Plage2.Value = deuxcopy.Value
    End If

Set Plage2 = Nothing

    If NSem = 4 Then
        UNWB Plage3.Value = uncopy.Value
        DEUXWB Plage3.Value = deuxcopy.Value
    End If

Set Plage3 = Nothing

    If NSem = 5 Then
        UNWB Plage4.Value = uncopy.Value
        DEUXWB Plage4.Value = deuxcopy.Value
    End If

Set Plage4 = Nothing

Set UNWB = Nothing
Set DEUXWB = Nothing
Set uncopy = Nothing
Set deuxcopy = Nothing
End Sub

Bonne soirée.

Dieze

Bonsoir,

J'ai essayé de comprendre, il y a pas mal de choses à modifier dans le code VBA.

Peux-tu encore préciser ce que tu veux.

Ton fichier initial s'appelle "Test", et tu veux copier des cellules de ce fichier vers 2 autres fichiers qui s'appellent "Test1" & "Test2" ?

Et les onglets dans ces fichiers s'appellent "1" et "2" ?

Il faut plus de précisions.

A première vue : plusieurs points à revoir :

- ajouter au début : option explicit

=> permettra d'éviter les erreurs de saisie (deuxopy au lieu de deuxcopy)

=> Set deuxopy = WB.Sheets("PourCopie").Range("A3:B4")

- la syntaxe suivante est incorrecte :

DEUXWB Plage1.Value = deuxcopy.Value

A la rigueur, avec un . ça veut dire quelque chose

- les lignes suivantes peuvent être simplifiées

Workbooks.Open Filename:=ThisWorkbook.Path & "\test1.xlsm"

Set UNWB = Workbooks("test1.xlsm")

=> Set UNWB = Workbooks.Open(ThisWorkbook.Path & "\test1.xlsm")

Bref, ton problème n'a pas l'air trop difficile, mais un peu compliqué de t'aider en ne sachant pas vraiment ce que tu veux faire !

Bouben

Bonjour,

bouben a écrit :

J'ai essayé de comprendre, il y a pas mal de choses à modifier dans le code VBA.

Bah ce n'est pas vraiment mon code que j'ai mis mais c'est un exemple pour que vous compreniez le principe.

bouben a écrit :

Ton fichier initial s'appelle "Test", et tu veux copier des cellules de ce fichier vers 2 autres fichiers qui s'appellent "Test1" & "Test2" ?

Et les onglets dans ces fichiers s'appellent "1" et "2" ?

Oui c'est bien ça le principe, sauf quand réalité j'ai un fichier source avec 5 plages différentes à copier.

Chacune de ces plages a un fichier destinataire différent ou elle doit être collé.

Et dans chacun de ces fichiers il y a 53 plages différentes de destination dont le choix de destination est défini par la variable "NSem"

bouben a écrit :

A première vue : plusieurs points à revoir :

- ajouter au début : option explicit

=> permettra d'éviter les erreurs de saisie (deuxopy au lieu de deuxcopy)

=> Set deuxopy = WB.Sheets("PourCopie").Range("A3:B4")

Merci pour la commande Option explicit je ne connaissais pas .

Pour les erreurs, effectivement si j'oublie des lettres ^^, mais dans mon code je n'utilise pas ces noms pour mes variables, c'était juste pour l'exemple.

J'ai ajouté la commande à mon code pas d'erreur

bouben a écrit :

- la syntaxe suivante est incorrecte :

DEUXWB Plage1.Value = deuxcopy.Value

A la rigueur, avec un . ça veut dire quelque chose

C'est justement la raison de ma venu ici, je ne sais pas comment faire la syntaxe de cette partie pour ajouter le point

bouben a écrit :

- les lignes suivantes peuvent être simplifiées

Workbooks.Open Filename:=ThisWorkbook.Path & "\test1.xlsm"

Set UNWB = Workbooks("test1.xlsm")

=> Set UNWB = Workbooks.Open(ThisWorkbook.Path & "\test1.xlsm")

Ah en gros j'ouvre le fichier en même temps que je le déclare cool merci pour "l'astuce" j'y aurai pas pensé.

bouben a écrit :

Bref, ton problème n'a pas l'air trop difficile, mais un peu compliqué de t'aider en ne sachant pas vraiment ce que tu veux faire !

Le vrai problème que j'ai et qui m'a fait venir ici pour demander de l'aide c'est d'utiliser mes deux variables côte à côte et qu'elle soit lue comme je le souhaite et je ne trouve pas la syntaxe pour ajouter le point qui fera marcher le tout.

Bon dimanche

DieZe

J'ai fait un petit schémas de ce que je veux faire, ça sera peu être plus clair .

projetexcel projetexcel1

je pense que je me prend trop la tête à vouloir utiliser des variables je vais tout simplement écrire :

Workbooks("mon_classeur_de_destination").Sheets("ma_page_de_destination").Range("ma_plage_de_destination")=.Sheets("ma_page_à_copier").Range("ma plage_à_copier")

Par contre et t-il possible de modifier le code pour ne pas copier les cellules avec zéro comme valeur ?

Merci d'avance.

DieZe

Rechercher des sujets similaires à "variable objet workbooks range cote"