Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Gros problème de ralentissement au lancement d'un inputbox

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous,
Je vous souhaite une belle journée

Je reviens vers nos ténors car j'ai un grave souci
Notre fichier de travail à toujours eu quelques ralentissement quand nous lançons un inputbox.
Mais depuis quelques temps, ça devient catastrophique.
Notamment au lancement de l'inputbox de recherche.
C'est devenu quasiment permanent ... 10 à 15 minutes d'attente à chaque lancement et ça toute la journée. Cela nous bloque dans notre travail.

A force de recherches, j'ai pensé qu'il s'agissait d'un souci de mémoire.
Selon mes lectures internet, pensant que la mémoire pourrait être libérée au fur et à mesure, j'ai ajouté à la fin des instructions Set ... :"Set ... = Nothing"
Malheureusement sans succès.

En fait, il semblerait que ce soit l'utilisation du Processeur qui soit en cause car
il passe pendant les blocages à plus de 47% d'utilisation alors que normalement il ne dépasse pas les 5%.

Je joins les éléments suivants :
- l'image info disque qui montre un espace libre de 327 Go,
- l'image info du système,
- l'image de l'état du processeur aux moments des bugs de ralentissement,
- le code de l'UserForm de recherche,
VB:
Sub Recherche_youky()
nom = InputBox("Cherche N° Client :" & Chr(10) & "      - Si pas de n°," & Chr(10) & "            - ou erreur n°," & Chr(10) & "                  Recommencez !", "Recherche")
If nom = "" Then
[a6].Select
Sheets("format-numero").Visible = False
Exit Sub
End If
Sheets("format-numero").Range("h3") = ""
  q = ActiveSheet.Index
  For q = q To ActiveSheet.Index + Sheets.Count - 1
    K = (q - 1) Mod (Sheets.Count) + 1
With Sheets(K).UsedRange
Application.ScreenUpdating = False
Range([g2], Cells(Rows.Count, "h").End(xlUp)).Activate
Set C = .Find(nom, LookAt:=xlPart)   'LookAt:=xlpart dans cellule - LookAt:=xlWhole) 'cellule entière
[a1].Activate
If Not C Is Nothing Then
firstAddress = C.Address
Do
On Error Resume Next
Sheets(K).Select
C.Activate
    Application.ScreenUpdating = True
    ActiveWindow.ScrollRow = Selection.Row
    If ActiveSheet.Name = "CopieAppels" Then
    Selection.RowHeight = 50
    End If

    If ActiveSheet.Name = "SuivisAppels" Then
    If Cells(ActiveCell.Row, 7) = C Or Cells(ActiveCell.Row, 8) = C Then

    Rows("6:6").Copy
    Cells(ActiveCell.Row, 1).Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Selection.RowHeight = 300

    End If
    End If
    Cells(ActiveCell.Row, 1).Select

If ActiveSheet.Name = "SuivisAppels" And Cells(ActiveCell.Row, 7) <> C And Cells(ActiveCell.Row, 8) <> C Then
rep = MsgBox(ActiveSheet.Name & " votre N° : " & C & " est absent ! Continuer la recherche ?", 4 + 32, "Sélection")
Sheets("format-numero").Visible = False
Else
rep = MsgBox(C & " : OK dans " & ActiveSheet.Name & Chr(10) & "" & Chr(10) & "Cellule - ligne :  " & C.Address & Chr(10) & Chr(10) & "" & "Continuer la recherche ?", 4 + 32, "Résultat")
End If
If rep = vbNo Then
Application.ScreenUpdating = False
Sheets("format-numero").Visible = False
Exit Sub
End If
Application.ScreenUpdating = False
Sheets("format-numero").Range [h3] = ""
Sheets("format-numero").Visible = False
If ActiveSheet.Name = "CopisAppels" Then
Sheets("SuivisAppels").Select
End If
Application.ScreenUpdating = True
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> firstAddress
End If
End With
  Next q
MsgBox "Ben NON : y'a pas ou y'a plus !"
Application.ScreenUpdating = False
Sheets("format-numero").Visible = False
End Sub
Profane complet en la matière, je ne sais plus quoi faire.
Auriez-vous des idées, solutions ou pistes vers où me diriger ?

Avec mes remerciements,
Amicalement,
lionel,
 

Pièces jointes

  • infos_disque.jpg
    30.6 KB · Affichages: 65
  • infos_systeme.jpg
    105.3 KB · Affichages: 35
  • gestionnaire taches.jpg
    127.7 KB · Affichages: 34
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
- Si je lance la macro "Public Sub BoutonRecherche()" = ça beugue (ralentissement),
- si j'éxécute à partir du débogage = ça beugue pas,
Incompréhensible pour moi
 

Staple1600

XLDnaute Barbatruc
Re

Concernant ce que je dis par rapport au bouton bordé de rouge?

[Précisions sur ce que je disais plus bas]
C'est cette partie du code du WorkBook_Open()
qu'il aurait fallut mettre en commentaire avant de joindre ton fichier
Le plus simple ou sur étant de mettre tout le code de ThisWorkBook en commentaire.
 

Usine à gaz

XLDnaute Barbatruc
Tu as certainement raison mais j'ai pensé que ce serait mieux de mettre le fichier dans l'intégralité de son utilisation
 

fanch55

XLDnaute Barbatruc
Bonjour à tous,
sur mon Excel 2016 64 bits avec 16 mo de mémoire et une carte mère de type ordinateur fixe ( pas portable ),
aucun ralentissement quand je fais une recherche .
Il faut dire que comme je ne sais pas quoi chercher, j'ai quasi immédiatement le message comme quoi ce n'est pas trouvé .
J'ai essayé de tracer les modules( après les avoir débloqué ), mais je dois avouer que je m'y perd, d'autant plus que je n'ai pas trouvé l'Userform fautif ...
 

Usine à gaz

XLDnaute Barbatruc
Bonjour fanch55,

Merci de t'être penché sur mon "usine à gaz"

En fait le blocage est à plusieurs niveaux :
- la fenêtre de la recherche ne s'affiche pas et ça mouline (souvent jusqu'à 15mn d'attente),
- et après affichage, on n'a pas la main pour rentrer l'objet de la recherche (encore jusqu'à 15 mn d'attente),
lionel,
 

Staple1600

XLDnaute Barbatruc
Bonsoir fanch55

sur mon Excel 2016 64 bits avec 16 mo de mémoire et une carte mère de type ordinateur fixe ( pas portable ),
Tu voulais dire Go, je suppose ?

Sinon, je vois que je ne suis pas le seul que la profusion et le multitude pertube
J'ai essayé de tracer les modules( après les avoir débloqué ), mais je dois avouer que je m'y perd,

=>Usine à gaz
Mais il y a un truc que je ne pige pas.
Tu parles d'userform dans ton premier message, mais dans la macro associée au bouton sur la feuille SuiviAppels (donc Public Sub BoutonRecherche()) n'affiche pas d'userform, sauf erreur de ma part?
 

Usine à gaz

XLDnaute Barbatruc
JM, oui, je me suis trompé ce n'est pas un UserForm c'est la fenêtre de la recherche.

Ce qui est à chercher, ce sont des n° de téléphone.
Dans la feuille SuivisAppels, il y a 2 lignes.

Les N° à chercher sont :
- 33000000003 ou 33000009003,
- 33000000005ou 33000009005,
lionel
 
Dernière édition:

fanch55

XLDnaute Barbatruc
Ben, quand je clique sur le carré de cadre rouge, je n'arrive pas pas à un userform mais un inputbox dans recherche_youki ( comme Staple ) .
Dans recherche_youki, je pense que tu devrais déjà corriger ton Find avec un Sélection.find puisque tu as fait un activate juste avant ..
Set C = Selection.Find(nom, LookAt:=xlPart) 'LookAt:=xlpart dans cellule - LookAt:=xlWhole) 'cellule entière
ou tu fais un find sur la colonne concernée mais surtout pas la feuille entière
 

Staple1600

XLDnaute Barbatruc
Re

=>Usine à gaz
Il n'y a pas de feuille SaisiAppels
Le bouton dont on parle est sur la feuille SuiviAppels

Question au passage:
Tu utilises la procédure de job75 =>Sub Gerard() qui passe par un tableau pour la recherche?
Car celle-ci doit être plus rapide, non ?

[Dernier conseil avant repas du soir]
Un fichier plus simplifié avec moins de modules et moins d'userform serait plus facile d'usage.
Car avec le fichier actuel, c'est pas évident de naviguer dans le projet VBA.
A toi de voir de que tu en penses et si tu as le temps de simplifier le fichier.
Et si tu devais rejoindre un fichier exemple, prends bien soin de "désactiver" le code dans ThisWorkBook afin que les répondeurs n'aient pas de mauvaises surprises.
[/Dernier conseil]

Dernière piste:
Les interactions entre les nombreuses et longues procédures dans le code de la feuille SuiviAppels ?
 

Staple1600

XLDnaute Barbatruc
Re

Vu la quantité de code VBA à lire, pour le moment , je repasse juste pour un conseil et un exemple
Tu peux alléger ton code et le rendre plus rapide en évitant les Select
Exemple
Ceci
Code:
Sub Effacerdonnées()
    Range("A4:A10000,I4:J10000,N4:X10000,AA4:AH10000,AJ4:AJ10000,AL4:AL10000,AN4:AN10000,AP4:AP10000,AR4:BA20000"). _
        Select
    Range("AR4").Activate
    Selection.ClearContents
    Range("N4").Select
End Sub
peut s'écrire
Code:
Sub Effacerdonnées()
Range("A4:A10000,I4:J10000,N4:X10000,AA4:AH10000,AJ4:AJ10000,AL4:AL10000,AN4:AN10000,AP4:AP10000,AR4:BA20000").ClearContents
End Sub
Bonne fin de soirée.

PS: Ce serait vraiment plus facile avec une PJ simplifiée.
A toi de de voir
 

Staple1600

XLDnaute Barbatruc
Re

=>Usine à gaz
Quand je dis simplifié, c'est dans le cas où le problème est lié à la feuille SuiviAppels et qu'il n'y a pas d'appesl aux Userforms
Normalement une version avec SuiviAppels et les feuilles nécessaires à la recherche et le code VBA impliqué dans la recherche devrait suffire.
(Donc ce serait une version sans les userforms et juste avec les modules nécessaires)
Ainsi on aurait vraiment beaucoup moins de code à lire.
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
727
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…