Screenupdating = false

Le
rmill...
Bonjour,
Depuis Excel 2013 j'ai noté à plusieurs reprises qu'il m'éta=
is nécessaire de gérer différemment le Application.ScreenUpd=
ating = False. Par exemple si ce n'est à true dans certaines situati=
ons il arrive que l'écran gèle.

Par le code ci-dessous même si c'est bien à False (je valide et c=
'est le cas) lorsque le Application.goto est lancé Excel nous am=
ène à cet endroit. Est-ce normal? Ou devrais-je utiliser un autre=
code? Qu'en pensez-vous?

J'ai Excel 2016 Office 365. Merci à l'avance.

Application.ScreenUpdating = False
'Dim Var_NodeCompte
Var_NodeCompte = Feuil3.Cells(Feuil3.Range("CN_TreeviewNodesZone").Fi=
nd(What:=UF_Treeview.TreeViewAvis.SelectedItem.Text, LookIn:=xlValues, =
LookAt:=xlWhole).Row, Feuil3.Range("CN_TreeviewCompteZone").Column).Value

If Application.ScreenUpdating = False Then
MsgBox "False"
Else
MsgBox "true"
End If
Application.Goto Feuil9.Range("CN_ChifCpteZone").Find(What:=Var_NodeC=
ompte, LookIn:=xlValues, LookAt:=xlWhole)
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
MichD
Le #26555516
Le 26/10/20 à 12:18, a écrit :
Application.Goto Feuil9.Range("CN_ChifCpteZone").Find(What:=Var_NodeCompte, LookIn:=xlValues, LookAt:=xlWhole)

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...
Le #26555513
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 #26555512
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
rmill...
Le #26558408
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 #26558427
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
Poster une réponse
Anonyme