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 = Truedans 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 rappatriementsJ'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 = Falseet juste avant le End Sub...
Application.DisplayAlerts = TrueA+
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 = Falsemais 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 SubEdit : 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 = TrueN'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