Ruban grisé

Bonjour à tous,

J'ai un fichier central qui permet d'éditer des rapports. J'ai 2 rapports disponibles

1- sur l'activité

2- sur le prévisionnel

Les 2 partagent sensiblement le même code et pourtant

1 -

capture

Comme vous le voyez toute la barre au-dessus est grisée, pas de ruban, pas de nom de fichier, même pas la croix pour fermer le fichier !

2-

capture2

Mais là tout va bien, je n'y comprends rien !

Si j'enregistre puis je ferme le fichier qui déconne et que je l'ouvre à nouveau, c'est bon !

J'ai essayé sur un autre ordinateur et le problème persiste

Quelqu'un a-t-il déjà eu ce genre de problème ? Une idée peut-être ?

Je vous remercie pour votre aide

Bonsoir Pink Rabbit,

Peut tu écrire sur le fichier grisé ? Apparemment tu arrives à le fermer. S'il est ouvert seul, est il aussi grisé ? Avec une simple image on ne peut donner une explication. Il faut vérifier son code, feuille et module.

Bonjour X Cellus,

Je peux remplir des cellules sur le fichier grisé. Je le ferme uniquement avec des raccourcis clavier.

Je ne peux pas vraiment l'ouvrir seul puisque le fichier se génère par code vba à partir d'un fichier mère

D'ailleurs quand j'exécute le code étape par étape je n'ai pas ce problème d'affichage...

Voici le code incriminé:

Private Sub Export_Activite()
    ' Exporte les données activité TTC et HT dans un classeur à part
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False

    Dim Fin As Integer, i As Integer, j As Integer
    Dim TVA As Double

    ' Reset la TVA Moyenne
    Application.Run Macro:="Service_Format.TVA_Moyenne"

    ' Dernière ligne d'activité
    Fin = ThisWorkbook.Sheets("Activité").Range("ActiFin").Row

    ' Créé un nouveau classeur et 1er onglet = TTC
    Workbooks.Add
    ActiveWorkbook.ActiveSheet.Name = "TTC"

    ' Afficher la barre de chargement
    UserFormLoading.Show 0
    Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=5

    ' Copie de la page Activité
    ThisWorkbook.Sheets("Activité").Range("A:ND").Copy
    ' Colle en formules et format, masque B (SBGN)
    With ActiveWorkbook.Sheets("TTC")
        .Range("A1").PasteSpecial Paste:=xlPasteFormulas
        .Range("A1").PasteSpecial Paste:=xlPasteFormats

        .Range("A:A").EntireColumn.Delete shift:=xlToLeft
        .Range("A:A").EntireColumn.Hidden = True

        With .Range("B2")
            .Value = "Activité par jour"
            .Font.Size = 9
        End With
        With .Range("B3")
            .Value = "TTC"
            .Font.Bold = True
        End With
        .Range("C4").Select
        ActiveWindow.FreezePanes = True
        .Range("B1").Select
    End With
    ' Masque le quadrillage
    ActiveWindow.DisplayGridlines = False

    ' Copie de la feuille TTC pour faire le HT et calculer les natures en HT
    ActiveWorkbook.Sheets("TTC").Copy After:=Sheets(1)
    ActiveSheet.Name = "HT"

    Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=10

    With ActiveWorkbook.Sheets("HT")
        ' Passer la colonne SBGN en revue
        For i = 7 To Fin
            If .Cells(i, 1).Value = "N" Then
                ' Récupérer la TVA de la nature en cours
                TVA = 1 + ThisWorkbook.Sheets("CA").Range("Nature_CA").Find(.Cells(i, 2).Value, , xlFormulas, xlWhole, , , True).Offset(0, 2).Value
                ' Passer les 365 colonnes pour remplacer par le HT
                For j = 3 To 367
                    .Cells(i, j).Value = .Cells(i, j).Value / TVA
                Next j
            ' Couleur des services
            ElseIf .Cells(i, 1).Value = "S" Or i = Fin Then
                .Range(Cells(i, 2).Address, Cells(i, 367).Address).Interior.Color = 6961158
            End If
            Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=10 + (i - 6) / (Fin - 7) * 20
        Next i
        .Range("B1:B3").Interior.Color = 6961158
        .Range("B3").Value = "HT"
    End With

    Call Recap_Mensuel_Activite

    Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=100
    Unload UserFormLoading

    ' Masque le quadrillage, full screen
    ActiveWindow.DisplayGridlines = False
    ActiveWorkbook.Application.WindowState = xlMaximized
    Application.Calculation = xlCalculationAutomatic

End Sub

Private Sub Recap_Mensuel_Activite()
    ' Procédure appelée par Export_Activite

    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False

    Dim Fin As Integer, i As Integer, j As Integer, Colonne_Debut As Integer, Colonne_Fin As Integer, Realise As Integer
    Dim Previsionnel As Integer, Nb_Ligne As Integer
    Dim TVA As Double
    Dim Total As Long
    Dim Mois(12) As String
    Dim Origine As Worksheet, Destination As Worksheet

    Mois(1) = "Janvier"
    Mois(2) = "Fevrier"
    Mois(3) = "Mars"
    Mois(4) = "Avril"
    Mois(5) = "Mai"
    Mois(6) = "Juin"
    Mois(7) = "Juillet"
    Mois(8) = "Aout"
    Mois(9) = "Septembre"
    Mois(10) = "Octobre"
    Mois(11) = "Novembre"
    Mois(12) = "Decembre"

    'Dernière ligne d'Activité
    Fin = ThisWorkbook.Sheets("Activité").Range("ActiFin").Row

    ' Créé un classeur et premier onglet = "TTC"
    ActiveWorkbook.Sheets.Add Before:=Sheets(1)
    ActiveWorkbook.ActiveSheet.Name = "Récap TTC"

    Set Origine = ThisWorkbook.Sheets("Activité") '!!!!!!
    Set Destination = ActiveWorkbook.Sheets("Récap TTC")

    ' Copie des formats et formules des première colonnes d'activité
    Origine.Range("A:Q").Copy
    ' Copie en formule et formats
    With Destination
        .Range("A1").PasteSpecial Paste:=xlPasteFormulas
        .Range("A1").PasteSpecial Paste:=xlPasteFormats
        ' Masquer la colonne SBGN
        .Range("B:B").EntireColumn.Hidden = True
        .Range("A:A").EntireColumn.Delete shift:=xlToLeft

        ' Insérer le titre
        With .Range("B2")
            .Value = "Activité par mois"
            .Borders(xlBottom).LineStyle = xlNone
            .Font.Size = 9
        End With
        With .Range("B3")
            .Value = "TTC"
            .Font.Bold = True
            .Borders(xlTop).LineStyle = xlNone
         End With
        .Range("C1:P1").Font.Bold = False
    End With

    Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=35

    ' Passer chaque mois et faire les calculs
    For i = 1 To 12
        ' Colonne début/fin selon plage nommée
        Colonne_Debut = Origine.Range(Mois(i)).Column
        Colonne_Fin = Origine.Range(Mois(i)).Column + Origine.Range(Mois(i)).Columns.Count - 1
        ' Compte sur la plage le nombre de jours réalisés/prévisionnels

        Realise = Application.CountIf(Origine.Range(Cells(3, Colonne_Debut).Address, Cells(3, Colonne_Fin).Address), "Réalisé")
        Previsionnel = Origine.Range(Mois(i)).Columns.Count - Realise

        ' Saisie du nom de mois
        Destination.Cells(1, 2 + i).Value = Mois(i)

        ' Saisie du nombre de jours réalisés & Prévisionnels
        With Destination.Cells(2, 2 + i)
            .Value = Realise
            .Font.Size = 8
            If Realise < 2 Then
                .NumberFormat = "0""j. Réalisé"""
            Else
                .NumberFormat = "0""j. Réalisés"""
            End If
        End With
        With Destination.Cells(3, 2 + i)
            .Value = Previsionnel
            If Previsionnel < 2 Then
                .NumberFormat = "0""j. Estimé"""
            Else
                .NumberFormat = "0""j. Estimés"""
            End If
        End With

        ' Somme des lignes Nature CA
        With Origine
            For j = 7 To Fin - 1
                If .Cells(j, 2).Value = "N" Or .Cells(j, 3).Value = "Couverts" Then
                    Total = Application.Sum(.Range(Cells(j, Colonne_Debut).Address, Cells(j, Colonne_Fin).Address))
                    Destination.Cells(j, 2 + i).Value = Total
                End If
            Next j
        End With
        Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=30 + i / 12 * 40
    Next i

    ' Nombre de ligne correspond au Nb Nature + Nb Groupes + 3(CA, Couvert, Ticket Moyen)
    Nb_Ligne = Application.CountA(ThisWorkbook.Sheets("CA").Range("Groupe")) + Application.CountA(ThisWorkbook.Sheets("CA").Range("Nature_CA")) + 3

    ' Calcul du Total annuel par la somme des natures sur la colonne 16 & Formules pour le ticket moyen
    With Destination
        For i = 2 To Fin - 1
            If .Cells(i, 2).Value Like "*Ticket Moyen" Then
                .Cells(i, 16).Formula = _
                    "=IFERROR(" & "P" & i - Nb_Ligne + 1 & "/P" & i - 1 & ",0)"
            Else
                .Cells(i, 16).Formula = _
                    "=SUM(" & "C" & i & ":N" & i & ")"
            End If
        Next i
    ' Formule pour la somme Ticket Moyen à part
    .Range("P6").Formula = "=IFERROR(P4/P5,0)"

    ' Formatage de la colonne total
        .Cells(1, 16).Value = "Année"
        .Cells(2, 16).NumberFormat = "0""j. Réalisés"""
        .Cells(3, 16).NumberFormat = "0""j. Estimés"""
        .Columns(15).Clear
        .Columns(15).ColumnWidth = 3
        With .Range("C2:P3")
            .Font.Color = 0
            .Font.Size = 8
            .Interior.Color = 16777215
        End With
        ' Remettre les bordures noires latérales colonne 15 et 17
        With .Range("O1:O" & Fin)
            With .Borders(xlLeft)
                .Color = 0
                .LineStyle = xlContinuous
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With .Borders(xlRight)
                .Color = 0
                .LineStyle = xlContinuous
                .TintAndShade = 0
                .Weight = xlThin
            End With
        End With
        With .Range("Q1:Q" & Fin)
            With .Borders(xlLeft)
                .Color = 0
                .LineStyle = xlContinuous
                .TintAndShade = 0
                .Weight = xlThin
            End With
        End With
        .Range("C4").Select
        ActiveWindow.FreezePanes = True
        .Range("B1").Select
    End With

    ' Masque le quadrillage
    ActiveWindow.DisplayGridlines = False

    Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=80

    ' Copie de la feuille TTC pour faire le HT et calculer les natures en HT
    Destination.Copy After:=Sheets(1)
    ActiveSheet.Name = "Récap HT"

    With ActiveWorkbook.Sheets("Récap HT")
        ' Passer la colonne SBGN en revue
        For i = 7 To Fin
            If .Cells(i, 1).Value = "N" Then
                ' Récupérer la TVA de la nature en cours
                TVA = 1 + ThisWorkbook.Sheets("CA").Range("Nature_CA").Find(.Cells(i, 2).Value, , xlFormulas, xlWhole, , , True).Offset(0, 2).Value
                ' Passer les 12 colonnes pour remplacer par le HT
                For j = 3 To 14
                    .Cells(i, j).Value = .Cells(i, j).Value / TVA
                Next j
            ElseIf .Cells(i, 1).Value = "S" Or i = Fin Then
                .Range(Cells(i, 2).Address, Cells(i, 14).Address).Interior.Color = 6961158
                .Cells(i, 16).Interior.Color = 6961158
            End If
        Next i
        .Range("B2:B3,B1:N1,P1").Interior.Color = 6961158
        .Range("B3").Value = "HT"
        .Range("B1").Select
    End With

    Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=90

    ActiveWorkbook.Sheets("Récap TTC").Activate

End Sub

Rien de vraiment spécial, je créé un classeur je colle des formats/formules d'un autre fichier et effectue quelques calculs/mises en formes...

Bjr,

Sur la première macro Export activité, insérer une ligne de code Stop avant le Call appelant une autre macro active sur le deuxième classeur. Et aussi une autre ligne de code Stop après le Call.

Ceci pour voir si Activités est grisé ou non avant le premier stop. Et de même s'il est grisé avant le deuxième stop. Donc après retour du call.

Il semblerait que ce classeur activités ne soit pas réactivé comme l'autre qui en fin de macro à une ligne de code prévue pour cela.

Phase de test continue:

Le bug n'a pas lieu si je place le ScreenUpdating = False après l'instruction : Workbooks.Add

Bug

Private Sub Export_Activite()
    ' Exporte les données activité TTC et HT dans un classeur à part
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False

    Dim Fin As Integer, i As Integer, j As Integer
    Dim TVA As Double

    ' Reset la TVA Moyenne
    Application.Run Macro:="Service_Format.TVA_Moyenne"

    ' Dernière ligne d'activité
    Fin = ThisWorkbook.Sheets("Activité").Range("ActiFin").Row

    ' Créé un nouveau classeur et 1er onglet = TTC
    Workbooks.Add
    ActiveWorkbook.ActiveSheet.Name = "TTC"

        ' Afficher la barre de chargement
    UserFormLoading.Show 0
    Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=5

    

Pourtant j'ai un autre code quasi-identique qui n'a pas de bug

Ne bug pas

Private Sub Export_Previsionnel()
    ' Exporte les données prévisionnelles TTC et HT dans un classeur à part
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False

    Dim Fin As Integer, i As Integer, j As Integer, Nb_Service As Integer, Nb_Segment As Integer
    Dim TVA As Double
    Dim Service As String

    ' Reset la TVA Moyenne
    Application.Run Macro:="Service_Format.TVA_Moyenne"

    ' Fin de prévisionnel &nombre de services
    Fin = ThisWorkbook.Sheets("Prévisionnel").Range("PreviFin").Row
    Nb_Service = Application.CountA(Range("Service_activite"))
    Nb_Segment = Application.CountA(Range("TC_segment"))

    ' Créé un nouveau classeur et 1er onglet = TTC
    Workbooks.Add
    ActiveWorkbook.ActiveSheet.Name = "TTC"

    ' Afficher la barre de chargement
    UserFormLoading.Show 0
    Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=5

Ca n'a aucun sens

Je viens de voir ta réponse X Cellus, je regarde ça et je reviens vers toi

A nouveau,

Ton classeur ne peut être grisé dès son ouverture donc c'est bien dans un endroit dans le programme qu'il passe grisé.

Il suffit, comme indiqué avant de placer des Stop pour voir comment il se comporte. Affichage normal jusqu'à tel ligne de code et affichage grisé à tel autre.

Tu verras alors quel ligne de code engendre le souci.

Tentative avec les stops:

Fenêtre grisée au premier stop

Fenêtre grisée au second stop

Fenêtre grisée en fin d'exécution

J'ai vérifié il me semble bien avoir une réactivation dans les 2 procédures.

Il semblerait que le problème se créé au moment du workbooks.add

D'ailleurs dans l'exécution du premier (qui bug) la fenêtre du nouveau classeur apparait durant l'exécution du code alors que le second (qui ne bug pas) la fenêtre du nouveau classeur n'apparait qu'une fois le code terminé...

Donc ce n'est pas à ce niveau du programme que le bug arrive. C'est bien avant le Call.

En isolant la portion de code qui fait basculer. Tu pourras corriger et tester ensuite.

Sans doute il vaut mieux ajouter le nouveau classeur en début de macro. Même si tu t'en sers seulement plus loin.

X Cellus

J'ai ajouté mis des stop au fur et à mesure pour voir quand apparait le bug

Tu trouveras ci-dessous le moment où le bug apparait

Private Sub Export_Activite()
    ' Exporte les données activité TTC et HT dans un classeur à part
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False

    Dim Fin As Integer, i As Integer, j As Integer
    Dim TVA As Double

    ' Reset la TVA Moyenne
    Application.Run Macro:="Service_Format.TVA_Moyenne"

    ' Dernière ligne d'activité
    Fin = ThisWorkbook.Sheets("Activité").Range("ActiFin").Row

    ' Créé un nouveau classeur et 1er onglet = TTC
    Workbooks.Add
    ActiveWorkbook.ActiveSheet.Name = "TTC"

    ' Afficher la barre de chargement
    UserFormLoading.Show 0
    Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=5

    ' Copie de la page Activité
    ThisWorkbook.Sheets("Activité").Range("A:ND").Copy
    ' Colle en formules et format, masque B (SBGN)

    With ActiveWorkbook.Sheets("TTC")
        .Range("A1").PasteSpecial Paste:=xlPasteFormulas
        .Range("A1").PasteSpecial Paste:=xlPasteFormats

        .Range("A:A").EntireColumn.Delete shift:=xlToLeft
        .Range("A:A").EntireColumn.Hidden = True

        With .Range("B2")
            .Value = "Activité par jour"
            .Font.Size = 9
        End With
        With .Range("B3")
            .Value = "TTC"
            .Font.Bold = True
        End With
        .Range("C4").Select
        ActiveWindow.FreezePanes = True
        .Range("B1").Select
    End With

    ' Masque le quadrillage
    ActiveWindow.DisplayGridlines = False

    ' Copie de la feuille TTC pour faire le HT et calculer les natures en HT
    ActiveWorkbook.Sheets("TTC").Copy After:=Sheets(1)
    ActiveSheet.Name = "HT"

    Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=10

    With ActiveWorkbook.Sheets("HT")
        ' Passer la colonne SBGN en revue
        For i = 7 To Fin
            Stop ' Là pas de bug d'affichage
            If .Cells(i, 1).Value = "N" Then
                Stop ' Là bug d'affichage
                ' Récupérer la TVA de la nature en cours
                TVA = 1 + ThisWorkbook.Sheets("CA").Range("Nature_CA").Find(.Cells(i, 2).Value, , xlFormulas, xlWhole, , , True).Offset(0, 2).Value
                ' Passer les 365 colonnes pour remplacer par le HT
                For j = 3 To 367
                    .Cells(i, j).Value = .Cells(i, j).Value / TVA
                Next j

            ' Couleur des services
            ElseIf .Cells(i, 1).Value = "S" Or i = Fin Then
                .Range(Cells(i, 2).Address, Cells(i, 367).Address).Interior.Color = 6961158
            End If
            Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=10 + (i - 6) / (Fin - 7) * 20
        Next i

        .Range("B1:B3").Interior.Color = 6961158
        .Range("B3").Value = "HT"
    End With

    Call Recap_Mensuel_Activite

    Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=100
    Unload UserFormLoading

    ' Masque le quadrillage, full screen
    ActiveWindow.DisplayGridlines = False
    ActiveWorkbook.Application.WindowState = xlMaximized
    Application.Calculation = xlCalculationAutomatic

End Sub

Je ne vois pas pourquoi le passage dans la condition if cause ce bug

A nouveau,

Enlèves le premier Stop. Et déplace l'autre avant le For J. .. Le but étant de contrôler les valeurs qui sont dans la première boucle I (7 à fin) et celles après, en survolant chacune d'entre elles avec la souris.

Exemple si pour 7 pas de souci, il faut continuer valeur par valeur jusqu'à Fin. Dès qu'il y a un bug il faut déplacer le stop à la fin de la boucle J. Et idem contrôler chaque valeur du code.

C'est fastidieux mais tu cerneras mieux la survenue du bug. Et quelle valeur cela implique.

Bon alors j'ai trouvé une solution mais je ne me l'explique pas

Le problème vient de ce bout de code

                
        For i = 7 To Fin
            If .Cells(i, 1).Value = "N" Then
                ' Récupérer la TVA de la nature en cours
                TVA = 1 + ThisWorkbook.Sheets("CA").Range("Nature_CA").Find(.Cells(i, 2).Value, , xlFormulas, xlWhole, , , True).Offset(0, 2).Value
                ' Passer les 365 colonnes pour remplacer par le HT
                For j = 3 To 367
                    .Cells(i, j).Value = .Cells(i, j).Value / TVA
                Next j
            ' Couleur des services
            ElseIf .Cells(i, 1).Value = "S" Or i = Fin Then
                .Range(Cells(i, 2).Address, Cells(i, 367).Address).Interior.Color = 6961158
            End If
            Application.Run Macro:="Affichage.UpdateProgressBar", Arg1:=10 + (i - 6) / (Fin - 7) * 20
        Next i
            

Problème qui survient dès qu'on rentre dans la boucle (premier passage dans la boucle à partir de 10)

J'ai remplacé par une boucle for each

        For Each Cellule In .Range("A7:A" & Fin)
            If Cellule.Value = "N" Then
                ' Récupérer la TVA de la nature en cours
                TVA = 1 + ThisWorkbook.Sheets("CA").Range("Nature_CA").Find(Cellule.Offset(0, 1).Value, , xlFormulas, xlWhole, , , True).Offset(0, 2).Value
                ' Passer les 365 colonnes pour remplacer par le HT
                For j = 3 To 367
                    .Cells(Cellule.Row, j).Value = .Cells(Cellule.Row, j).Value / TVA
                Next j
            ' Couleur des services
            ElseIf Cellule.Value = "S" Or i = Fin Then
                .Range(Cells(Cellule.Row, 2).Address, Cells(Cellule.Row, 367).Address).Interior.Color = 6961158
            End If
        Next Cellule
        

Plus de problème.

J'ai trouvé un médicament mais je connais toujours pas la maladie

Si quelqu'un a une idée pour expliquer je suis totalement preneur

Merci pour ton aide X Cellus

Bonsoir Pink Rabbit,

L'important est que tu as pu cerner le problème et apporter une solution. Sans les valeurs de sortie de chaque boucle. Il n'est pas possible de donner une hypothèse valide.

Est ce que le fait de passer à 2 chiffres dans la première boucle (10) posait un souci dans les lignes suivantes? Alors que de 7 à 9 tout se passait bien.

Je vois aussi que tu as supprimé en fin de macro l'appel à la barre de progression qui existait auparavant. Sans doute l'as tu placé après le dernier next.

Bonne continuation.

Rechercher des sujets similaires à "ruban grise"