Userform qui disparaît sur un PC mais pas un autre

falsuss

XLDnaute Nouveau
Bonjour à tous !

J'ai un gros problème, très handicapant dans le cadre de mon activité pro et pour lequel je ne trouve pas de solution, car c'est un problème typiquement, à la c... =p

Je suis gérant d'un Escape Game sur Lille et j'ai dev sur une Excel une petite appli pour gérer des chronos, envoyer des sons sur PC, valider des succès/trophées etc ... via une userform.

J'ai tout fait sur mon portable. Tout fonctionne nickel !!! Sur le portable de mon associé, idem !

Mais maintenant que ma boîte est ouverte et que je teste en vrai le programme, sur les ordis pro, j'ai un soucis de plantage systématique de ma userform.

Je ne pense pas que ce soit un soucis de code, car la userform plante, même quand elle est en attente, sans qu'on clique sur quoi que ce soit et sans afficher aucun message. Elle disparaît juste, comme ça, sans raison apparente.

Sur mon PC portable, je l'ai déjà fait tourner des nuits entières, elle reste affichée. Sur les PC fixes pro, au bout de 13,35,14 minutes ... la userform fini par dépop sans crier gare !

Quelqu'un aurait une idée ?

J'espère vraiment trouver car je n'ai pas le budget pour faire développer une appli équivalente =p
 

falsuss

XLDnaute Nouveau
Alors je peux le faire ! D'ailleurs je le fais habituellement systématiquement.

Mais là pour le coup, c'est long, TRES long et indigeste ! D'autant plus que ça fonctionne sur mon portable et ça plante sur un autre fixe, SANS aucun message.

Tu le veux vraiment ? =p
 

falsuss

XLDnaute Nouveau
Je me disais que ce problème était peut-être déjà arrivé à certains.

Voilà le fichier ! Maso =p

Ça plantera forcément car tu n'as pas les fichiers audio et PNG.
Mais bon, pas besoin d'en arriver jusque là, il suffit de cliquer sur le bouton de l'onglet MJ TRACKING, de mettre n'imp, la fameuse userform apparaît ensuite et voilà. Il faut ensuite juste attendre de constater le plantage ou non de la userform.
 

Pièces jointes

  • aide forum.xlsm
    6.5 MB · Affichages: 20
  • aide forum.xlsm
    6.5 MB · Affichages: 17

Staple1600

XLDnaute Barbatruc
Re

Juste une réflexion en passant
Pourquoi donc tu répètes ceci N fois ???
CommandButton6.BackStyle = fmBackStyleTransparent
CommandButton7.BackStyle = fmBackStyleTransparent
CommandButton8.BackStyle = fmBackStyleTransparent
CommandButton9.BackStyle = fmBackStyleTransparent
CommandButton10.BackStyle = fmBackStyleTransparent
CommandButton11.BackStyle = fmBackStyleTransparent
CommandButton12.BackStyle = fmBackStyleTransparent
CommandButton13.BackStyle = fmBackStyleTransparent
CommandButton14.BackStyle = fmBackStyleTransparent
CommandButton15.BackStyle = fmBackStyleTransparent
CommandButton16.BackStyle = fmBackStyleTransparent
CommandButton17.BackStyle = fmBackStyleTransparent
CommandButton18.BackStyle = fmBackStyleTransparent
CommandButton19.BackStyle = fmBackStyleTransparent
CommandButton20.BackStyle = fmBackStyleTransparent
CommandButton21.BackStyle = fmBackStyleTransparent
CommandButton22.BackStyle = fmBackStyleTransparent
CommandButton23.BackStyle = fmBackStyleTransparent
CommandButton24.BackStyle = fmBackStyleTransparent
CommandButton25.BackStyle = fmBackStyleTransparent
CommandButton26.BackStyle = fmBackStyleTransparent
CommandButton27.BackStyle = fmBackStyleTransparent
CommandButton28.BackStyle = fmBackStyleTransparent

Sinon, pour le reste, il y a trop de lignes de code à lire pour ce soir ;)

Ps: Tu n'as jamais pensé à l'emploi de module de classe?
(pour les nombreux CommandButton par exemple)
 

falsuss

XLDnaute Nouveau
Je sais que je fais des pavés dégueux ! =p

Mais ça marche toujours, sans être trop lent etc ...
Je n'ai jamais pris le temps de faire des boucles pour les grosses déclarations par manque de temps (même si je sais qu'au final j'en gagnerai !!!) et j'ai pris cette mauvaise habitude.
 

Staple1600

XLDnaute Barbatruc
Re

Je n'ai pas écrit que j'ai solutionné ton problème!
Juste une réflexion en passant
Pourquoi donc tu répètes ceci N fois ???
Je te dis simplement que vu l'heure qu'il est, ce n'est pas ce soir que je vais me fader la lecture de tout ce code VBA qui effectivement à première vue pourrait être considérablement allégé ;)
 

Staple1600

XLDnaute Barbatruc
Re

Quelle remarque?

Je dis simplement qu'il y a beaucoup de lignes de code VBA dans ton userform
Et quand j'ai commencé à lire ton code, j'ai remarqué qu'il y avait beaucoup de code redondant
D'où le message#8

Mais pour l'heure, je vais me coucher ;)
(car il ne serait pas sage de commencer à étudier ton code VBA en profondeur maintenant)
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Simple suggestion, pas sûr que ça mette le problème en évidence, mais ajouter provisoirement cette procédure :
VB:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If MsgBox("CloseMode = " & CloseMode & vbLf & "Est-ce normal ?", vbYesNo, "Fermeture " & Me.Name) = vbYes Then Exit Sub
Cancel = True
End Sub
 

Lone-wolf

XLDnaute Barbatruc
Bonjour à tous, Le Forum :)

@falsuss

J'ai regarder en gros ton fichier et en l'ouvrant j'ai remarqué une erreur.

ElseIf TextBox4.Value = "MH" Then varroom = "BDD MH"
Alors que la feuille a pour nom BDD Mail. Ensuite quelques améliorations à faire si tu ne veux pas utiliser les Modules de Classe

VB:
Sub New Vision()
'En dessous de Option Explicit, déclare ces variables qui seront globales.
Dim varroom As String, cel As Range, i As Long, k As Long  'au lieu de les répéter 10 fois.
'Fait de même pour les autres variables

If Label25.Caption = "PARAMETRAGE" Then
Chemin = "D:\partage\MJ Tracking\Sons\Paramétrage\"
ElseIf Label25.Caption = "TEASE1" Then
Chemin = "D:\partage\MJ Tracking\Sons\Tease1\"
ElseIf Label25.Caption = "TEASE2" Then
Chemin = "D:\partage\MJ Tracking\Sons\Tease2\"
ElseIf Label25.Caption = "TEASE3" Then
Chemin = "D:\partage\MJ Tracking\Sons\Tease3\"
ElseIf Label25.Caption = "TEASE4" Then
Chemin = "D:\partage\MJ Tracking\Sons\Tease4\"
End If

'Là aussi, tu as ceci à plusieures reprises, éfface ce qui est en trop et met-le dans Userform_Activate() qu'une seule fois.


'Dans le Module Standard, tu inscrit ces 3 chemins comme ceci

Public Const ChemSons As String = "D:\partage\MJ Tracking\Sons\"
Public Const ChemShut As string =  "D:\partage\MJ Tracking\Sons\ShutDown\"
Public Const ChemTrack  As String = "D:\partage\MJ Tracking\PNG\"

fichier1 = ChemTrack & "objet.jpg"
fichier2 = ChemSons & "Paramétrage\"
fichier3 =  ChemShut & "ShutDown\"

' Comme te la fait remarquer Staple1600, tu as X fois commandbutton. Modifie comme ceci
For i = 6 to 28
Controls("CommandButton" & i).BackStyle = fmBackStyleTransparent
Next i

CommandButton11.Caption = "Envier"    ' à échanger avec le 9 et ensuite

For i = 10 to 20
Controls("CommandButton" & i).Caption = ""
Next i

Sheets(varroom).Select - Range("A2").Select -While ActiveCell.Value <> "" -ActiveCell.Offset(1, 0).Select -Wend    'à changer par

Set cel = Sheets(varroom).range("a2")
If cel <> "" Then cel.Offset(1, 0).Select

ActiveWorkbook.Worksheets(varroom).sort.SortFields.Clear, à changer par
Sheets(varroom).sort.SortFields.Clear

Range("CK100000").Select
Cells.Find(What:=Range("CJ2").Value, After:=ActiveCell, à changer par

Set cel = Range("CK100000")
Cells.Find(What:=Range("CJ2").Value, After:=cel,

' Tu as 3 fois For each sh, pourquoi faire?

For Each sh In ActiveSheet.Shapes
      For k = 5 to 7
            If sh.TopLeftCell.Address = Range("A" & k).Address Then sh.Delete
      Next k
Next sh
End Sub


Si MH se réfère à la feuille BDD Mail, met plutôt "Mail" à la place.

Dans UserForm2

VB:
Option Explicit
Dim WsCube As Worksheet, WsMail As Worksheet, i As Long, k as Long

Private Sub UserForm_Initialize()
    Set WsCube = Sheets("BDD Cube")
    Set WsMail = Sheets("BDD Mail")
End Sub

Private Sub Label100_Click()
    If Label100.BackStyle = fmBackStyleTransparent Then
        Label100.BackStyle = fmBackStyleOpaque
        Label99.BackStyle = fmBackStyleTransparent
        Label101.BackStyle = fmBackStyleTransparent
        Range("A1") = 1
        Range("B1") = "Mail"
        TextBox9.Value = "Mail"
    Else
        Label100.BackStyle = fmBackStyleTransparent
        Range("a1, b1").ClearContents   'Idem pour les autres
    End If
End Sub

Private Sub Label119_Click()
'Ici change textbox9 par la 8
If TextBox9.Value = "Cube" Then
  With WsCube


  End With

  ElseIf TextBox9.Value = "Mail" Then

'Et ici
  With WsMail
         k = 7
         For i = 2 to 7
                k = k + 1
               .Range("a" & i) = Controls("TextBox" & k)
         Next i
  End With
  End If
'Au lieu de Range("a2") = TextBox8 - Range("a3") = TextBox9 etc.
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 636
Messages
2 111 460
Membres
111 149
dernier inscrit
Fred_BD2S