Le samedi 30 octobre 2021 Í 17:47:49 UTC+2, MichD a écrit :Le 30/10/21 Í 11:21, Alf a écrit :Bonjour Í tous,
Existe t il un moyen plus rapide et autre que "plage.select, plage.copy" et paste dans le fichier cible, pour copier une plage de données d'une feuille d'un classeur ?
Cette manière m'oblige Í réactiver le fichier source pour sélectionner la plage de données. Et quelque fois le passage d'une fenêtre Excel Í une autre se passe mal (workbooks("xxx").activate).
Je voudrais, le fichier cible étant actif, récupérer les bonnes valeurs dans le fichier source sans le réactiver et faire mon opération de copie.
La plage est assez grande, et j'aimerais gagner en rapidité...
Est ce possible ?
Merci pour votre aide Í tous
Alf
Bonjour,
| Existe t il un moyen plus rapide
En une ligne de code :
En supposant que le code est écrit dans le fichier contenant la feuille
"Source", ce qui suit, copie les données ainsi que le format des
cellules de la plage "A1:G25" vers les classeur "Destination dans la
feuille "SonMom" Í partir de la cellule H5
Application.EnableEvents = False
Worksheets("Source").Range("A1:G25").copy _
Workbooks("Destination.xlsm").worksheets("SonNom").range("H5")
Application.EnableEvents = True
Si tu veux copier les données dans formatage
'--------------------
Sub test()
Dim X As Variant
X = Feuil1.Range("A1:C3")
Application.EnableEvents = False
Workbooks("Destination.xlsm").Worksheets("SonNom").Range("G2").Resize(UBound(X,
1), UBound(X, 2)) = X
Application.EnableEvents = True
'--------------------
Dans les 2 cas, c'est très rapide et sans sélection, et cela suppose que
les 2 fichiers sont ouverts.
End Sub
Merci MichD
Je vais tester tout cela.
C'est Application.EnableEventsúlse qui fait que l'on ne soit pas obligé de faire une sélection...?
Le samedi 30 octobre 2021 Í 17:47:49 UTC+2, MichD a écrit :
Le 30/10/21 Í 11:21, Alf a écrit :
Bonjour Í tous,
Existe t il un moyen plus rapide et autre que "plage.select, plage.copy" et paste dans le fichier cible, pour copier une plage de données d'une feuille d'un classeur ?
Cette manière m'oblige Í réactiver le fichier source pour sélectionner la plage de données. Et quelque fois le passage d'une fenêtre Excel Í une autre se passe mal (workbooks("xxx").activate).
Je voudrais, le fichier cible étant actif, récupérer les bonnes valeurs dans le fichier source sans le réactiver et faire mon opération de copie.
La plage est assez grande, et j'aimerais gagner en rapidité...
Est ce possible ?
Merci pour votre aide Í tous
Alf
Bonjour,
| Existe t il un moyen plus rapide
En une ligne de code :
En supposant que le code est écrit dans le fichier contenant la feuille
"Source", ce qui suit, copie les données ainsi que le format des
cellules de la plage "A1:G25" vers les classeur "Destination dans la
feuille "SonMom" Í partir de la cellule H5
Application.EnableEvents = False
Worksheets("Source").Range("A1:G25").copy _
Workbooks("Destination.xlsm").worksheets("SonNom").range("H5")
Application.EnableEvents = True
Si tu veux copier les données dans formatage
'--------------------
Sub test()
Dim X As Variant
X = Feuil1.Range("A1:C3")
Application.EnableEvents = False
Workbooks("Destination.xlsm").Worksheets("SonNom").Range("G2").Resize(UBound(X,
1), UBound(X, 2)) = X
Application.EnableEvents = True
'--------------------
Dans les 2 cas, c'est très rapide et sans sélection, et cela suppose que
les 2 fichiers sont ouverts.
End Sub
Merci MichD
Je vais tester tout cela.
C'est Application.EnableEventsúlse qui fait que l'on ne soit pas obligé de faire une sélection...?
Le samedi 30 octobre 2021 Í 17:47:49 UTC+2, MichD a écrit :Le 30/10/21 Í 11:21, Alf a écrit :Bonjour Í tous,
Existe t il un moyen plus rapide et autre que "plage.select, plage.copy" et paste dans le fichier cible, pour copier une plage de données d'une feuille d'un classeur ?
Cette manière m'oblige Í réactiver le fichier source pour sélectionner la plage de données. Et quelque fois le passage d'une fenêtre Excel Í une autre se passe mal (workbooks("xxx").activate).
Je voudrais, le fichier cible étant actif, récupérer les bonnes valeurs dans le fichier source sans le réactiver et faire mon opération de copie.
La plage est assez grande, et j'aimerais gagner en rapidité...
Est ce possible ?
Merci pour votre aide Í tous
Alf
Bonjour,
| Existe t il un moyen plus rapide
En une ligne de code :
En supposant que le code est écrit dans le fichier contenant la feuille
"Source", ce qui suit, copie les données ainsi que le format des
cellules de la plage "A1:G25" vers les classeur "Destination dans la
feuille "SonMom" Í partir de la cellule H5
Application.EnableEvents = False
Worksheets("Source").Range("A1:G25").copy _
Workbooks("Destination.xlsm").worksheets("SonNom").range("H5")
Application.EnableEvents = True
Si tu veux copier les données dans formatage
'--------------------
Sub test()
Dim X As Variant
X = Feuil1.Range("A1:C3")
Application.EnableEvents = False
Workbooks("Destination.xlsm").Worksheets("SonNom").Range("G2").Resize(UBound(X,
1), UBound(X, 2)) = X
Application.EnableEvents = True
'--------------------
Dans les 2 cas, c'est très rapide et sans sélection, et cela suppose que
les 2 fichiers sont ouverts.
End Sub
Merci MichD
Je vais tester tout cela.
C'est Application.EnableEventsúlse qui fait que l'on ne soit pas obligé de faire une sélection...?
Le dimanche 31 octobre 2021 Í 07:37:18 UTC+1, Alf a écrit :Le samedi 30 octobre 2021 Í 18:22:16 UTC+2, MichD a écrit :Le 30/10/21 Í 12:11, Alf a écrit :Le samedi 30 octobre 2021 Í 17:47:49 UTC+2, MichD a écrit :Le 30/10/21 Í 11:21, Alf a écrit :Bonjour Í tous,
Existe t il un moyen plus rapide et autre que "plage.select, plage.copy" et paste dans le fichier cible, pour copier une plage de données d'une feuille d'un classeur ?
Cette manière m'oblige Í réactiver le fichier source pour sélectionner la plage de données. Et quelque fois le passage d'une fenêtre Excel Í une autre se passe mal (workbooks("xxx").activate).
Je voudrais, le fichier cible étant actif, récupérer les bonnes valeurs dans le fichier source sans le réactiver et faire mon opération de copie.
La plage est assez grande, et j'aimerais gagner en rapidité...
Est ce possible ?
Merci pour votre aide Í tous
Alf
Bonjour,
| Existe t il un moyen plus rapide
En une ligne de code :
En supposant que le code est écrit dans le fichier contenant la feuille
"Source", ce qui suit, copie les données ainsi que le format des
cellules de la plage "A1:G25" vers les classeur "Destination dans la
feuille "SonMom" Í partir de la cellule H5
Application.EnableEvents = False
Worksheets("Source").Range("A1:G25").copy _
Workbooks("Destination.xlsm").worksheets("SonNom").range("H5")
Application.EnableEvents = True
Si tu veux copier les données dans formatage
'--------------------
Sub test()
Dim X As Variant
X = Feuil1.Range("A1:C3")
Application.EnableEvents = False
Workbooks("Destination.xlsm").Worksheets("SonNom").Range("G2").Resize(UBound(X,
1), UBound(X, 2)) = X
Application.EnableEvents = True
'--------------------
Dans les 2 cas, c'est très rapide et sans sélection, et cela suppose que
les 2 fichiers sont ouverts.
End Sub
Merci MichD
Je vais tester tout cela.
C'est Application.EnableEventsúlse qui fait que l'on ne soit pas obligé de faire une sélection...?
La commande "Application.EnableEventsúlse ou True" permet de
neutraliser les procédures événementielles que l'on retrouve dans les
modules feuilles ou dans le ThisWorkbook
Exemple :
Dans le module "Feuille", dans la liste déroulante de gauche en haut de
la page blanche, tu as une liste d'événements qui déclenche des macros
automatiquement suite Í des actions de l'usager.
'------------------
Private Sub Worksheet_Change(ByVal Target As Range)
'Se déclenche chaque fois que tu modifies le contenu d'une cellule
Msgbox "Bonjour"
End Sub
'------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Se déclenche chaque fois que tu sélectionnes une nouvelle cellule
Msgbox "Bonsoir"
End Sub
'------------------
Comme je ne sais pas ce que contient ton projetVBA, j'ai ajouté cela
afin de ne pas déclencher ces macros
Attention, ce n'est qu'un exemple, il y en a bien d'autres!
MichD
Bonjour Í tous,
(Je suis sous Excel 2007, au travail Excel 2016 je crois)
J'ai testé ton code MichD, mais rien ne se passe. La copie ne se fait pas.
Dans le second test, X reste Vide....
(essai en enlevant Application.EnableEvents qui ne devrait pas gêner, idem. Je n'ai pas de macros relatives aux feuilles)
Mon code doit avoir quelque chose qui empêche la copie...
Une idée ?...
Merci pour vos réponses
Alf
Voici ce que j'ai constaté:
Mon code,
Fichier source ouvert, Ouvre le fichier cible (devient actif)
Copie (...essaie de copier) une plage du fichier source vers un emplacement du fichier cible
--> la copie ne marche pas dans ce sens
Si j'ouvre le fichier cible, je reviens sur la fenêtre du fichier source, et je lance ma macro.
--> la copie fonctionne (le fichier cible n'étant pas activé)
J'aimerais que la copie fonctionne dans le 1er cas.
Dans ce cas, je dois réactiver le fichier source avant de faire la copie (ce que je ne voulais pas) puis réactiver le fichier cible au final.
Je peux utiliser ApplicationScreenUpdating pour supprimer ces allers-retours dans les fenêtres Excel mais s'il y a un autre moyen....
Merci pour votre aide
Alf
Le dimanche 31 octobre 2021 Í 07:37:18 UTC+1, Alf a écrit :
Le samedi 30 octobre 2021 Í 18:22:16 UTC+2, MichD a écrit :
Le 30/10/21 Í 12:11, Alf a écrit :
Le samedi 30 octobre 2021 Í 17:47:49 UTC+2, MichD a écrit :
Le 30/10/21 Í 11:21, Alf a écrit :
Bonjour Í tous,
Existe t il un moyen plus rapide et autre que "plage.select, plage.copy" et paste dans le fichier cible, pour copier une plage de données d'une feuille d'un classeur ?
Cette manière m'oblige Í réactiver le fichier source pour sélectionner la plage de données. Et quelque fois le passage d'une fenêtre Excel Í une autre se passe mal (workbooks("xxx").activate).
Je voudrais, le fichier cible étant actif, récupérer les bonnes valeurs dans le fichier source sans le réactiver et faire mon opération de copie.
La plage est assez grande, et j'aimerais gagner en rapidité...
Est ce possible ?
Merci pour votre aide Í tous
Alf
Bonjour,
| Existe t il un moyen plus rapide
En une ligne de code :
En supposant que le code est écrit dans le fichier contenant la feuille
"Source", ce qui suit, copie les données ainsi que le format des
cellules de la plage "A1:G25" vers les classeur "Destination dans la
feuille "SonMom" Í partir de la cellule H5
Application.EnableEvents = False
Worksheets("Source").Range("A1:G25").copy _
Workbooks("Destination.xlsm").worksheets("SonNom").range("H5")
Application.EnableEvents = True
Si tu veux copier les données dans formatage
'--------------------
Sub test()
Dim X As Variant
X = Feuil1.Range("A1:C3")
Application.EnableEvents = False
Workbooks("Destination.xlsm").Worksheets("SonNom").Range("G2").Resize(UBound(X,
1), UBound(X, 2)) = X
Application.EnableEvents = True
'--------------------
Dans les 2 cas, c'est très rapide et sans sélection, et cela suppose que
les 2 fichiers sont ouverts.
End Sub
Merci MichD
Je vais tester tout cela.
C'est Application.EnableEventsúlse qui fait que l'on ne soit pas obligé de faire une sélection...?
La commande "Application.EnableEventsúlse ou True" permet de
neutraliser les procédures événementielles que l'on retrouve dans les
modules feuilles ou dans le ThisWorkbook
Exemple :
Dans le module "Feuille", dans la liste déroulante de gauche en haut de
la page blanche, tu as une liste d'événements qui déclenche des macros
automatiquement suite Í des actions de l'usager.
'------------------
Private Sub Worksheet_Change(ByVal Target As Range)
'Se déclenche chaque fois que tu modifies le contenu d'une cellule
Msgbox "Bonjour"
End Sub
'------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Se déclenche chaque fois que tu sélectionnes une nouvelle cellule
Msgbox "Bonsoir"
End Sub
'------------------
Comme je ne sais pas ce que contient ton projetVBA, j'ai ajouté cela
afin de ne pas déclencher ces macros
Attention, ce n'est qu'un exemple, il y en a bien d'autres!
MichD
Bonjour Í tous,
(Je suis sous Excel 2007, au travail Excel 2016 je crois)
J'ai testé ton code MichD, mais rien ne se passe. La copie ne se fait pas.
Dans le second test, X reste Vide....
(essai en enlevant Application.EnableEvents qui ne devrait pas gêner, idem. Je n'ai pas de macros relatives aux feuilles)
Mon code doit avoir quelque chose qui empêche la copie...
Une idée ?...
Merci pour vos réponses
Alf
Voici ce que j'ai constaté:
Mon code,
Fichier source ouvert, Ouvre le fichier cible (devient actif)
Copie (...essaie de copier) une plage du fichier source vers un emplacement du fichier cible
--> la copie ne marche pas dans ce sens
Si j'ouvre le fichier cible, je reviens sur la fenêtre du fichier source, et je lance ma macro.
--> la copie fonctionne (le fichier cible n'étant pas activé)
J'aimerais que la copie fonctionne dans le 1er cas.
Dans ce cas, je dois réactiver le fichier source avant de faire la copie (ce que je ne voulais pas) puis réactiver le fichier cible au final.
Je peux utiliser ApplicationScreenUpdating pour supprimer ces allers-retours dans les fenêtres Excel mais s'il y a un autre moyen....
Merci pour votre aide
Alf
Le dimanche 31 octobre 2021 Í 07:37:18 UTC+1, Alf a écrit :Le samedi 30 octobre 2021 Í 18:22:16 UTC+2, MichD a écrit :Le 30/10/21 Í 12:11, Alf a écrit :Le samedi 30 octobre 2021 Í 17:47:49 UTC+2, MichD a écrit :Le 30/10/21 Í 11:21, Alf a écrit :Bonjour Í tous,
Existe t il un moyen plus rapide et autre que "plage.select, plage.copy" et paste dans le fichier cible, pour copier une plage de données d'une feuille d'un classeur ?
Cette manière m'oblige Í réactiver le fichier source pour sélectionner la plage de données. Et quelque fois le passage d'une fenêtre Excel Í une autre se passe mal (workbooks("xxx").activate).
Je voudrais, le fichier cible étant actif, récupérer les bonnes valeurs dans le fichier source sans le réactiver et faire mon opération de copie.
La plage est assez grande, et j'aimerais gagner en rapidité...
Est ce possible ?
Merci pour votre aide Í tous
Alf
Bonjour,
| Existe t il un moyen plus rapide
En une ligne de code :
En supposant que le code est écrit dans le fichier contenant la feuille
"Source", ce qui suit, copie les données ainsi que le format des
cellules de la plage "A1:G25" vers les classeur "Destination dans la
feuille "SonMom" Í partir de la cellule H5
Application.EnableEvents = False
Worksheets("Source").Range("A1:G25").copy _
Workbooks("Destination.xlsm").worksheets("SonNom").range("H5")
Application.EnableEvents = True
Si tu veux copier les données dans formatage
'--------------------
Sub test()
Dim X As Variant
X = Feuil1.Range("A1:C3")
Application.EnableEvents = False
Workbooks("Destination.xlsm").Worksheets("SonNom").Range("G2").Resize(UBound(X,
1), UBound(X, 2)) = X
Application.EnableEvents = True
'--------------------
Dans les 2 cas, c'est très rapide et sans sélection, et cela suppose que
les 2 fichiers sont ouverts.
End Sub
Merci MichD
Je vais tester tout cela.
C'est Application.EnableEventsúlse qui fait que l'on ne soit pas obligé de faire une sélection...?
La commande "Application.EnableEventsúlse ou True" permet de
neutraliser les procédures événementielles que l'on retrouve dans les
modules feuilles ou dans le ThisWorkbook
Exemple :
Dans le module "Feuille", dans la liste déroulante de gauche en haut de
la page blanche, tu as une liste d'événements qui déclenche des macros
automatiquement suite Í des actions de l'usager.
'------------------
Private Sub Worksheet_Change(ByVal Target As Range)
'Se déclenche chaque fois que tu modifies le contenu d'une cellule
Msgbox "Bonjour"
End Sub
'------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Se déclenche chaque fois que tu sélectionnes une nouvelle cellule
Msgbox "Bonsoir"
End Sub
'------------------
Comme je ne sais pas ce que contient ton projetVBA, j'ai ajouté cela
afin de ne pas déclencher ces macros
Attention, ce n'est qu'un exemple, il y en a bien d'autres!
MichD
Bonjour Í tous,
(Je suis sous Excel 2007, au travail Excel 2016 je crois)
J'ai testé ton code MichD, mais rien ne se passe. La copie ne se fait pas.
Dans le second test, X reste Vide....
(essai en enlevant Application.EnableEvents qui ne devrait pas gêner, idem. Je n'ai pas de macros relatives aux feuilles)
Mon code doit avoir quelque chose qui empêche la copie...
Une idée ?...
Merci pour vos réponses
Alf
Voici ce que j'ai constaté:
Mon code,
Fichier source ouvert, Ouvre le fichier cible (devient actif)
Copie (...essaie de copier) une plage du fichier source vers un emplacement du fichier cible
--> la copie ne marche pas dans ce sens
Si j'ouvre le fichier cible, je reviens sur la fenêtre du fichier source, et je lance ma macro.
--> la copie fonctionne (le fichier cible n'étant pas activé)
J'aimerais que la copie fonctionne dans le 1er cas.
Dans ce cas, je dois réactiver le fichier source avant de faire la copie (ce que je ne voulais pas) puis réactiver le fichier cible au final.
Je peux utiliser ApplicationScreenUpdating pour supprimer ces allers-retours dans les fenêtres Excel mais s'il y a un autre moyen....
Merci pour votre aide
Alf
Bonjour,
Place les 2 classeurs dans le même répertoire
Ouvre le classeur1.xlsm
Exécute la macro.
Dans le module, j'ai commenté le code, je ne suis pas sÍ»r que c'est
suffisant pour ta compréhension...mais c'est le mieux que je peux faire
dans un groupe de discussion.
https://www.cjoint.com/c/KJFt5UuQmIF
MichD
Bonjour,
Place les 2 classeurs dans le même répertoire
Ouvre le classeur1.xlsm
Exécute la macro.
Dans le module, j'ai commenté le code, je ne suis pas sÍ»r que c'est
suffisant pour ta compréhension...mais c'est le mieux que je peux faire
dans un groupe de discussion.
https://www.cjoint.com/c/KJFt5UuQmIF
MichD
Bonjour,
Place les 2 classeurs dans le même répertoire
Ouvre le classeur1.xlsm
Exécute la macro.
Dans le module, j'ai commenté le code, je ne suis pas sÍ»r que c'est
suffisant pour ta compréhension...mais c'est le mieux que je peux faire
dans un groupe de discussion.
https://www.cjoint.com/c/KJFt5UuQmIF
MichD
Le dimanche 31 octobre 2021 Í 21:00:59 UTC+1, MichD a écrit :Bonjour,
Place les 2 classeurs dans le même répertoire
Ouvre le classeur1.xlsm
Exécute la macro.
Dans le module, j'ai commenté le code, je ne suis pas sÍ»r que c'est
suffisant pour ta compréhension...mais c'est le mieux que je peux faire
dans un groupe de discussion.
https://www.cjoint.com/c/KJFt5UuQmIF
MichD
Merci
J'ai compris mon erreur et le reste est clair aussi.
Juste une précision,
Pourquoi utiliser 'Application.Windows("Classeur2.xlsm").Activate au lieu de 'Workbooks("Classeur2.xlsm").Activate ?
qui devraient avoir le même résultat puisqu'il s'agit seulement de passer d'une fenêtre Í l'autre...
Merci pour ta précision
Alf
Le dimanche 31 octobre 2021 Í 21:00:59 UTC+1, MichD a écrit :
Bonjour,
Place les 2 classeurs dans le même répertoire
Ouvre le classeur1.xlsm
Exécute la macro.
Dans le module, j'ai commenté le code, je ne suis pas sÍ»r que c'est
suffisant pour ta compréhension...mais c'est le mieux que je peux faire
dans un groupe de discussion.
https://www.cjoint.com/c/KJFt5UuQmIF
MichD
Merci
J'ai compris mon erreur et le reste est clair aussi.
Juste une précision,
Pourquoi utiliser 'Application.Windows("Classeur2.xlsm").Activate au lieu de 'Workbooks("Classeur2.xlsm").Activate ?
qui devraient avoir le même résultat puisqu'il s'agit seulement de passer d'une fenêtre Í l'autre...
Merci pour ta précision
Alf
Le dimanche 31 octobre 2021 Í 21:00:59 UTC+1, MichD a écrit :Bonjour,
Place les 2 classeurs dans le même répertoire
Ouvre le classeur1.xlsm
Exécute la macro.
Dans le module, j'ai commenté le code, je ne suis pas sÍ»r que c'est
suffisant pour ta compréhension...mais c'est le mieux que je peux faire
dans un groupe de discussion.
https://www.cjoint.com/c/KJFt5UuQmIF
MichD
Merci
J'ai compris mon erreur et le reste est clair aussi.
Juste une précision,
Pourquoi utiliser 'Application.Windows("Classeur2.xlsm").Activate au lieu de 'Workbooks("Classeur2.xlsm").Activate ?
qui devraient avoir le même résultat puisqu'il s'agit seulement de passer d'une fenêtre Í l'autre...
Merci pour ta précision
Alf