Useform à maintenir au premier plan

Bonjour à toutes et à tous,

Je vous explique le contexte de mon problème :

- J'ai fait une macro sur un classeur Excel qui me permet d'ouvrir un classeur remplie de données, sélectionner des valeurs suivant plusieurs critères puis de les copier/coller dans mon classeur avant de fermer le classeur de données. La macro fait donc plusieurs aller/retours entre les 2 classeurs et l'affichage à l'écran est un peu chaotique ! J'ai donc figer l'affichage avec application.screenUpdating = False pour gagner en temps d'exécution.

J'ai voulu améliorer un peu ma macro et permettre l'affichage d'une barre de chargement (la macro prend un peu de temps à être exécutée).

J'ai donc créé une useform évoluant en fonction de l'avancement de la macro.

Cependant, et mon problème arrive ici, la useform ne cesse de passer du premier à l'arrière plan malgré le screenUpdating mis sur False.

Existe t'il une solution pour maintenir ma useform au premier plan durant le processus ?

Merci à vous,

Bonjour Clacla et bienvenu, bonjour le forum,

Il serait bon de voir, au pire, ton code, au mieux, les deux fichiers et le code pour voir si on peut optimiser et éviter ton problème...

Bonjour ThauThème,

Bien sur, l'idée est donc de faire apparaitre la useform suivante (reprise sur un tuto) :

image

Dans la quelle j'ai rentré le code suivant :

image

Le principe étant de faire varier la taille de barreChargement en fonction d'une variable, la dite variable étant l'avancé de 0 à 100 taux. La valeur du label évolue également selon la même variable.

J'ai ensuite "fait grandir" taux dans ma macro de copié/coller afin de simuler la progression tout en appelant actualiser(nouveauxTaux) à certains points du code.

Quelques exemples de ma macro :

- On a ici mon classeur que je renomme result et le classeur contenant les données à aller chercher dont le chemin d'accès est contenu dans ma liste nommée FichierBAO.

Charg est la variable qui va représenter l'avancé du chargement en %

J'appelle ensuite ma une forme pour l'afficher et actualiser

image

- Par la suite le code évolue de cette façon :

image

Puis je finis mon code par :

image

A 100 ma useform se ferme toute seule.

Seulement voila, pendant la boucle, j'aimerai que la useform reste visible tout du long, ce qui n'est pas le cas puisqu'elle ne cesse de passer en arrière plan et se fait donc cacher pas la feuille excel.

J'espère être clair, n'hésitez pas à demander plus de précisions le cas échéant

Re,

Désolé, je ne travaille pas sur PhotoChope je peux donc rien faire de tes captures d'écran. Le site te permet de copier/coller le code formaté grâce aux balise </>...

Re, autant pour moi, je reprend le message précédant :

Bien sur, l'idée est donc de faire apparaitre la useform suivante (reprise sur un tuto) :

capture d ecran 2022 04 08 160846

Dans la quelle j'ai rentré le code suivant :

Sub afficher()
    Me.Show 0
End Sub

Sub actualiser(taux As Integer)
    barreChargement.Width = barreTexte.Width * taux / 100
    barreTexte = taux & "%"
    If taux = 100 Then Unload Me
End Sub

Le principe étant de faire varier la taille de barreChargement en fonction d'une variable, la dite variable étant l'avancé de 0 à 100 taux. La valeur du label évolue également selon la même variable.

J'ai ensuite "fait grandir" taux dans ma macro de copié/coller afin de simuler la progression tout en appelant actualiser(nouveauxTaux) à certains points du code.

Quelques exemples de ma macro :

- On a ici mon classeur que je renomme result et le classeur contenant les données à aller chercher dont le chemin d'accès est contenu dans ma liste nommée FichierBAO.

Charg est la variable qui va représenter l'avancé du chargement en %

J'appelle ensuite ma une forme pour l'afficher et actualiser

Private Sub Import1_Click()

Formulaire_import_BAO.Hide

Application.ScreenUpdating = False

Dim i As Byte, c As Byte
Dim charg As Integer
Dim BAO As Workbook, result As Workbook
Dim m() As Range
Dim Charlie As String

Set result = ThisWorkbook
Set BAO = Workbooks.Open(Filename:=FichierBao.List(0), local:=True)
c = 0

charg = 1

barreProgression.afficher
barreProgression.actualiser (charg)

- Par la suite le code évolue de cette façon :

i = 1
préco:
For i = i To UBound(m) 'm contenant les limites des ranges que je veux copier, les ranges ont été rentrées plus tot
    BAO.Activate
    If Left(m(i).Offset(1, 0), 17) = "Modification : Sc" Then GoTo Scénario 'une vérification me permettant de passer à létapes suivante
    BAO.Sheets(1).Range(m(i), m(i + 1).Offset(-1, 8)).Select 'je sélectionne la range
    Selection.Copy
    Windows(result.Name).Activate
    Workbooks(result.Name).Worksheets("P" & i).Visible = True 'j'affiche la sheet "P" & i
    Workbooks(result.Name).Worksheets("P" & i).Activate
    Range("BD101").Select '
        ActiveSheet.Paste 'Je colle les valeurs
    Application.CutCopyMode = False 'je vide le cache

    charg = 50 + CInt(i) 'Ici, je vais simuler l'avancé de la barre de chargement (de façon douteuse et pas préçise, l'objectif est visuel)
    barreProgression.actualiser (charg) 'je réactualise

Next i

Scénario:
For i = i To UBound(m) 'meme chose que l'étape d'avant

Puis je finis mon code par :

    Workbooks(BAO.Name).Close

    barreProgression.actualiser (90)

Windows(result.Name).Activate
Workbooks(result.Name).Worksheets("Start").Activate 'je me replace sur la feuille d'où l'utilisateur a lancé la macro

barreProgression.actualiser (100)
Application.ScreenUpdating = True

End Sub

A 100 ma useform se ferme toute seule.

Seulement voila, pendant la boucle, j'aimerai que la useform reste visible tout du long, ce qui n'est pas le cas puisqu'elle ne cesse de passer en arrière plan et se fait donc cacher pas la feuille excel.

J'espère être clair, n'hésitez pas à demander plus de précisions le cas échéant

Re,

Génial ! je vient tout juste de recevoir ma commande sur AmasdeZone ! Un tireur des vers du nez dernier cri... Ça va m'être bien pratique...

Bon, tout ça pour dire :

Le code complet et en une seule fois de la macro Import, c'est possible ?!... Mieux ! Le fichier pour éviter de perdre du temps, de l'énergie et d'étrenner ma commande...

Rechercher des sujets similaires à "useform maintenir premier plan"