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
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
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
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
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
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