ScreenUpdating disfonctionnement

  • Initiateur de la discussion Initiateur de la discussion Darnel
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Darnel

XLDnaute Impliqué
Bonjour


J'ai un soucis avec ScreenUpdating :

Je l'ai placé de part et d'autre du code d'une de mes macro, bourrées de If, Then, Else, End If, qu'ils soient successif ou imbriqués, y en a un pacquet

Le problème c'est que qand la macro s'execute, selon l'action à mener (determinée par mon pacquet de If...) j'ai un "pseudo défilement" de l'écran, or j'ai bien : Application.ScreenUpdating = False au début et
Application.ScreenUpdating = True à la fin

J'ai tester en ajoutant un peu partout avant les If "majeurs" des Application.ScreenUpdating = False
C'est un peu mieu mais pas top

Si quelqu'un a une idée du pourquoi du comment ...

Merci
 
Re : ScreenUpdating disfonctionnement

Bonjour à tous,

Dan, sauf erreur de ma part j'en étais resté ou l'on ne pouvais pas selectionner ou activer une cellule d'une autre feuille directement, en une seule ligne de code, comme dans ta ligne ci-dessous :

Code:
Sheets("Stock").Range("A5:BU5").activate

Il fallait d'abord activer la feuille en question, puis selectionner activer la cellule. Les versions mac ou pc diffèrent pour ce cas (je ne connais pas mac) ?

J'ai testé également ce code sous Excel2000 et ca bogue !

Petite question subsidiare, pourquoi préfères tu activale à select ?

Bon week end à tous

@+
 
Re : ScreenUpdating disfonctionnement

re


Merci à vous

Zeltron, Je regarde le lien, j'essaye et je te tien au courant

Dan, Merci encore de te pencher sur mon code
En effet, "miseàj_Inter" et "feuimodif" sont deux autres macro (j'en ai plus de 16) de mon fichier

Pour ce qui est de ma (ou plutot mes) Versions escel, je n'ai tester que chez moi avec Excel2000
Au bureau, je croi que c'est excel 2003 que j'utilise, mais je n'ai pas pu tester (samedi oblige)
J'ai pas trop le temps de voir maintenant, mais je vous averti quand les modifs et les tests seront fait.

Encore une question aux spécialistes des milisecondes gagnées ... : vaut il mieu que j'utilise Les FormulaR1C1:= ou les Value=
pour remplir une cellule via macro...?

Merci pour votre aide
A bientot
 
Re : ScreenUpdating disfonctionnement

Re,

Oups ! Exact Pierrot. Il faut activer la feuille avant. Là au boulot j'ai été trop vite.
Pour ce qui est des Select, je les évite toujours car cela ralentit l'exécution d'une macro.

Darnel, tu peux utiliser "Value", il n'y a aucun souci de ce coté là.
J'attends donc ta macro complète pour voir ce que l'on peut encore faire pour améliorer.

A te lire
 
Re : ScreenUpdating disfonctionnement

Bonjour,

après quelques jours en cours, j'ai enfin réussi à apporter les modifs.
Je pense appliquer les With End with à la suite du code, je doit seulement remplacer les activeCell par Range ("B1") ou ("B2") et accompagné de xldown offset(1,0), enfin cf le code que je vous joint.
Code:
Sub Valide_modif()
'champs en majuscule
Range("B5") = UCase(Range("B5"))
Range("B7") = UCase(Range("B7"))
Sheets("modifications").Select
'orientation en fonction de la modifictation de l'Etat du contrat
If Range("N3").Value = Range("M3").Value Then
'orientation base de données fonction de l'Etat du contrat
        If Range("E3").Value = "EN COURS" Then
        'Copie des données de la feuille Stock vers la feuille Données.
        'On remplace les infos enregistrées précedemment par les nouvelles.
        With Sheets("Données")
            .Unprotect
            Sheets("Stock").Range("A5:BU5").Copy: ActiveCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
            End With
        Màjlist_inter
        'On reprend les champs renseignés dans la Fiche que l'on veut modifier.
        feuille_modif
        Sheets("Données").Protect
        Application.Goto Sheets("Données").Range("b2")
 
        Else
            If Range("E3").Value = "A L' ETUDE" Then
            With Sheets("Données études")
            .Unprotect
            Sheets("Stock").Range("A5:BU5").Copy: ActiveCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
            End With
            Màjlist_inter
            'On reprend les champs renseignés dans la Fiche que l'on veut modifier.
            feuille_modif
            Sheets("Données études").Protect
            Application.Goto Sheets("Données études").Range("b2")
            Else
            With Sheets("Données résils")
            .Unprotect
            Sheets("Stock").Range("A5:BU5").Copy: ActiveCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
            End With
            Màjlist_inter
            'On reprend les champs renseignés dans la Fiche que l'on veut modifier.
            feuille_modif
            Sheets("Données résils").Protect
            Application.Goto Sheets("Données résils").Range("b2")
            End If
        End If
 
Else
        'orientation base de données fonction Résils , étude, ou En cours
        If Range("E3").Value = "EN COURS" Then
        'Enregistrement de la fiche dans la base (feuille Données)
        Sheets("Données").Select
            If IsEmpty(Range("B3")) Then
            Sheets("Données").Unprotect
            Sheets("Stock").Range("A5:BU5").Copy
            Sheets("Données").Range("B1").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
            Màjlist_inter
            Application.Goto Sheets("Données").Range("a1")
            Else
            Sheets("Données").Unprotect
            Sheets("Stock").Range("A5:BU5").Copy
            Sheets("Données").Range("B2").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
            Màjlist_inter
            Application.Goto Sheets("Données").Range("a1")
            End If
            Sheets("modifications").Select
            'On efface la fiche précédente de la base de données
            If Range("N3").Value = "EN COURS" Then
            Sheets("Données").Unprotect
            Sheets("Données").Select
            ActiveCell.Select
            Selection.EntireRow.Delete
            tri_num
            Range("A1").Select
            Else
                If Range("N3").Value = "A L' ETUDE" Then
                Sheets("Données études").Unprotect
                Sheets("Données études").Select
                ActiveCell.Select
                Selection.EntireRow.Delete
                tri_num
                Range("A1").Select
                Else
                Sheets("Données résils").Unprotect
                Sheets("Données résils").Select
                ActiveCell.Select
                Selection.EntireRow.Delete
                tri_num
                Range("A1").Select
                End If
            End If
        Sheets("Données").Select
        tri_num
        Range("A1").Select
        'On reprend les champs renseignés dans la Fiche que l'on veut modifier.
        feuille_modif
        Sheets("Données").Protect
        Application.Goto Sheets("Données").Range("b2")
        Else
            If Range("E3").Value = "A L' ETUDE" Then
            Sheets("Données études").Select
                If IsEmpty(Range("B3")) Then
                Sheets("Données études").Unprotect
                Sheets("Stock").Range("A5:BU5").Copy
                Sheets("Données études").Range("B1").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
                Application.Goto Sheets("Données études").Range("a1")
                Else
                Sheets("Données études").Unprotect
                Sheets("Stock").Range("A5:BU5").Copy
                Sheets("Données études").Range("B2").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
                Application.Goto Sheets("Données études").Range("a1")
                End If
                Sheets("modifications").Select
                'On efface la fiche précédente de la base de données
                If Range("N3").Value = "EN COURS" Then
                Sheets("Données").Unprotect
                Sheets("Données").Select
                ActiveCell.Select
                Selection.EntireRow.Delete
                tri_num
                Range("A1").Select
                Else
                    If Range("N3").Value = "A L' ETUDE" Then
                    Sheets("Données études").Unprotect
                    Sheets("Données études").Select
                    ActiveCell.Select
                    Selection.EntireRow.Delete
                    tri_num
                    Range("A1").Select
                    Else
                    Sheets("Données résils").Unprotect
                    Sheets("Données résils").Select
                    ActiveCell.Select
                    Selection.EntireRow.Delete
                    tri_num
                    Range("A1").Select
                    End If
                End If
            Sheets("Données études").Select
            tri_num
            Range("A1").Select
            'On reprend les champs renseignés dans la Fiche que l'on veut modifier.
            feuille_modif
            Sheets("Données études").Protect
            Application.Goto Sheets("Données études").Range("b2")
            Else
            'Enregistrement de la fiche dans la base données résils
            Sheets("Données résils").Select
                If IsEmpty(Range("B3")) Then
                Sheets("Données résils").Unprotect
                Sheets("Stock").Range("A5:BU5").Copy
                Sheets("Données résils").Range("B1").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
                Application.Goto Sheets("Données résils").Range("a1")
                Else
                Sheets("Données résils").Unprotect
                Sheets("Stock").Range("A5:BU5").Copy
                Sheets("Données résils").Range("B2").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
                Application.Goto Sheets("Données résils").Range("a1")
                End If
                Sheets("modifications").Select
                'On efface la fiche précédente de la base de données
                If Range("N3").Value = "EN COURS" Then
                Sheets("Données").Unprotect
                Sheets("Données").Select
                ActiveCell.Select
                Selection.EntireRow.Delete
                tri_num
                Range("A1").Select
                Else
                    If Range("N3").Value = "A L' ETUDE" Then
                    Sheets("Données études").Unprotect
                    Sheets("Données études").Select
                    ActiveCell.Select
                    Selection.EntireRow.Delete
                    tri_num
                    Range("A1").Select
                    Else
                    Sheets("Données résils").Unprotect
                    Sheets("Données résils").Select
                    ActiveCell.Select
                    Selection.EntireRow.Delete
                    tri_num
                    Range("A1").Select
                    End If
                End If
            Sheets("Données résils").Select
            tri_num
            Range("A1").Select
            'On reprend les champs renseignés dans la Fiche que l'on veut modifier.
            feuille_modif
            Sheets("Données résils").Select
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            Range("b2").Select
            End If
        End If
End If
Application.ScreenUpdating = True
End Sub

j'attend vos avis

EDITION : Dan, petit problème, le code passant par with bug sur mon PC.
Je viens de tester et ca ne marche pas...
Si quelqu'un a une idée, je suis preneur, en attendant je retourne sur mon vieu code à moi ... 😛 😛
 
Dernière édition:
Re : ScreenUpdating disfonctionnement

Bonjour le fil,

Darnel, je viens de regarder ton code et j'y ai apportté quelques modifications, cependant, ne pouvant tester, je ne garantis pas l'exactitude du code. D eplus, ayant la fleme de tout refaire, je t'ai modifié seulement la première partie, mais si cela fonctionne, tu peux faire facilement la même chose pour le reste.

Code:
Sub Valide_modif()
'champs en majuscule
Range("B5") = UCase(Range("B5"))
Range("B7") = UCase(Range("B7"))
With Sheets("modifications")
    If .Range("N3").Value = .Range("M3").Value Then
        Select Case .Range("E3").Value
        Case "EN COURS"
            Sheets("Données").Unprotect
            feuil = "Données"
        Case "A L' ETUDE"
            Sheets("Données études").Unprotect
            feuil = "Données études"
        Case Else
            Sheets("Données résils").Unprotect
            feuil = "Données résils"
        End Select
        Sheets("Stock").Range("A5:BU5").Copy: ActiveCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Màjlist_inter
        feuille_modif
        Application.Goto Sheets(feuil).Range("b2")
    Else
    'orientation base de données fonction Résils , étude, ou En cours

Tiens nous au courant,

@+
 
Re : ScreenUpdating disfonctionnement

re,

Heuu, bizarre, je viens de tester et je n'ai pas d'erreur à part le faite que j'avais oublié le End With (a placer juste avant le Application.ScreenUpdating = True)

Je viens de tester vite fais le bout de code que je t'ai proposé et il a l'air de fonctionner.

Si tu ne trouves pas l'erreur, est-ce tu peux joindre un petit bout de ton fichier avec le code que je vois ou ca merdouille.

@+
 
Re : ScreenUpdating disfonctionnement

Re,

Bon Darnel, je vois que Porcinet s'est occupé de toi et là j'ai l'impression que l'on recommence tout à zéro ! pfff....

Ce que j'aurais souhaité c'est qu'une fois modifié, tu places le code ici de manière à le regarder complétement dans un fichier par exemple. Là je vois par exemple que des instructions Msgbox ont disparues.
D'autres instructions comme je te l'avais conseillé avant n'ont pas été remplacées.

Si le code "With" buggue, tu as probablement fait une petite erreur dans ta macro. Là comme tu replaces l'ancienne macro, je ne peux pas faire grand chose par rapport aux indications que je t'ai données.

A te lire
 
Re : ScreenUpdating disfonctionnement

Salut Dan,

Excuse de reprendre le truc a zéro, je n'avais pas suivi toutes les modif que tu avais proposé a Darnel, mais comme il a demandé un avis sur un certains bout de code, je ne me suis pas amusé a aller voir plus haut toute la démarche que tu lui avait proposé, j'ai seulement essayer de le réduire.

J'espère que tu ne m'en voudras pas trop 🙄

@+
 
Re : ScreenUpdating disfonctionnement

Re

Dan, j'ai enlever les msgBox, car sinon, j'exède le nombre max de caractères d'un message.
Pour ce qui est du code que j'ai mis, il me semblai bien avoir mis celui que j'ai modifié avec tes conseils. il se peu, cependant que j'ai commis une erreur en entrant le code que tu m'a conseillé en dernier.
la ligne buggant semble etre celle ci :

Sheets("Stock").Range("A5:BU5").Copy: ActiveCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Je n'ai par contre pas eu le temps de porter la modif sur la totalité du code, et vayant que cela boguait, je n'ai pas pris le temps de continuer.

J'espère que tu ne m'en veu pas trop d'avoir tester la démarche de porcinet, mais j'essaye un peu tout ce qu'on me propose, ca me permet aussi d'apprendre.

Enfin, pour le code que j'ai mis, j'en ai profité pour eliminer des choses inutiles que j'avais mis auparavant. Pour ce qui est des
Sheets("feuil1").Unprotect
Sheets("feuil1").Select
Je ne les ai pas tous supprimés ou remplacés comme tu me l'as conseiller, car dans certains cas la macro ne fonctionne plus car elle necessite la selection de la feuille.

Voilà, ou j'en suis.
Je me relis, je teste encore deux trois trucs qui me viennent à l'esprit et je vous tient au courant.
PS: le fichier va etre dur à joindre car, lorsqu'il est vidé de toutes les données, qu'il est compressé, que j'ai enlever les images qu'il contient, il fait encore plus de 780 Ko.
Je regarde ce que je peu faire.
Merci pour votre aide.
 
Re : ScreenUpdating disfonctionnement

re

Voici déjà pour que vous puissiez voir à quoi ressemblent une partie de mes macros.


EDITION 14h57: Porcinet, j'avais effectivement commis une erreur. Cependant, mon pc semble ne pas vouloir la même partie de code que celle de Dan à Savoir :
Sheets("Stock").Range("A5:BU5").Copy: ActiveCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

La partie en orange étant celle surlignée par le deboggeur.
EDITION 17h07
CA y est ca fonctionne.
Je pense que le soucis se trouve dans la necessité de selectionner la feuille dans laquelle je veux coller les valeurs, j'ai donc remplacé la ligne ci dessus par la suivante :
Sheets(feuil).Select
ActiveCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Je l'ai testé et le résultat obtenu est celui escompté pour le code de Porcinet.
Pas encore testé pour le tien Dan, mais je pense que ça marche aussi, si je selectionne la feuille destinataire avant.


Si vous voulez je peux vous envoyer le fichier via mail.
A vous lire.
Merci encore à vous pour votre patience.
 

Pièces jointes

Dernière édition:
Re : ScreenUpdating disfonctionnement

re

Porcinet, j'ai tester ton code sur la totalité de mon code comme suit et Ca marche

Code:
Sub Valide_modif()
' Macro enregistrée le 30/11/05 par S574180
'Contrôle des champs de saisie obligatoires
Application.ScreenUpdating = False
Sheets("modifications").Select
If IsEmpty(Range("B4")) Then
    MsgBox "Numéro de police manquant"
    Exit Sub
End If
If IsEmpty(Range("E3")) Then
    MsgBox "ETAT MANQUANT"
    Exit Sub
End If
If IsEmpty(Range("B5")) Then
    MsgBox "Nom client manquant"
    Exit Sub
End If
If IsEmpty(Range("B7")) Then
    MsgBox "Nom courtier manquant"
    Exit Sub
End If
If IsEmpty(Range("B9")) Then
    MsgBox "Type de Garantie manquant"
    Exit Sub
End If
If IsEmpty(Range("B10")) Then
    MsgBox "Matériel assuré manquant"
    Exit Sub
End If
If IsEmpty(Range("B27")) Then
    MsgBox "Prime TTC Pa025 manquante"
    Exit Sub
End If
If Range("E20").Value = "Date d'effet" Then
    If IsEmpty(Range("F20")) Then
        MsgBox "Date d'effet manquante"
        Exit Sub
    End If
Else
    If IsEmpty(Range("F20")) Then
        MsgBox "Date de début des travaux manquante"
        Exit Sub
    End If
End If
If Range("E21").Value = "Date prévis°lle réception" Then
    If IsEmpty(Range("F21")) Then
        MsgBox "Date prévisionnelle de reception des travaux manquante"
        Exit Sub
    End If
End If
If Range("A20").Value = "Echéance" Then
    If IsEmpty(Range("B20")) Then
        MsgBox "Echéance manquante"
        Exit Sub
    End If
End If
If IsEmpty(Range("B2")) Then
    MsgBox "Date de création manquante"
    Exit Sub
End If
If IsEmpty(Range("B3")) Then
    MsgBox "Date de modification manquante"
    Exit Sub
End If
If IsEmpty(Range("B39")) Then
    MsgBox "Résumé Garanties manquant"
    Exit Sub
End If
If Range("A21").Value = "Préavis" Then
    If IsEmpty(Range("B21")) Then
        MsgBox "Préavis manquant"
        Exit Sub
    End If
End If
'champs en majuscule
Range("B5") = UCase(Range("B5"))
Range("B7") = UCase(Range("B7"))
Sheets("modifications").Select
'orientation en fonction de la modifictation de l'Etat du contrat
With Sheets("modifications")
    If .Range("N3").Value = .Range("M3").Value Then
        Select Case .Range("E3").Value
        Case "EN COURS"
            Sheets("Données").Unprotect
            feuil = "Données"
        Case "A L' ETUDE"
            Sheets("Données études").Unprotect
            feuil = "Données études"
        Case Else
            Sheets("Données résils").Unprotect
            feuil = "Données résils"
        End Select
        Sheets("Stock").Range("A5:BU5").Copy
        Sheets(feuil).Select
        ActiveCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Call Màjlist_inter
        Call feuille_modif
        Application.Goto Sheets(feuil).Range("b2")
    Else
        Select Case .Range("E3").Value
        Case "EN COURS"
            Sheets("Données").Unprotect
            feuil = "Données"
        Case "A L' ETUDE"
            Sheets("Données études").Unprotect
            feuil = "Données études"
        Case Else
            Sheets("Données résils").Unprotect
            feuil = "Données résils"
        End Select
            Sheets("Stock").Range("A5:BU5").Copy
            If IsEmpty(Range("B3")) Then
            Sheets(feuil).Range("B1").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
            Call Màjlist_inter
            Application.Goto Sheets("Feuil").Range("a1")
            Else
            Sheets(feuil).Range("B2").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
            Call Màjlist_inter
            Application.Goto Sheets("Données").Range("a1")
            End If
        Select Case .Range("N3").Value
        Case "EN COURS"
            Sheets("Données").Unprotect
            feuil = "Données"
        Case "A L' ETUDE"
            Sheets("Données études").Unprotect
            feuil = "Données études"
        Case Else
            Sheets("Données résils").Unprotect
            feuil = "Données résils"
        End Select
            Sheets(feuil).Select
            ActiveCell.Select
            Selection.EntireRow.Delete
            Call tri_num
            Range("A1").Select
End If
End With
Application.ScreenUpdating = True
End Sub

Dan, je teste ta version et je te dis.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

H
  • Question Question
Réponses
4
Affichages
1 K
Hamadouche
H
I
Réponses
2
Affichages
1 K
isataz
I
B
Réponses
10
Affichages
2 K
P
Réponses
0
Affichages
2 K
plouff
P
B
Réponses
5
Affichages
1 K
billpancho
B
Réponses
17
Affichages
9 K
Compte Supprimé 979
C
L
Réponses
5
Affichages
28 K
L
Retour