XL 2013 Afficher patienter pendant de l'exécution d'un macro

badraaliou4

XLDnaute Occasionnel
Bonjour mes chers,
J'ai trois feuille: Accueil, compte et load
Mon Macro permet de copier des données de la feuille accueil vers la feuille compte.
Je veux que pendant le Exécution du macro il affiche la feuille"load"
Ci-dessous mon code qui ne marche pas.
VB:
Sheets("load").select
application.screenupdating=false
sheets("Accueil").select
.............
application.screenupdating=true
Sheets("load").select
sheets("Accueil").select
range("c7").select
end sub
Avec ce code la feuille Accueil reste toujours afficher.
Merci pour votre aide?
 

Roland_M

XLDnaute Barbatruc
re

la barre de progression n'est valable que dans une boucle !
dans ton cas il vaut mieux mettre un message dans le statusbar, c'est très simple.
si tu veux en majuscule pour mieux le voir et aussi peut être le centrer en mettant des espaces au début
exemple:
Code:
Sub ajoutclient()
Dim mouvement As String
    Dim compte As String
    Dim montant As String
    Dim libelle As String
'trouver les informations du contenu
    mouvement = Worksheets("accueil").Range("c7").Value
    compte = Worksheets("accueil").Range("c9").Value
    montant = Worksheets("accueil").Range("c11").Value
    libelle = Worksheets("accueil").Range("c13").Value
'si les champs ne sont pas remplis
    If mouvement = "" Or compte = "" Or montant = "" Or libelle = "" Then
        MsgBox ("Merci de renseigner les champs vide")
    Sheets("Accueil").Select
    Range("C7").Select
'si tous les champs sont remplis
    Else
    Application.DisplayStatusBar = True 'aff barre '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    Application.StatusBar = "VEUILLEZ PATIENTER ! ..." 'message <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
'ajouter une ligne
    Sheets("Compte client").Select
    Range("a12").Select
    ActiveCell.End(xlDown).Select
    Selection.ListObject.ListRows.Add AlwaysInsert:=True

'ajouter aussi le compte client
    Sheets("Accueil").Select
    Range("C5").Select
    Selection.Copy
    Sheets("Compte client").Select
    Range("A12").Select
    ActiveCell.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.NumberFormat = "m/d/yyyy"
    Sheets("Accueil").Select
    Range("C9").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Compte client").Select
    Range("B12").Select
    ActiveCell.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Accueil").Select
    Range("C13").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Compte client").Select
    Range("C10000").Select
    ActiveCell.End(xlUp).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Accueil").Select
    Range("C11").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Compte client").Select
    Range("H10000").Select
    ActiveCell.End(xlUp).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Accueil").Select
    Range("C7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Compte client").Select
    Range("I10000").Select
    ActiveCell.End(xlUp).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
'supprimer les données saisies dans la page accueil
    Sheets("Accueil").Select
    Range("C11").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("C9").Select
    Selection.ClearContents
    ComboBox1 = ""
    Range("C13").Select
    Selection.ClearContents
    Range("C7").Select
    Selection.ClearContents
    ActiveWorkbook.Save
    'terminé
    Application.StatusBar = "OPERATION TERMINÉE !" ' efface <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    T! = Timer: While Abs(Timer - T) < 1: Wend 'pause 1 sec aff.msg
    Application.StatusBar = "" ' efface <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
End If
End Sub
 

badraaliou4

XLDnaute Occasionnel
Merci beaucoup mais j'ai essayé, ça ne marche toujours pas.
j'ai maintenant créé une nouvelle feuille "load" avec outils de texte qui contient mon message"Merci de patienter...."
Est-il possible de rester afficher cette "Message" pendant d'execution du macro
j'ai essayé avec le code ci-dessous mais ça ne marche pas.
Merci pour votre aide
VB:
Sub ajoutcomptecaisse()
  Sheets("load").Shapes("Message").Visible = True
  Application.Wait (Now + TimeValue("00:00:10"))
 
  '.........exécutions codes............
 
  Sheets("load").Shapes("Message").Visible = False
End Sub
 

Roland_M

XLDnaute Barbatruc
bonjour,

je regrette mais l'exemple que je t'ai fourni ne peut que fonctionner, c'est très simple !
excuses moi mais je crois que tu n'y comprends rien et que tu te poses toi même des problèmes !

ceci que tu proposes en est une preuve:
Application.Wait (Now + TimeValue("00:00:10"))
c'est une pause de 10 secondes, pendant ce temps l'exécution est suspendu, quel est l'intérêt !?

il faut un message affiché pendant le déroulement de la macro, c'est différent, et la barre d'état convient bien !
il y a des méthodes un peu plus compliquées avec userform mais je préfère même pas aborder le sujet si déjà avec le statusbar tu t'en sorts pas !?

maintenant, est ce que c'est nécessaire un message !? la macro est elle si longue que ça !?
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour
et oui un wait de 10 secondes au milieu d'une macro va forcement la faire durer 10 secondes de plus ;)
bradaaliou4
au plus simple
tu ajoute un userform dans le quel tu met un label avec un message du genre "patientez" tu le show avant ta boucle tu le unload a la fin de ta boucle (après le next !!!!!!!!)
commence comme ça, tu évoluera avec tes connaissances et la compréhension du contexte et des outils avec les quels tu travaille
il a mangé du lion Rolland:p
 

badraaliou4

XLDnaute Occasionnel
Ça marche avec ce code.
Mais application.screenupdating a un coïncidence avec combobox.
Je vais joindre le fichier dans peu de temps
VB:
Sub ajoutcomptecaisse()
  Sheets("load").Shapes("Message").Visible = True
  'fin=timer +2
'Do while timer <fin   ' ne sert à rien !!!
'Doevents
'Loop
  Application.ScreenUpdating=False

  '.........exécutions codes............

  Sheets("load").Shapes("Message").Visible = False
Application.ScreenUpdating=True
End Sub
 

Pièces jointes

  • Classeur1.xlsm
    37.7 KB · Affichages: 2
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
alors si je comprend bien tu affiche un sheets avec je suppose le shape message
tu exécute un code

dis moi un peu si il n'y a pas de select ou activate et autre procédé d'activation ou sélection
a quoi te sert la manipulation du screen updating
je peux te le dire : A rien

maintenant si il y a des select ou activate dans le code exécute ,c'est ça qu'il faut corriger et c'est certainement la raison de la lenteur d'exécution
 

patricktoulon

XLDnaute Barbatruc
Le code à l'intérieur permet de faire des vas et viens entre les différentes feuilles c'est pourquoi j'utilise applicarion.screenupdate

c'est absolument inutile!!!!!!!!!
on aurait mieux fait de t'expliquer les méthodes de travail sur sheets avant de te perdre dans les méandres de quelque chose d'insoluble

tu n'a pas besoins de naviguer de feuille en feuille (activation/déactivation)pour travailler dessus

c'est donc dans ton code qui est exécuté qu'il faut revoir la méthode et non ajouter des patch a coup de screen updating ou application.wait qui ne font au final que ralentir et bloquer le visuel si ce n'est l'exécution elle même du code
envoie le code exécuté pour que je comprenne de quoi il en retourne
 

patricktoulon

XLDnaute Barbatruc
re
bon alors perso je vois pas l'utilité d'une telle mécanique pour enregistrer 4 valeurs dans une plage
Mais au combien si ça te fait plaisir que cela te tienne
en tout cas chez moi ca fonctionne et rien n'est bloqué (je fait 1,2,3,10 enregistrement et ça fonctionne très bien)
mais je répète c'est absolument inutile , l'enregistrement se fait en moins de temps qu'un battement de sil
pourquoi veux tu absolument ralentir avec du superflu

si c’était un enregistrement de milliers de cellules je comprendrais mais la Non !!
inutile,inutile,inutile,inutile !!!!!!(c'est bon je l'ai assez dis???)
tu perds ton temps avec ça c'est mon opinion ca vaut pas le coup
 

Discussions similaires

Réponses
5
Affichages
112

Statistiques des forums

Discussions
312 196
Messages
2 086 099
Membres
103 116
dernier inscrit
kutobi87