IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ça affiche 2 fois ou 3 fois suivant l'ordre des modifications [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 662
    Par défaut Ça affiche 2 fois ou 3 fois suivant l'ordre des modifications
    Bonjour le forum

    Lorsque je fait Nouvelle Année ça affiche 2 fois "Corriger la formule des cellules I6 & I5" si c'est fait dans cet ordre
    Si c'est fait dans l'ordre "Corriger la formule des cellules I5 & I6" ça affiche 3 fois


    Option Explicit
    Sub NouvelleAnnee()
    Dim NomFeuille As String
    Dim An As Integer
    Dim Couleur
    Dim Sh As Shape

    Application.ScreenUpdating = False
    Couleur = Array(3, 4, 5, 6, 7, 8, 9, 10, 17, 40, 49, 42)
    With ActiveSheet
    An = Val(Split(.Name, " ")(1))
    If An = 0 Then
    MsgBox "Nom de la feuille non conforme"
    Exit Sub
    End If
    ' .Unprotect
    NomFeuille = "Charges " & An + 1
    If FeuilleExiste(NomFeuille) = True Then
    MsgBox "L'Année " & NomFeuille & " existe déjà "
    Exit Sub
    End If
    ' .Unprotect

    .Copy after:=Sheets(Sheets.Count)
    '.Shapes("AnneePlus").Delete
    ' .Protect
    End With
    With ActiveSheet
    Application.Calculation = xlCalculationManual ' Modif le 29/11/2020
    ' .Unprotect
    .Name = NomFeuille
    .Tab.ColorIndex = Couleur((An - 2000) Mod 12)

    'Code pour tester les cellules qui doivent être effacées : on les colorie en rouge

    ' Application.EnableEvents = False
    ' .Range("E3:E9,A12:C14,E12:E14,A18:C32,E18:E32,A35:C37,E35:E37,A39:C55,E39:E55,A58:C60,E58:E60,A72:C78,E72:E78,A81:C83," & _
    ' "E81:E83,A85:A101,E85:E101,F5,F10,F33,F56,F79,G18:I22,G23:I32,G39:I45,G46:I55,G62:I68,G69:I78,G85,G92:I101,G107,G109,G111".Interior.ColorIndex = 3
    ' Application.EnableEvents = True

    ' Code normal pour effacer
    On Error Resume Next
    ' Attention aux nombre de cellules dans la même ligne. Si code trop long ça n'efface pas.Privilégier G8,G113,G116,G118 Code sur 1 ligne.

    .Range("E3:E9,A12:C14,E12:E14,A16:C32,E16:E32,A35:C37,E35:E37,A39:C55,E39:E55,A58:C60,E58:E60,A62:C78,E62:E78,A81:C83," & _
    "E81:E83,A85:A101,E85:E101,F5,F10,F33,F56,F79,G18:I22,G23:I32,G39:I45,G46:I55,G62:I68,G69:I78,G85,G92:I101,G107,G109,G111").SpecialCells(xlCellTypeConstants, 23).ClearContents
    On Error GoTo 0
    Range("G10,G109,G111") = 0

    Application.EnableEvents = False
    .Cells.Replace What:=An, Replacement:=An + 1 '1ère phase on augmente de 1 l'année supérieure
    .Cells.Replace What:=An - 1, Replacement:=An '2ème phase on augmente de 1 l'année inférieure
    Application.EnableEvents = True

    ' Fin Modifications du 15/03/2020: Evite l'effacement des textes en colonne A

    Call Joli(.[A1], 1, 13, 5)
    Call Joli(.[A1], 14, 1, 15)
    Call Joli(.[A1], 15, 4)

    .Range("A3").Font.ColorIndex = 1

    Call Joli(.[A3], 1, 5)
    Call Joli(.[A3], 30, 25)
    Call Joli(.[A3], 64, 2)

    Call Joli(.[A4], 7, 26)
    Call Joli(.[A4], 43, 2)

    .Range("A5").Font.ColorIndex = 2

    Call Joli(.[A5], 1, 5)
    Call Joli(.[A5], 15, 6)
    Call Joli(.[A5], 41, 5)
    Call Joli(.[A5], 56, 2)

    Call Joli(.[A6], 9, 14)
    Call Joli(.[A6], 48, 2)
    Call Joli(.[A6], 53, 1)

    .Range("A7").Font.ColorIndex = 2

    Call Joli(.[A7], 1, 5)
    Call Joli(.[A7], 31, 6)
    Call Joli(.[A7], 44, 11)
    Call Joli(.[A7], 63, 3)

    .Range("A8").Font.ColorIndex = 1

    Call Joli(.[A8], 1, 5)
    Call Joli(.[A8], 29, 27, 5)
    Call Joli(.[A8], 65, 2)

    Call Joli(.[A9], 7, 7)
    Call Joli(.[A9], 43, 3)

    Call Joli(.[A103], 25, 6)
    Call Joli(.[A103], 39, 3)

    .Range("A108").Font.ColorIndex = 2

    Call Joli(.[A108], 1, 5)
    Call Joli(.[A108], 33, 5)
    Call Joli(.[A108], 48, 4)

    Call Joli(.[G5], 32, 5)

    CelluleG6 ActiveSheet

    For Each Sh In .Shapes
    If Sh.TopLeftCell.Column = 7 Then
    With Sh.TextFrame.Characters(Start:=51, Length:=4)
    .Insert An + 1
    .Font.ColorIndex = 3
    .Font.Size = 16
    End With
    Exit For
    End If
    Next Sh
    ' .Protect UserInterfaceOnly:=True
    .[A1].Select
    End With
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    End Sub

    Sub Joli(A As Range, Start As Integer, Length As Integer, Optional Couleur As Integer = 3)
    A.Characters(Start, Length).Font.ColorIndex = Couleur
    End Sub

    Sub CelluleG6(Ws As Worksheet)
    Dim An As Integer
    On Error GoTo GestionErreur ' Modif le 16/10/2022
    Application.EnableEvents = False
    With Ws
    ' .Unprotect
    Application.Calculation = xlCalculationAutomatic
    An = Val(Split(.Name, " ")(1))
    If .[I6] < 0 Then
    .[G6] = "Ecart Annuel Définitif En Moins Entre " & An - 1 & " & " & An
    .[G6].Font.ColorIndex = 3
    Call Joli(.[G6], 39, 11, 5)
    Call Joli(.[G6], 44, 1, 3)

    Else
    .[G6] = "Ecart Annuel Définitif En Plus Entre " & An - 1 & " & " & An
    .[G6].Font.ColorIndex = 5
    Call Joli(.[G6], 38, 11, 3)
    Call Joli(.[G6], 43, 1, 5)
    End If
    ' .Protect UserInterfaceOnly:=True, DrawingObjects:=False
    End With

    ' Début des modifications du 16/10/2022
    GestionErreur:

    If Err.Number = 13 Then
    MsgBox "Corriger la formule des cellules I6 & I5"
    End If
    ' Fin des modifications du 16/10/2022

    Application.EnableEvents = True

    End Sub


    Merci à vous pour vos éventuels retours
    Cordialement

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Si vous pouviez éditer votre post et mettre le code entre balises, ce serait sympa


    Pour votre souci, supprimez le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    On Error GoTo GestionErreur
    Pour voir a quel niveau ce situe les erreurs 🤔

    Sinon sans fichier, cela va être compliqué

    A+

  3. #3
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 662
    Par défaut
    Bonjour BrunoM45

    Voilà un fichier joint

    Cordialement

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut Un Internaute

    A priori le fichier n'est pas passé

    A+

  5. #5
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 662
    Par défaut
    Bonjour BrunoM45

    Si si fichier bien passé mais supprimé car j'ai enlevé des données provenant de l'année précédente et il faut cliquer x fois
    Je le met mais sans conviction
    Merci à toi
    Cordialement

  6. #6
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 662
    Par défaut
    Bonsoir le forum
    voilà c'est fait
    Ajout de ces lignes dans la macro ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Début modifs modif le 22/10/2022
            .[I5].FormulaR1C1 = _
                        "=ROUND(SUM(ABS('Charges " & An & "'!R[99]C[-3]),-R[-2]C[-4])/12,2)"
            .[I6].FormulaR1C1 = _
                        "=ROUND(('Charges " & An & "'!R[98]C[-3]*-1)-(R[98]C[-3]*-1),2)*-1"
      'Fin modifs modif le 22/10/2022


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    Sub NouvelleAnnee()
    Dim NomFeuille As String
    Dim An As Integer
    Dim Couleur
    Dim Sh As Shape
     
      Application.ScreenUpdating = False
      Couleur = Array(3, 4, 5, 6, 7, 8, 9, 10, 17, 40, 49, 42)
      With ActiveSheet
        An = Val(Split(.Name, " ")(1))
        If An = 0 Then
          MsgBox "Nom de la feuille non conforme"
          Exit Sub
        End If
    '    .Unprotect
        NomFeuille = "Charges " & An + 1 'Espace après Charges affiche Charges 2014.Supprimer Espace affiche par exemple Charges2014
        If FeuilleExiste(NomFeuille) = True Then
          MsgBox "L'Année " & NomFeuille & " existe déjà "
          Exit Sub
        End If
    '    .Unprotect
     
        .Copy after:=Sheets(Sheets.Count)
        '.Shapes("AnneePlus").Delete     'Mettre en commentaires pour ne pas effacer le bouton (nouvelle année)de la Feuille Précédente
    '    .Protect
      End With
      With ActiveSheet
        Application.Calculation = xlCalculationManual       ' Modif le 29/11/2020
    '    .Unprotect
        .Name = NomFeuille
        .Tab.ColorIndex = Couleur((An - 2000) Mod 12)
     
           'Code pour tester les cellules qui doivent être effacées : on les colorie en rouge
     
    '      Application.EnableEvents = False
    '   .Range("E3:E9,A12:C14,E12:E14,A18:C32,E18:E32,A35:C37,E35:E37,A39:C55,E39:E55,A58:C60,E58:E60,A72:C78,E72:E78,A81:C83," & _
    '    "E81:E83,A85:A101,E85:E101,F5,F10,F33,F56,F79,G18:I22,G23:I32,G39:I45,G46:I55,G62:I68,G69:I78,G85,G92:I101,G107,G109,G111".Interior.ColorIndex = 3
    '      Application.EnableEvents = True
     
        ' Code normal pour effacer
        On Error Resume Next
          ' Attention aux nombre de cellules dans la même ligne. Si code trop long ça n'efface pas.Privilégier G8,G113,G116,G118 Code sur 1 ligne.
     
        .Range("E3:E9,A12:C14,E12:E14,A16:C32,E16:E32,A35:C37,E35:E37,A39:C55,E39:E55,A58:C60,E58:E60,A62:C78,E62:E78,A81:C83," & _
        "E81:E83,A85:A101,E85:E101,F5,F10,F33,F56,F79,G18:I22,G23:I32,G39:I45,G46:I55,G62:I68,G69:I78,G85,G92:I101,G107,G109,G111").SpecialCells(xlCellTypeConstants, 23).ClearContents
        On Error GoTo 0
        Range("G10,G109,G111") = 0  'Si on ne fait pas effacer les Cellules "G10,G109,G111" par la macro ci-dessus il faut mettre cettre ligne en NON COMMENTAIRES
          ' Début Modifications du 15/03/2020 : Evite l'effacement des textes en colonne A
     
          Application.EnableEvents = False
          .Cells.Replace What:=An, Replacement:=An + 1        '1ère phase on augmente de 1 l'année supérieure
          .Cells.Replace What:=An - 1, Replacement:=An        '2ème phase on augmente de 1 l'année inférieure
           Application.EnableEvents = True
     
          ' Fin Modifications du 15/03/2020: Evite l'effacement des textes en colonne A
     
            Call Joli(.[A1], 1, 13, 5)            'Ajouter 5 pour la couleur bleu (5) ligne 1
            Call Joli(.[A1], 14, 1, 15)           'Ajouter 15 pour qu'entre Charges et Année 2020 par exemple on ne voit pas le soulignement (mëme couleur que le fond soit 15)
            Call Joli(.[A1], 15, 4)
     
            .Range("A3").Font.ColorIndex = 1      'Si le texte ne commence pas par du noir il faut appliquer cette ligne
     
            Call Joli(.[A3], 1, 5)
            Call Joli(.[A3], 30, 25)
            Call Joli(.[A3], 64, 2)
     
            Call Joli(.[A4], 7, 26)
            Call Joli(.[A4], 43, 2)
     
            .Range("A5").Font.ColorIndex = 2      'Si le texte ne commence pas par du noir il faut appliquer cette ligne
     
            Call Joli(.[A5], 1, 5)                ' Annuel
            Call Joli(.[A5], 15, 6)
            Call Joli(.[A5], 41, 5)
            Call Joli(.[A5], 56, 2)
     
            Call Joli(.[A6], 9, 14)
            Call Joli(.[A6], 48, 2)
            Call Joli(.[A6], 53, 1)
     
            .Range("A7").Font.ColorIndex = 2      'Si le texte ne commence pas par du noir il faut appliquer cette ligne
     
            Call Joli(.[A7], 1, 5)
            Call Joli(.[A7], 31, 6)
            Call Joli(.[A7], 44, 11)
            Call Joli(.[A7], 63, 3)
     
            .Range("A8").Font.ColorIndex = 1      'Si le texte ne commence pas par du noir il faut appliquer cette ligne
     
            Call Joli(.[A8], 1, 5)               'Ajouter 5 pour la couleur bleu (5) ligne 8
            Call Joli(.[A8], 29, 27, 5)             'Ajouter 1 pour la couleur noir (1) ligne 8
            Call Joli(.[A8], 65, 2)
     
            Call Joli(.[A9], 7, 7)
            Call Joli(.[A9], 43, 3)
     
            Call Joli(.[A103], 25, 6)
            Call Joli(.[A103], 39, 3)
     
           .Range("A108").Font.ColorIndex = 2      'Si le texte ne commence pas par du noir il faut appliquer cette ligne
     
            Call Joli(.[A108], 1, 5)
            Call Joli(.[A108], 33, 5)
            Call Joli(.[A108], 48, 4)
     
            Call Joli(.[G5], 32, 5)
     
       'Début modifs modif le 22/10/2022
            .[I5].FormulaR1C1 = _
                        "=ROUND(SUM(ABS('Charges " & An & "'!R[99]C[-3]),-R[-2]C[-4])/12,2)"
            .[I6].FormulaR1C1 = _
                        "=ROUND(('Charges " & An & "'!R[98]C[-3]*-1)-(R[98]C[-3]*-1),2)*-1"
      'Fin modifs modif le 22/10/2022
     
            CelluleG6 ActiveSheet
     
             For Each Sh In .Shapes                              'Ces 10 lignes pour ajouter une année.
           If Sh.TopLeftCell.Column = 7 Then                     '7 = Colonne G
            With Sh.TextFrame.Characters(Start:=51, Length:=4)
              .Insert An + 1                                     ' Incrémentation d'un an
              .Font.ColorIndex = 3                               ' Couleur année
              .Font.Size = 16                                    ' Taille texte
            End With
            Exit For
          End If
        Next Sh
    ' .Protect UserInterfaceOnly:=True
      .[A1].Select
      End With
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    End Sub
     
    Sub Joli(A As Range, Start As Integer, Length As Integer, Optional Couleur As Integer = 3)  'Ajouter la Macro "Joli" pour que le Programme fonctionne
      A.Characters(Start, Length).Font.ColorIndex = Couleur
    End Sub
     
    Sub CelluleG6(Ws As Worksheet)
    Dim An As Integer
      On Error GoTo GestionErreur                        ' Modif le 16/10/2022
      Application.EnableEvents = False
      With Ws
    '  .Unprotect
         Application.Calculation = xlCalculationAutomatic   'Pour forcer Calcul Automatique si on Ajoute des lignes
         An = Val(Split(.Name, " ")(1))
            If .[I6] < 0 Then                  ' Mettre If .[I6] < 0 Then 'si on veut le texte => Ecart Annuel Définitif Entre en Bleu. Si non Mettre If .[I6] > 0 Then pour le texte en rouge
            .[G6] = "Ecart Annuel Définitif En Moins Entre " & An - 1 & " & " & An
            .[G6].Font.ColorIndex = 3
              Call Joli(.[G6], 39, 11, 5)
              Call Joli(.[G6], 44, 1, 3)
     
            Else
            .[G6] = "Ecart Annuel Définitif En Plus Entre " & An - 1 & " & " & An
              .[G6].Font.ColorIndex = 5
              Call Joli(.[G6], 38, 11, 3)
              Call Joli(.[G6], 43, 1, 5)
            End If
    '  .Protect UserInterfaceOnly:=True, DrawingObjects:=False
        End With
     
     ' Début des modifications du 16/10/2022
    GestionErreur:
     
      If Err.Number = 13 Then
        MsgBox "Corriger la formule des cellules I6 & I5"
      End If
      ' Fin des modifications du 16/10/2022
     
      Application.EnableEvents = True
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 27/06/2006, 16h05
  2. le sous formulaire s'affiche une fois sur deux
    Par Math dans le forum Access
    Réponses: 16
    Dernier message: 10/10/2005, 16h25
  3. Réponses: 14
    Dernier message: 30/03/2005, 22h50
  4. [JOptionPane] [JTable] la boite de Dialogue s'affiche 2 fois
    Par norkius dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 01/02/2005, 15h12
  5. Afficher 2 fois le meme JPanel
    Par cmoulin dans le forum Composants
    Réponses: 3
    Dernier message: 11/05/2004, 10h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo