ScreenUpdating

C

Claudio54

Guest
Bonsoir et bravo à tous pour l'activité du forum !

Voila, sur la "Feuil1" de mon classeur, j'utilise un userform pour selectionner et ouvrir d'autres fichiers excel afin d'y extraire des données pour pouvoir les copier dans une feuille du classeur actif.
Je voudrai qu'à l'ouverture et la lecture des différentes cellules des classeurs succéssifs que je dois ouvrir et ensuite refermer, que l'écran reste sur la feuille de départ.

Le traditionnel "ScreenUpdating=false" ne donnant pas satisfaction dans ce cas.

Merci à l'avance
 
Y

Yeahou

Guest
Bonjour Claudio54, le forum

Alors c'est ton code qui pose problème, il te faut utiliser screenupdating uniquement pendant l'ouverture des classeurs, pendant la désactivation revenir à ton classeur original, réactiver l'affichage et ensuite récupérer tes données sans faire de select.

Cordialement, A+
 
C

Claudio54

Guest
voici un extrait de mon code :

If choixfich = 1 Or choixfich = 4 Then
With ProgressBar1
i = 1
j = 0
.Min = 0
.Max = items

ScreenUpdating = False

'ouverture fichier

Workbooks.OpenText Filename:="A:\3.txt", Origin:=xlMSDOS, StartRow:=1, _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
:=False, Tab:=True, Semicolon:=True, Comma:=False, Space:=False, _
Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), _
Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), _
Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array( _
18, 1), Array(19, 1), Array(20, 1)), TrailingMinusNumbers:=True


datefich = Sheets("3").Range(cellule)

For h = 1 To 19
For v = 5 To 36
If Sheets("3").Range(Chr(64 + h) & v) <> "" Then
var(h, v) = Sheets("3").Range(Chr(64 + h) & v)
i = i + 1
Me.Caption = T & " Traitement " & i & " opérations sur " & items
.Value = i
End If
'DoEvents
Next v
Next h



Je n'utilise pas de .select et pourtant l'écran passe sur le fichier ouvert même avec l'instruction Screenupdating=false


Je ne comprend pas pourquoi !
 
Y

Yeahou

Guest
Re bonjour

le code suivant fait ce que je t'ai expliqué car le seul moyen que je connaisse pour qu'un fichier ne s'affiche pas à l'ouverture est de l'ouvrir en mode de lecture séquencielle ou binaire ce qui n'est pas le cas présenté ici.
La, on ouvre le fichier quand l'affichage est désactivé, on réactive le classeur originel aprés avoir référencé le nouveau. On peut maintenant travailler facilement sans select et sans que les données soient dans le classeur actif.

A+

Dim Cla_Affiche As Workbook
Dim Cla_Mem As Workbook
If choixfich = 1 Or choixfich = 4 Then
With ProgressBar1
i = 1
j = 0
.Min = 0
.Max = items

Set Cla_Affiche = ActiveWorkbook
ScreenUpdating = False

'ouverture fichier

Set Cla_Mem = Workbooks.OpenText(Filename:="A:\3.txt", Origin:=xlMSDOS, StartRow:=1, _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
:=False, Tab:=True, Semicolon:=True, Comma:=False, Space:=False, _
Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), _
Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), _
Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array( _
18, 1), Array(19, 1), Array(20, 1)), TrailingMinusNumbers:=True)
Cla_Affiche.Activate
ScreenUpdating = True

datefich = Cla_Mem.Sheets("3").Range(cellule)

For h = 1 To 19
For v = 5 To 36
If Cla_Mem.Sheets("3").Range(Chr(64 + h) & v) <> "" Then
Var(h, v) = Cla_Mem.Sheets("3").Range(Chr(64 + h) & v)
i = i + 1
Me.Caption = T & " Traitement " & i & " opérations sur " & items
.Value = i
End If
'DoEvents
Next v
Next h

Cla_Mem.Close False
 
C

Claudio54

Guest
Merci Yeahou,

j'ai exécuté le code que tu me préconise mais ça plante sur l'instruction Set Cla_Mem = Workbooks.OpenText(Filename..... avec .OpenText en surligné bleu !

Est-ce que tu peux m'éclairer la dessus ?

D'avance merci
 
Y

Yeahou

Guest
Re Bonjour

bizarre, le référencement direct sur opentext marche pas
essaye cela, on référence aprés avoir ouvert, ça marche chez moi

A+

Workbooks.OpenText Filename:="A:\3.txt", Origin:=xlMSDOS, StartRow:=1, _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
:=False, Tab:=True, Semicolon:=True, Comma:=False, Space:=False, _
Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), _
Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), _
Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array( _
18, 1), Array(19, 1), Array(20, 1)), TrailingMinusNumbers:=True
Set cla_mem = ActiveWorkbook
 
C

Claudio54

Guest
Salut Yeahou et merci de tes réponses.


Effectivement, je n'ai plus d'erreur mais le screenupdating=false ne fonctionne tjs pas. Si j'execute le code à partir d'un module ==> pas de problème.
Si j'execute le code à partir d'un Userform ==> c'est là que ça ne va pas. C'est comme si on ne mettait pas le "ScreenUpdating=False".

Help !
 
C

Claudio54

Guest
voici les 2 fichiers en questions : exemple.xls et 3.txt
Le 3.txt se trouve et se trouvera toujours sur disquette.
Dans cette version allégée, il faudra cliquer directement sur OK car le choix des autres possibilités est effacé pour un gain de place.

Au cas où : je masque les commandes donc pour les réafficher, CTRL+SHIFT+Z

Encore merci
 
Y

Yeahou

Guest
Bonjour Claudio54

il y a un problème bizarre dans ton code
tu as écrit
ScreenUpdating= False
logiquement, Excel rattache cette propriété à application ce qui ne provoque pas de problème de compilation mais en réalité, l'instruction n'est pas prise en compte en exécution. Remplace par Application.ScreenUpdating=False et tout rentrera dans l'ordre.

Cordialement, A+
 

Discussions similaires

Réponses
4
Affichages
334

Statistiques des forums

Discussions
312 299
Messages
2 086 996
Membres
103 423
dernier inscrit
Guyom GIL