Ou positionner Application.DisplayAlerts = True

Bonjour

J'importe des données de plusieurs fichiers qui contiennent une mise en forme conditionnelle portant sur les jours fériés.

Pour un tableau importé de 3 fichiers, je reçois 4 messages identiques qui disent qu'une formule ou feuille que je veux déplacer contient le nom "FERIES" qui existe sur la feuille de destination. Voulez-vous utiliser cette version du nom ?" ma réponse est toujours oui.

Où dois-je positionner

Application.DisplayAlerts = True

dans ma procédure pour ne plus avoir à intervenir pendant le déroulement de cette procédure.

C'est la 2ème fois que je pose cette question (la 1ère fois, c'était pour un autre sujet), donc si vous pouviez m'aider à comprendre comment l'utiliser, j'éviterai (peut-être) de reposer ma question.

Voici la procédure :

      Private Sub CmbOk_Click()
Dim I As Integer
      Dim WbSource As Workbook
      Dim WbDestin As Workbook
      Dim DerLgPE As Byte, DerLgPC As Byte, DerLgPO As Byte   'Récup du Tablo des données
      Dim objImg As Object, Emplacement As Range, Fichier As String      'Récup de l'image dans l'entête

10      For I = 0 To Me.LtB_Feuil.ListCount - 1
20        If Me.LtB_Feuil.Selected(I) = True Then Exit For
30      Next I
40      If I = Me.LtB_Feuil.ListCount Then
50        MsgBox "Rien de sélectionné"
60        Exit Sub
70      End If

80      Application.ScreenUpdating = False

90      Set WbDestin = ThisWorkbook

        'RAPPATRIEMENT DU PREMIER FICHIER AVEC ENTETE & SOMMAIRE ACTIVITE

100     Set WbSource = Workbooks.Open(ThisWorkbook.Path & "\planning missions PC V4_3.xlsm")
110     For I = 0 To Me.LtB_Feuil.ListCount - 1
120       If Me.LtB_Feuil.Selected(I) = True Then
            'utilisation de la fonction Existe sur la source
130         If FeuilleExiste(WbSource.Name, Me.LtB_Feuil.List(I)) = True Then
      Application.DisplayAlerts = True      '140           WbSource.Sheets(Me.LtB_Feuil.List(I)).Cells.FormatConditions.Delete     ' Evite la recopie du format conditionnel
140           If FeuilleExiste(WbDestin.Name, Me.LtB_Feuil.List(I)) = False Then
150             WbDestin.Sheets.Add after:=WbDestin.Sheets(WbDestin.Sheets.Count)
160             WbDestin.Sheets(WbDestin.Sheets.Count).Name = Me.LtB_Feuil.List(I)
170           End If

              ' Copie de l'entête avec les formats largeurs
180           WbSource.Sheets(Me.LtB_Feuil.List(I)).Range("B2:AG4").Copy

190           WbDestin.Sheets(Me.LtB_Feuil.List(I)).Range("B2").PasteSpecial Paste:=xlPasteColumnWidths
200           WbDestin.Sheets(Me.LtB_Feuil.List(I)).Range("B2").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
210           WbDestin.Sheets(Me.LtB_Feuil.List(I)).Range("B2").PasteSpecial Paste:=xlPasteFormats

              'Largeur des colonnes A et AH
220           WbDestin.Sheets(WbDestin.Sheets.Count).Range("A:A").ColumnWidth = 3.5
230           WbDestin.Sheets(WbDestin.Sheets.Count).Range("AH:AH").ColumnWidth = 3.5
              'Insertion de l'image en B2
240           Fichier = "F:\AT Missions\Livraisons\Réunion.jpg"
250           Set objImg = WbDestin.Sheets(Me.LtB_Feuil.List(I)).Pictures.Insert(Fichier)
260           Set Emplacement = WbDestin.Sheets(Me.LtB_Feuil.List(I)).Range("B2")
270           Set objImg = WbDestin.Sheets(Me.LtB_Feuil.List(I)).DrawingObjects(WbDestin.Sheets(Me.LtB_Feuil.List(I)).Shapes.Count)
280             With objImg.ShapeRange
290                 .LockAspectRatio = msoFalse
300                 .Left = Emplacement.Left        'Position Gauche
310                 .Top = Emplacement.Top          'Position Haute
320                 .Height = Emplacement.Height    'Position Base
                '    .Width = Emplacement.Width     'Position sur la cellule
330                 .Width = 45   'Largeur
340             End With

              ' Copie du Planning
350           WbSource.Sheets(Me.LtB_Feuil.List(I)).Activate
360           DerLgPC = Range("B15").End(xlDown).Row
            '  Copie de la liste des Activités avec les couleurs MFC
370           WbSource.Sheets(Me.LtB_Feuil.List(I)).Range("AI7:AK45").Copy WbDestin.Sheets(Me.LtB_Feuil.List(I)).Range("AI7")
            '  Copie de la liste des jours FERIES / MFC
'380           WbSource.Sheets(Me.LtB_Feuil.List(I)).Range("FT15:FT40").Copy WbDestin.Sheets(Me.LtB_Feuil.List(I)).Range("FT15")
390           WbSource.Sheets(Me.LtB_Feuil.List(I)).Range("A15:AG" & DerLgPC).Copy WbDestin.Sheets(Me.LtB_Feuil.List(I)).Range("A5")
400           DerLgPC = DerLgPC - 10
410           WbDestin.Sheets(Me.LtB_Feuil.List(I)).Range("A5:A" & DerLgPC) = "PC"
420         Else
430           MsgBox "Pas la feuille " & Me.LtB_Feuil.List(I) & " dans le classeur " & WbSource.Name
440         End If
450       End If
460     Next I
470     WbSource.Close savechanges:=False

        'RAPPATRIEMENT DU DEUXIEME FICHIER AVEC SEULEMENT LES DONNEES
' dito pour les autres rappatriements

J'ai essayé de la positionner en ligne 131, 161, 181, 211, 371, 381.

ça ne fonctionne nulle part

NB: si vous voulez que je vous joingne les 4 fichiers, il n'y a pas de pb

Bonjour,

Juste après les déclarations de variables..

Application.DisplayAlerts = False
Application.ScreenUpdating = False

et juste avant le End Sub...

Application.DisplayAlerts = True

A+

J'ai trouvé dans http://www.info-3000.com/vbvba/conseiloptimisation.php

Il faut jouer avec true et false

Application.DisplayAlerts = False
'Procédure ....
Application.DisplayAlerts = True 

Merci quand même ça faisait 2:00 que je cherchais, à peine posté, j'ai trouvé...

Bonjour lermite,

Nos messages se sont croisés, malgrè ce qui est dit, j'ai envoyé mon psot à 11:45, car après je suis partie aider un collègue...

En tout cas, je n'avais pas l'explication que tu me donnes.

Je la note...

Par contre, tu dis :

Application.ScreenUpdating = False

mais en lisant Microsoft, je croyais qu'il fallati également écrire

Application.ScreenUpdating = True 

en fin de procédure.

Apparement, d'après ce que tu dis, ce n'est pas nécessaire ?

Y a-t'il un cas où c'est nécessaire ?

Merci beaucoup

Bonjour,

Sachant que ce n'est pas "obligatoire" de désactiver l'affichage des messages juste après la déclaration des variables, ni la réactivation juste avant le end sub.

En fait c'est du cas par cas suivant la macro, la seule chose à retenir, c'est effectivement de bien penser à réactiver l'affichage quand le traitement est fini pour que les messages puissent s'afficher dans tes autres traitements.

Après la désactivation / activation, n'est pas obligée de concerner toute la macro, tu peux juste encapsuler la partie qui te préoccupe, car tu pourrais très bien avoir une macro qui effectue différentes choses, et ne vouloir désactiver les messages que pour un traitement particuliers et non pas la macro entière.

Private Sub Traitements()

Dim i as integer, StrChaine As String

'
'Traitement 1 avec besoin des messages
'

Application.DisplayAlerts = False
'traitement 2 sans les messages
Application.DisplayAlerts = True

'
'Traitement 3 avec les messages
'

'etc. etc.

End Sub

Edit : Pour le rafraichissement de l'écran, il me semble qu'Excel le réactive automatiquement en fin de procédure, mais je ne suis pas sûr qu'il le fasse pour les messages d'alertes. Enfin dans le doute, personnellemment je préfère coder la réactivation dans tous les cas pour être sûr.

Cordialement,

    Application.ScreenUpdating = True

N'est jamais nécessaire, cette fonction est automatiquement réactivée par excel lorsque les macros sont terminées.

A+

Zirak et Lermite,

Un grand merci pour vos précisions / explications.

A bientôt

Rechercher des sujets similaires à "positionner application displayalerts true"