Bonjour à tous,
J'ai créé un objet "Shapes("Message_Attente")" que je rend visible au démarrage d'un processus puis invisible à la fin de ce processus.
Le pb est que dans un cas il n'apparait pas et dans l'autre cas cela fonctionne bien.
Le contexte: J'ai une feuille d'entête où J'ai le fameux shapes et 2 boutons, l'un pour rafraichir les requêtes de Powerquery et l'autre pour la sauvegarde du fichier (code des boutons ci-après). j'utilise le même shapes("message_attente"), où je ne modifie que le texte en fonction du bouton. Je n'ai aucun pb pour faire apparaitre le message dans le cas "Private Sub Bouton_Actualiser_Click" mais impossible de le faire apparaitre dans le cas "Private Sub Bouton_Sauvegarde_Click()" alors qu'il finit par apparaitre en toute fin de processus lorsque je fait apparaitre une msgbox qui annonce que le traitement est terminé. Je met aussi le sous-pgm appelé car il doit avoir une influence.
A part ce pb d'affichage tout fonctionne et j'ai de moins en moins de cheveux!
Merci de vos éclairages et d'une solution possible, car là je piétine depuis quelque jours!
Amicalement
JPaul
J'ai créé un objet "Shapes("Message_Attente")" que je rend visible au démarrage d'un processus puis invisible à la fin de ce processus.
Le pb est que dans un cas il n'apparait pas et dans l'autre cas cela fonctionne bien.
Le contexte: J'ai une feuille d'entête où J'ai le fameux shapes et 2 boutons, l'un pour rafraichir les requêtes de Powerquery et l'autre pour la sauvegarde du fichier (code des boutons ci-après). j'utilise le même shapes("message_attente"), où je ne modifie que le texte en fonction du bouton. Je n'ai aucun pb pour faire apparaitre le message dans le cas "Private Sub Bouton_Actualiser_Click" mais impossible de le faire apparaitre dans le cas "Private Sub Bouton_Sauvegarde_Click()" alors qu'il finit par apparaitre en toute fin de processus lorsque je fait apparaitre une msgbox qui annonce que le traitement est terminé. Je met aussi le sous-pgm appelé car il doit avoir une influence.
A part ce pb d'affichage tout fonctionne et j'ai de moins en moins de cheveux!
Merci de vos éclairages et d'une solution possible, car là je piétine depuis quelque jours!
Amicalement
JPaul
VB:
'Bouton d'actualisation des datas
'pas de pb d'affichage du message d'attente
Private Sub Bouton_Actualiser_Click()
Dim Message As String
On Error GoTo ErreuR
'"Data_Message" est une variable pour changer le temp à afficher(1mn 20 sec.)
Message = "Mise à jour des données en cours." & vbCrLf & _
"Temps estimé à " & [Data_Message] & vbCrLf & _
"Merci de patienter..."
With ws_Entete
.Unprotect
.Shapes("Message_Attente").TextFrame2.TextRange.Characters.Text = Message
.Shapes("Message_Attente").Visible = True
.Select
ActiveWorkbook.RefreshAll 'MàJ des requetes powerqueries
[Date_MaJ] = Date
.Protect
.Shapes("Message_Attente").Visible = False
End With
MsgBox "Données actualisées", vbInformation, "Information traitement"
'gestion des erreurs
On Error GoTo 0
Exit Sub
ErreuR:
MsgBox Err.Description & " dans le module d'actualisation des données", vbCritical, "Affichage de l'erreur"
End Sub
'Bouton sauvegarde de l'ensemble des données indicateurs
'version dont l'affichage du message d'attente ne fonctionne pas
Private Sub Bouton_Sauvegarde_Click()
Dim Message As String
Application.Caption = "Sauvegarde en cours"
'l'affichage du message ne marche pas
Message = "Sauvegarde en cours." & vbCrLf & "Merci de patienter..."
With ws_Entete
.Unprotect
.Shapes("Message_Attente").TextFrame2.TextRange.Characters.Text = Message
.Shapes("Message_Attente").Visible = True
.Select
End With
Application.ScreenUpdating = False
Sauvegarde_V2 'Routine dans un module qui sauvegarde feuille à feuille ce fichier et qui sup. boutons, liaisons et requetes, code VBA (voir plus bas)
Application.Caption = ""
ws_Entete.Shapes("Message_Attente").Visible = False
End Sub
'**********************************************************************************************************
'sauvegarde dans un fichier xlsx avec supression des macros et requetes
Sub Sauvegarde_V2()
Dim CL1 As Workbook
Dim CL2 As Workbook
Dim LaFeuille As Worksheet
Dim Nom_Sauvegarde As String
Dim Connexion As Object
Set CL1 = ThisWorkbook
Set CL2 = Workbooks.Add
Application.ScreenUpdating = False
CL1.Worksheets(1).Unprotect
'recopie de tout les onglets visible dans le classeur sauvegarde
For Each LaFeuille In CL1.Worksheets
If LaFeuille.Visible = True Then
LaFeuille.Copy After:=CL2.Worksheets(CL2.Worksheets.Count)
End If
Next
'sup.de la feuille 1 crée au démarrage du classeur sauvegarde
Application.DisplayAlerts = False
CL2.Worksheets(1).Delete
Application.DisplayAlerts = True
'supprimer les liaisons du classeur sauvegarde
If Not IsEmpty(CL2.LinkSources(xlExcelLinks)) Then
For Each X In CL2.LinkSources(xlExcelLinks)
CL2.BreakLink Name:=X, Type:=xlExcelLinks
Next
End If
'suppression des requetes powerquery du classeur sauvegarde
Dim cn As WorkbookConnection, qry As WorkbookQuery
For Each cn In CL2.Connections
cn.Delete
Next cn
For Each qry In CL2.Queries
qry.Delete
Next qry
'supprime le code vba du classeur sauvegarde
Set VBComps = CL2.VBProject.VBComponents
For Each VBComp In VBComps
Select Case VBComp.Type
Case vbext_ct_StdModule, vbext_ct_MSForm, _
vbext_ct_ClassModule
VBComps.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next VBComp
'supprime les boutons de l'entete du classeur sauvegarde
'CL2.Worksheets(1).Activate
With CL2.Worksheets(1)
.Select
.Unprotect
.Shapes("Bouton_Actualiser").Delete
.Shapes("Bouton_Sauvegarde").Delete
.Shapes("Bouton_Imprim").Delete
.Shapes("Message_Attente").Delete
.Protect
End With
'sauvegarde du classeur sauvegarde
Nom_Sauvegarde = ThisWorkbook.Path & "\Sauvegarde Indicateurs_" & Format(Date, "yyyy_mm_dd") & ".xlsx"
Application.DisplayAlerts = False
CL2.SaveAs Nom_Sauvegarde
CL2.Close
Application.DisplayAlerts = True
Set CL1 = Nothing
Set CL2 = Nothing
Application.ScreenUpdating = True
MsgBox "La sauvegarde a bien été effectuée", vbInformation + vbOKOnly
ws_Entete.Protect
End Sub