Bonjour,
Depuis Excel 2013 j'ai not=C3=A9 =C3=A0 plusieurs reprises qu'il m'=C3=A9ta=
is n=C3=A9cessaire de g=C3=A9rer diff=C3=A9remment le Application.ScreenUpd=
ating =3D False. Par exemple si ce n'est =C3=A0 true dans certaines situati=
ons il arrive que l'=C3=A9cran g=C3=A8le.
Par le code ci-dessous m=C3=AAme si c'est bien =C3=A0 False (je valide et c=
'est le cas) lorsque le Application.goto est lanc=C3=A9 ... Excel nous am=
=C3=A8ne =C3=A0 cet endroit. Est-ce normal? Ou devrais-je utiliser un autre=
code? Qu'en pensez-vous?
Bonjour, Ce qui se passe est normal! Application.ScreenUpdating est efficace si tu ne n'utilise pas des "Select" dans ton code. Avec Application.Goto, tu demandes expressément de sélectionner la plage de cellules et de l'afficher à l'écran. Excel est docile et il effectue le travail. Au lien d'écrire ceci avec cette syntaxe, | Application.Goto Feuil9.Range("CN_ChifCpteZone").Find(What:=Var_NodeCompte, LookIn:=xlValues, LookAt:=xlWhole) Utilise plutôt cela : Dim Trouve As Range 'Je suppose que le nom est une plage définie au niveau du classeur sinon, il faut ajouter devant le nom de la feuille. With Range("CN_ChifCpteZone") Set Trouve = .Find(What:=Var_NodeCompte, LookIn:=xlValues, LookAt:=xlWhole) End With 'Si Excel a trouvé... If not trouve is nothing then 'Tu connais la cellule où est cette information, elle 'est représentée par Trouve. Cette variable objet a les mêmes 'méthodes ou propriétés qu'un objet Range. 'Par conséquent, tu peux copier la cellule vers une autre destination, 'supprimer la valeur ou effectuer toute autre opération Msgbox Trouve.Value 'ou copie Trouve.Copy Worksheets("Feuil1").range("A1") '.../... End If
Application.ScreenUpdating est efficace si tu ne n'utilise pas des
"Select" dans ton code. Avec Application.Goto, tu demandes expressément
de sélectionner la plage de cellules et de l'afficher à l'écran. Excel
est docile et il effectue le travail.
'Je suppose que le nom est une plage définie au niveau du classeur
sinon, il faut ajouter devant le nom de la feuille.
With Range("CN_ChifCpteZone")
Set Trouve = .Find(What:=Var_NodeCompte, LookIn:=xlValues,
LookAt:=xlWhole)
End With
'Si Excel a trouvé...
If not trouve is nothing then
'Tu connais la cellule où est cette information, elle
'est représentée par Trouve. Cette variable objet a les mêmes
'méthodes ou propriétés qu'un objet Range.
'Par conséquent, tu peux copier la cellule vers une autre destination,
'supprimer la valeur ou effectuer toute autre opération
Bonjour, Ce qui se passe est normal! Application.ScreenUpdating est efficace si tu ne n'utilise pas des "Select" dans ton code. Avec Application.Goto, tu demandes expressément de sélectionner la plage de cellules et de l'afficher à l'écran. Excel est docile et il effectue le travail. Au lien d'écrire ceci avec cette syntaxe, | Application.Goto Feuil9.Range("CN_ChifCpteZone").Find(What:=Var_NodeCompte, LookIn:=xlValues, LookAt:=xlWhole) Utilise plutôt cela : Dim Trouve As Range 'Je suppose que le nom est une plage définie au niveau du classeur sinon, il faut ajouter devant le nom de la feuille. With Range("CN_ChifCpteZone") Set Trouve = .Find(What:=Var_NodeCompte, LookIn:=xlValues, LookAt:=xlWhole) End With 'Si Excel a trouvé... If not trouve is nothing then 'Tu connais la cellule où est cette information, elle 'est représentée par Trouve. Cette variable objet a les mêmes 'méthodes ou propriétés qu'un objet Range. 'Par conséquent, tu peux copier la cellule vers une autre destination, 'supprimer la valeur ou effectuer toute autre opération Msgbox Trouve.Value 'ou copie Trouve.Copy Worksheets("Feuil1").range("A1") '.../... End If
rmill...
OK merci. Je vais y aller de cette façon. Mais toujours concernant ScreenUpdating ... aussi peut-être est-ce rel ié aux nouvelles versions de Excel avec les pilotes graphiques ??? Car des usagers ont des problèmes de rafraichissement d'écran qu'ils n'avaient pas auparavant ... avec le même code. Par exemple à partir d'un fichier (classeur1) j'envoi des valeurs dans un autre fichier (classeur2). Ensuite je veux aller au classeur2 à un endroit spécifique.. J'utilise le code ci-dessous. Croyez-vous qu'un code différent pourrait être plus efficace? Merci à l'avance . Application.ScreenUpdating = True wbk2.visible = True Application.Goto wbk2.Sheets("PARAM").Range("CN_ParamTop"), Scroll:=True
OK merci. Je vais y aller de cette façon.
Mais toujours concernant ScreenUpdating ... aussi peut-être est-ce rel ié aux nouvelles versions de Excel avec les pilotes graphiques ??? Car des usagers ont des problèmes de rafraichissement d'écran qu'ils n'avaient pas auparavant ... avec le même code.
Par exemple à partir d'un fichier (classeur1) j'envoi des valeurs dans un autre fichier (classeur2). Ensuite je veux aller au classeur2 à un endroit spécifique.. J'utilise le code ci-dessous. Croyez-vous qu'un code différent pourrait être plus efficace? Merci à l'avance .
OK merci. Je vais y aller de cette façon. Mais toujours concernant ScreenUpdating ... aussi peut-être est-ce rel ié aux nouvelles versions de Excel avec les pilotes graphiques ??? Car des usagers ont des problèmes de rafraichissement d'écran qu'ils n'avaient pas auparavant ... avec le même code. Par exemple à partir d'un fichier (classeur1) j'envoi des valeurs dans un autre fichier (classeur2). Ensuite je veux aller au classeur2 à un endroit spécifique.. J'utilise le code ci-dessous. Croyez-vous qu'un code différent pourrait être plus efficace? Merci à l'avance . Application.ScreenUpdating = True wbk2.visible = True Application.Goto wbk2.Sheets("PARAM").Range("CN_ParamTop"), Scroll:=True
MichD
Le 30/10/20 à 17:44, a écrit :
OK merci. Je vais y aller de cette façon. Mais toujours concernant ScreenUpdating ... aussi peut-être est-ce relié aux nouvelles versions de Excel avec les pilotes graphiques ??? Car des usagers ont des problèmes de rafraichissement d'écran qu'ils n'avaient pas auparavant ... avec le même code. Par exemple à partir d'un fichier (classeur1) j'envoi des valeurs dans un autre fichier (classeur2). Ensuite je veux aller au classeur2 à un endroit spécifique.. J'utilise le code ci-dessous. Croyez-vous qu'un code différent pourrait être plus efficace? Merci à l'avance. Application.ScreenUpdating = True wbk2.visible = True Application.Goto wbk2.Sheets("PARAM").Range("CN_ParamTop"), Scroll:=True
Qu'est-ce qui se passe que tu ne trouves pas normal? Pourquoi utilises-tu "Application.screenDating", la ligne de code va t'amener directement à la plage demandée peu importe que tu passes l'expression "Application.ScreenDating à true ou à false. Ce n'est pas ce qui se passe? wbk2.Sheets("PARAM").Range("CN_ParamTop"), Scroll:=True Quelle est la nature de ton problème? Je ne comprends pas! MichD
Le 30/10/20 à 17:44, rmill...@gmail.com a écrit :
OK merci. Je vais y aller de cette façon.
Mais toujours concernant ScreenUpdating ... aussi peut-être est-ce relié aux nouvelles versions de Excel avec les pilotes graphiques ??? Car des usagers ont des problèmes de rafraichissement d'écran qu'ils n'avaient pas auparavant ... avec le même code.
Par exemple à partir d'un fichier (classeur1) j'envoi des valeurs dans un autre fichier (classeur2). Ensuite je veux aller au classeur2 à un endroit spécifique.. J'utilise le code ci-dessous. Croyez-vous qu'un code différent pourrait être plus efficace? Merci à l'avance.
Qu'est-ce qui se passe que tu ne trouves pas normal?
Pourquoi utilises-tu "Application.screenDating", la ligne de code va
t'amener directement à la plage demandée peu importe que tu passes
l'expression "Application.ScreenDating à true ou à false. Ce n'est pas
ce qui se passe?
wbk2.Sheets("PARAM").Range("CN_ParamTop"), Scroll:=True
Quelle est la nature de ton problème? Je ne comprends pas!
OK merci. Je vais y aller de cette façon. Mais toujours concernant ScreenUpdating ... aussi peut-être est-ce relié aux nouvelles versions de Excel avec les pilotes graphiques ??? Car des usagers ont des problèmes de rafraichissement d'écran qu'ils n'avaient pas auparavant ... avec le même code. Par exemple à partir d'un fichier (classeur1) j'envoi des valeurs dans un autre fichier (classeur2). Ensuite je veux aller au classeur2 à un endroit spécifique.. J'utilise le code ci-dessous. Croyez-vous qu'un code différent pourrait être plus efficace? Merci à l'avance. Application.ScreenUpdating = True wbk2.visible = True Application.Goto wbk2.Sheets("PARAM").Range("CN_ParamTop"), Scroll:=True
Qu'est-ce qui se passe que tu ne trouves pas normal? Pourquoi utilises-tu "Application.screenDating", la ligne de code va t'amener directement à la plage demandée peu importe que tu passes l'expression "Application.ScreenDating à true ou à false. Ce n'est pas ce qui se passe? wbk2.Sheets("PARAM").Range("CN_ParamTop"), Scroll:=True Quelle est la nature de ton problème? Je ne comprends pas! MichD
rmill...
Je comprends. Bien je met Í false car lorsque j'envoi des données du classeur1 au classeur2 je fais des opérations dont des copier coller ... je reviens au classeur1 etc. Alors l'usager verrait que ça se promène d'un classeur Í l'autre si Í True. Alors je le met Í False. Mais jje dois remettre Í True par la suite. Il y a quelque chose qui fait geler Excel. Mais avant ce même code ne causait pas ceci. ??? De lÍ ma question Í savoir si un autre code serait plus efficace.
Je comprends.
Bien je met Í false car lorsque j'envoi des données du classeur1 au classeur2 je fais des opérations dont des copier coller ... je reviens au classeur1 etc. Alors l'usager verrait que ça se promène d'un classeur Í l'autre si Í True. Alors je le met Í False. Mais jje dois remettre Í True par la suite.
Il y a quelque chose qui fait geler Excel. Mais avant ce même code ne causait pas ceci. ??? De lÍ ma question Í savoir si un autre code serait plus efficace.
Je comprends. Bien je met Í false car lorsque j'envoi des données du classeur1 au classeur2 je fais des opérations dont des copier coller ... je reviens au classeur1 etc. Alors l'usager verrait que ça se promène d'un classeur Í l'autre si Í True. Alors je le met Í False. Mais jje dois remettre Í True par la suite. Il y a quelque chose qui fait geler Excel. Mais avant ce même code ne causait pas ceci. ??? De lÍ ma question Í savoir si un autre code serait plus efficace.
MichD
Le 01/11/20 Í 12:27, a écrit :
Je comprends. Bien je met Í false car lorsque j'envoi des données du classeur1 au classeur2 je fais des opérations dont des copier coller ... je reviens au classeur1 etc. Alors l'usager verrait que ça se promène d'un classeur Í l'autre si Í True. Alors je le met Í False. Mais jje dois remettre Í True par la suite. Il y a quelque chose qui fait geler Excel. Mais avant ce même code ne causait pas ceci. ??? De lÍ ma question Í savoir si un autre code serait plus efficace.
Pour ce qui est de la macro, je ne peux pas faire grand-chose sans la voir dans sa totalité. Une manière simple de copier une plage de données '------------------------------------------ Sub test() Dim RgSource(), RgDest As Range With Application 'plus ou moins utile 'empêche le rafraichissement de l'écran .ScreenUpdating = False 'Désactive les procédures événementielles 's'il y en a dans le classeur .EnableEvents = False End With With ThisWorkbook.Worksheets("Feuil1") 'Définir la plage que tu veux copier RgSource = . Range("A1:G25").Value End With With Workbooks("Classeur2").Worksheets("Feuil1") 'Définir la la première cellule o͹ tu seras copié 'les données Set RgDest = .Range("B25") End With 'Pour effectuer la copie des données seulement sans format RgDest.Resize(UBound(RgSource, 1), UBound(RgSource, 2)).Value = RgSource With Application .ScreenUpdating = True .EnableEvents = True End With End Sub '------------------------------------------ MichD
Le 01/11/20 Í 12:27, rmill...@gmail.com a écrit :
Je comprends.
Bien je met Í false car lorsque j'envoi des données du classeur1 au classeur2 je fais des opérations dont des copier coller ... je reviens au classeur1 etc. Alors l'usager verrait que ça se promène d'un classeur Í l'autre si Í True. Alors je le met Í False. Mais jje dois remettre Í True par la suite.
Il y a quelque chose qui fait geler Excel. Mais avant ce même code ne causait pas ceci. ??? De lÍ ma question Í savoir si un autre code serait plus efficace.
Pour ce qui est de la macro, je ne peux pas faire grand-chose sans la
voir dans sa totalité.
Une manière simple de copier une plage de données
'------------------------------------------
Sub test()
Dim RgSource(), RgDest As Range
With Application
'plus ou moins utile
'empêche le rafraichissement de l'écran
.ScreenUpdating = False
'Désactive les procédures événementielles
's'il y en a dans le classeur
.EnableEvents = False
End With
With ThisWorkbook.Worksheets("Feuil1")
'Définir la plage que tu veux copier
RgSource = .
Range("A1:G25").Value
End With
With Workbooks("Classeur2").Worksheets("Feuil1")
'Définir la la première cellule o͹ tu seras copié
'les données
Set RgDest = .Range("B25")
End With
'Pour effectuer la copie des données seulement sans format
RgDest.Resize(UBound(RgSource, 1), UBound(RgSource, 2)).Value = RgSource
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
'------------------------------------------
Je comprends. Bien je met Í false car lorsque j'envoi des données du classeur1 au classeur2 je fais des opérations dont des copier coller ... je reviens au classeur1 etc. Alors l'usager verrait que ça se promène d'un classeur Í l'autre si Í True. Alors je le met Í False. Mais jje dois remettre Í True par la suite. Il y a quelque chose qui fait geler Excel. Mais avant ce même code ne causait pas ceci. ??? De lÍ ma question Í savoir si un autre code serait plus efficace.
Pour ce qui est de la macro, je ne peux pas faire grand-chose sans la voir dans sa totalité. Une manière simple de copier une plage de données '------------------------------------------ Sub test() Dim RgSource(), RgDest As Range With Application 'plus ou moins utile 'empêche le rafraichissement de l'écran .ScreenUpdating = False 'Désactive les procédures événementielles 's'il y en a dans le classeur .EnableEvents = False End With With ThisWorkbook.Worksheets("Feuil1") 'Définir la plage que tu veux copier RgSource = . Range("A1:G25").Value End With With Workbooks("Classeur2").Worksheets("Feuil1") 'Définir la la première cellule o͹ tu seras copié 'les données Set RgDest = .Range("B25") End With 'Pour effectuer la copie des données seulement sans format RgDest.Resize(UBound(RgSource, 1), UBound(RgSource, 2)).Value = RgSource With Application .ScreenUpdating = True .EnableEvents = True End With End Sub '------------------------------------------ MichD