Microsoft 365 Excel - Problème de macro

Ben92290

XLDnaute Nouveau
Bonjour,
Je ne suis pas expert en macro.
J'ai copié/collé une macro pour avoir un menu déroulant dans la feuille "Global" contenant toutes les plaques d'immatriculation de mon parc auto figurant sur les différentes feuilles de ce même classeur.
Ca fonctionne bien mais malheureusement au bout d'un certain temps ma macro ne tient pas et s'efface toute seule.
Pouvez-vous svp corriger ma macro?

Le fichier étant lourd, je vous fais parvenir le lien de la pièce jointe
Merci de votre aide.
 
Dernière modification par un modérateur:

vgendron

XLDnaute Barbatruc
Hello
si ton fichier est si gros, c'est sans doute que les images insérées sont dans un format gourmand (genre.. BMP?)
tu peux poster ici ton fichier en ne gardant QUE quelques onglets

j'ai quand meme regardé (ce que je ne fais pourtant jamais d'habitude lorsque le fichier est envoyé via cijoint ou wetransfert

1) tu peux simplifier le code de ton formulaire comme ca
Code:
Private Sub CommandButton2_Click()
    If Me.ComboBox1.ListIndex = -1 Then
      MsgBox "Indiquez le véhicule"
      Me.ComboBox1.SetFocus
      Exit Sub
    End If
    Sheets(ComboBox1.Value).Activate
    Unload Me
End Sub

Private Sub UserForm_Initialize()
Dim Ws As Worksheet
    Me.ComboBox1.Clear
    For Each Ws In ActiveWorkbook.Worksheets
        If Ws.Name <> "GLOBAL" And Ws.Name <> "calculs" Then
            Me.ComboBox1.AddItem Ws.Name
        End If
    Next Ws
End Sub

2) et le code dans le thisworkbook me semble étrange..
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If ActiveSheet.Name = "Stat 2010" Or ActiveSheet.Name = "PrŽsentation" Then Exit Sub
 
    With ActiveSheet
        LastLine = .Range("D" & .Rows.Count).End(xlUp).Row
        For i = LastLine To 14 Step -1
            If .Range("D" & i) = "CT" Then
                .Range("C8") = .Range("A" & i)
                GoTo Révision
            End If
        Next i
        .Range("C8") = .Range("E4")
Révision:
    For i = LastLine To 14 Step -1
        If .Range("D" & i) = "Révision" Then
            .Range("F8") = ((.Range("B" & i) + 30000) \ 30000) * 30000 '==>/3000 et *3000 = *1
            Exit Sub
        End If
    Next i
    .Range("F8") = ((.Range("E5") + 30000) \ 30000) * 30000
     
    End With
End Sub
 
Dernière édition:

Lolote83

XLDnaute Barbatruc
Bonjour à tous,
Comme le dis @vgendron (que je salue au passage), le fichier est très lourd et cela est certainement dû aux différentes photos.
De plus, dans celui-ci, tu laisse apparaitre des plaques d'immatriculation et photos présentant ces mêmes plaques.
Le fichier est cependant bien ficelé et joliment présenté
Mais la charte du forum interdit tous fichiers présentant des données non anonymisées.
Je te conseille donc de supprimer la publication de ce dit fichier, d'en refaire un avec 3 ou 4 onglets et sans données "sensibles"
Mais peut être que notre ami @vgendron à déjà répondu favorablement à ta demande
@+ Lolote83
 

Benouze

XLDnaute Nouveau
[
Hello
si ton fichier est si gros, c'est sans doute que les images insérées sont dans un format gourmand (genre.. BMP?)
tu peux poster ici ton fichier en ne gardant QUE quelques onglets

j'ai quand meme regardé (ce que je ne fais pourtant jamais d'habitude lorsque le fichier est envoyé via cijoint ou wetransfert

1) tu peux simplifier le code de ton formulaire comme ca
Code:
Private Sub CommandButton2_Click()
    If Me.ComboBox1.ListIndex = -1 Then
      MsgBox "Indiquez le véhicule"
      Me.ComboBox1.SetFocus
      Exit Sub
    End If
    Sheets(ComboBox1.Value).Activate
    Unload Me
End Sub

Private Sub UserForm_Initialize()
Dim Ws As Worksheet
    Me.ComboBox1.Clear
    For Each Ws In ActiveWorkbook.Worksheets
        If Ws.Name <> "GLOBAL" And Ws.Name <> "calculs" Then
            Me.ComboBox1.AddItem Ws.Name
        End If
    Next Ws
End Sub

2) et le code dans le thisworkbook me semble étrange..
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If ActiveSheet.Name = "Stat 2010" Or ActiveSheet.Name = "PrŽsentation" Then Exit Sub
 
    With ActiveSheet
        LastLine = .Range("D" & .Rows.Count).End(xlUp).Row
        For i = LastLine To 14 Step -1
            If .Range("D" & i) = "CT" Then
                .Range("C8") = .Range("A" & i)
                GoTo Révision
            End If
        Next i
        .Range("C8") = .Range("E4")
Révision:
    For i = LastLine To 14 Step -1
        If .Range("D" & i) = "Révision" Then
            .Range("F8") = ((.Range("B" & i) + 30000) \ 30000) * 30000 '==>/3000 et *3000 = *1
            Exit Sub
        End If
    Next i
    .Range("F8") = ((.Range("E5") + 30000) \ 30000) * 30000
     
    End With
End Sub
 

Benouze

XLDnaute Nouveau
Bonjour à tous,
Comme le dis @vgendron (que je salue au passage), le fichier est très lourd et cela est certainement dû aux différentes photos.
De plus, dans celui-ci, tu laisse apparaitre des plaques d'immatriculation et photos présentant ces mêmes plaques.
Le fichier est cependant bien ficelé et joliment présenté
Mais la charte du forum interdit tous fichiers présentant des données non anonymisées.
Je te conseille donc de supprimer la publication de ce dit fichier, d'en refaire un avec 3 ou 4 onglets et sans données "sensibles"
Mais peut être que notre ami @vgendron à déjà répondu favorablement à ta demande
@+ Lolote83
Bonjour
Merci pour ton retour
Effectivement, je vais faire ce que tu me suggère :)
 

Discussions similaires

Statistiques des forums

Discussions
313 866
Messages
2 103 082
Membres
108 521
dernier inscrit
manouba