Boucles et performance

Fermé
Nicu_69 Messages postés 7 Date d'inscription lundi 25 mars 2019 Statut Membre Dernière intervention 1 avril 2019 - 25 mars 2019 à 14:05
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 1 avril 2019 à 13:38
Bonjour,

J'effectue un code avec des opérations imbriquées. Sur mon formulaire, au bout de quelques secondes, j'ai le message "ne répond pas". Comment optimiser ?

Sub maj_hyptxt()
Dim Siret_rech, Siret_trouv As String
Dim x, xt2 As Variant
form_barre_progression.Show 0
form_barre_progression.Image_barre.Width = 0
form_barre_progression.Label_barre = "0%"
Worksheets("T1 SE ciblées ou visitées").Activate
'formatage txt
Worksheets("T1 SE ciblées ou visitées").Columns("A").Select
Selection.NumberFormat = "@"
'boucle sur T1
For x = 2 To 2000
barre_progression
Worksheets("T1 SE ciblées ou visitées").Activate
Siret_rech = Worksheets("T1 SE ciblées ou visitées").Cells(x, 1)
If Siret_rech = "" Then Exit Sub
If Worksheets("T1 SE ciblées ou visitées").Cells(x, 29) = "" Then GoTo retour
For xt2 = 2 To 2000
'boucle imbriquée sur T2: si les SIRET sont identiques, alors créer un lien hypertexte sur T1
Worksheets("T2 Détails actions").Activate
Siret_trouv = Worksheets("T2 Détails actions").Cells(xt2, 1)
'sortie de boucle au cas où la visite en T2 soit introuvable
If Siret_trouv = "" Then GoTo retour
'création du lien hypertexte si les SIRET correspondent
If Siret_trouv = Siret_rech Then
Worksheets("T1 SE ciblées ou visitées").Activate
Worksheets("T1 SE ciblées ou visitées").Hyperlinks.Add Anchor:=Cells(x, 1), Address:="", SubAddress:="'T2 Détails actions'" & "!A" & xt2, TextToDisplay:=Siret_trouv
xt2 = 2
GoTo retour
End If
Next xt2
retour:
Next x
Unload form_barre_progression
Worksheets("T1 SE ciblées ou visitées").Activate
End Sub

Merci d'avance

Configuration: Windows / Firefox 60.0
A voir également:

8 réponses

T3chN0g3n Messages postés 5088 Date d'inscription samedi 16 février 2019 Statut Membre Dernière intervention 8 novembre 2024 1 138
25 mars 2019 à 15:41
Bonjour,

La première chose à faire est de désactiver le rafraîchissement de l'écran pendant l'éxecution:
Application.ScreenUpdating = False
' Les opérations lourdes ou toute la macro
Application.ScreenUpdating = True

Cdlt.
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié le 25 mars 2019 à 18:56
Bonjour,
en+ de l'indispensable blocage de l'écran indiqué par T3chN0g3n

supprime le + possible tes activate select- selection quant au goto, en + d'^tre inutile et préhistorique, il n'est utilisé que pour aller au gestionnaire d'erreur en fin de procédure

par exemple (forcément non testé)


heu!... en dernière ligne écrire End with avant m^me punition











1
Nicu_69 Messages postés 7 Date d'inscription lundi 25 mars 2019 Statut Membre Dernière intervention 1 avril 2019
26 mars 2019 à 11:28
Merci michel_m. J'ai supprimé tous les Worksheets.Activate qui n'étaient pas indispensables, je tombe à un peu plus d'1 min. d'exécution.
Il me reste juste un petit problème, comment éviter le blocage du poste ("ne répond pas") ? Merci
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié le 26 mars 2019 à 12:05
En fait, ton erreur est de boucler plusieurs fois: on ne devrait boucler que sur le nombre de siret présent en colonne 29 et chercher si l'égalité existe et sur quelle ligne pour construire le lien hypertexte
il faudrait envoyer ton classeur en pièce jointe(uniquement les 2 feuilles T1 T2). pour cela:

Mettre le classeur sans données confidentielles en pièce jointe sur 
https://mon-partage.fr
Dans lien de téléchargement
faire un clic droit- copier l’adresse du lien et le coller dans votre message en cours sur ccm
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié le 26 mars 2019 à 12:18
je n'ai besoin que de la colonne 29 de T1 et La colonne 1 de T2
Un classeur de 2 feuilles comportant que celles ci suffirait
0
T3chN0g3n Messages postés 5088 Date d'inscription samedi 16 février 2019 Statut Membre Dernière intervention 8 novembre 2024 1 138
26 mars 2019 à 12:27
Vous pouvez également faire une barre de progression pour que ce soit plus convivial =)
https://www.excel-easy.com/vba/examples/progress-indicator.html
0
Nicu_69 Messages postés 7 Date d'inscription lundi 25 mars 2019 Statut Membre Dernière intervention 1 avril 2019
26 mars 2019 à 13:27
La barre de progression est déjà en place, merci.
Le classeur est en ligne sous https://mon-partage.fr/f/pjbbgBKr/
C'est vrai que seuls les SIRET ayant eu une visite sont concernés, mais je ne peux pas les isoler...
0
T3chN0g3n Messages postés 5088 Date d'inscription samedi 16 février 2019 Statut Membre Dernière intervention 8 novembre 2024 1 138
26 mars 2019 à 14:11
Oups autant pour moi ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié le 26 mars 2019 à 14:11
bien reçu, merci.

si j'ai pigé :-\

Dans la colonne AC (T1) si on a une date, on connait le Siret colonne A m^me ligne
Dans T2 on cherche la ligne où on retrouve dans toute la colonne A le siret cherché (qui peut ne pas exister?)

On connait ainsi les adresses en T1 et T2 et on peut créer le lien hypertexte dans T1

C'est OK ?
Quant à la barre de progression, on verra à la mettre si nécessaire après des mesures de durée de la la procédure


Mais il faudra peut-^tre penser plus tard à la saisir une nouvelle date dans T1.... mais c'est un autre problème
0
Nicu_69 Messages postés 7 Date d'inscription lundi 25 mars 2019 Statut Membre Dernière intervention 1 avril 2019
26 mars 2019 à 14:39
petites précisions:
pour chaque SIRET en T1, on peut avoir une date de visite en colonne 29.
Si c'est le cas, créer un lien hypertexte en T1 avec la première visite en T2.
Le fichier est une extraction BI4 mensuelle, je ne pourrai ni trier ni ajouter de colonne.
Merci
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
26 mars 2019 à 15:31
je dois m’absenter. sois patient

(c'est presque fini)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
26 mars 2019 à 16:06
bon avant d'y aller
si j'ai bien compris le demande
845 liens hypertext crées en <=1 seconde

https://mon-partage.fr/f/PrGmdhXL/
0
Nicu_69 Messages postés 7 Date d'inscription lundi 25 mars 2019 Statut Membre Dernière intervention 1 avril 2019
26 mars 2019 à 16:12
non, pour la durée c'est largement satisfaisant. Le seul problème qui subsiste, c'est la perte de contrôle ("Excel ne répond pas"). Au pire, les utilisateurs s'habitueront... je dois passer 4 fichiers successivement, cela risque de ne pas être très élégant. Cordialement
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
26 mars 2019 à 16:54
"Excel ne répond pas"

ce problème vient de chez toi et je n'y peux rien
0
T3chN0g3n Messages postés 5088 Date d'inscription samedi 16 février 2019 Statut Membre Dernière intervention 8 novembre 2024 1 138
26 mars 2019 à 16:56
Le PC manque peut-être un peut de puissance ...
0
Nicu_69 Messages postés 7 Date d'inscription lundi 25 mars 2019 Statut Membre Dernière intervention 1 avril 2019
1 avril 2019 à 10:38
Ok, je suis passé de 15 min. à 1 min. d'exécution. Les utilisateurs se contenteront d'un éventuel blocage de poste pendant quelques secondes.
Merci beaucoup pour votre aide.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
1 avril 2019 à 11:15
C'est vrai que passer d'une minute à moins d'une seconde, c'est inutile !!!!

C'est surtout inutile de passer du temps à aider quelqu'un
0
Nicu_69 Messages postés 7 Date d'inscription lundi 25 mars 2019 Statut Membre Dernière intervention 1 avril 2019
1 avril 2019 à 11:31
Merci michel_m. A bientôt pour de nouveaux développements ?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
1 avril 2019 à 13:38
CERTAINEMENT PAS
0