oguruma
XLDnaute Impliqué
Bonsoir, une petite contribution rapide sur la création d'une barre de progression via un graphique sous forme de cylindre pour obtenir un exemple comme celui-ci
		
		
	
	
		 
	
Pendant les traitements la coloration de la zone transparente est progressive comme ci-dessous
		 
	
		 
	
Cette jauge repose en fait sur un graphique dans un onglet de paramétrage
		 
	
Le calcul de la transparence est effectué dans la cellule en C2
		 
	
Les séries de données sont les suivantes
		 
	
Je vous laisse voir les détails dans le fichier joint.
C'est de la conception graphique classique et ce n'est pas l'objet de ce post.
En fait il est donc possible de créer le graphique comme bon vous semble au niveau du Design.
Ce graphique est en fait dupliqué dans la feuille dans laquelle on souhaite afficher la barre de progression.
Certes on aurait pu le créer dynamiquement dans la feuille destination mais autant faire simple et s'appuyer sur un graphique déjà créé et le recopier pour l'afficher.
Pour cela une procédure de chargement
	
	
	
	
	
		
et en fin de traitement il est donc nécessaire de supprimer le graphique de la feuille destination via le code suivant
	
	
	
	
	
		
Un exemple pour tester tout ceci
	
	
	
	
	
		
Via les deux lignes de code ci-dessous pour commenter les traitements en cours en utilisant le titre du graphique et l'axe X via cet exemple
	
	
	
	
	
		
Ces deux champs nommés sont attachés au titre et l'axe X.
Voilà c'est certainement rudimentaire et perfectible mais ça fait job ! 🙂
	
		
			
		
		
	
				
			Pendant les traitements la coloration de la zone transparente est progressive comme ci-dessous
Cette jauge repose en fait sur un graphique dans un onglet de paramétrage
Le calcul de la transparence est effectué dans la cellule en C2
Les séries de données sont les suivantes
Je vous laisse voir les détails dans le fichier joint.
C'est de la conception graphique classique et ce n'est pas l'objet de ce post.
En fait il est donc possible de créer le graphique comme bon vous semble au niveau du Design.
Ce graphique est en fait dupliqué dans la feuille dans laquelle on souhaite afficher la barre de progression.
Certes on aurait pu le créer dynamiquement dans la feuille destination mais autant faire simple et s'appuyer sur un graphique déjà créé et le recopier pour l'afficher.
Pour cela une procédure de chargement
		VB:
	
	
	Function LOAD_GRAPH_PROGRESS_BAR(hDestWks As String, hAddress As String, _
Optional hGraph As String = "BAR_GRAPHIC", Optional hSourceWks As String = "PARAM_BAR") As Variant
 
    Dim oGraphBarChart As ChartObject
    Dim oGraphBarChartArea As ChartArea
   
    Set LOAD_GRAPH_PROGRESS_BAR = Nothing
   
    On Error GoTo HANDLE_ERROR
   
    Set oGraphBarChart = ActiveWorkbook.Worksheets(hSourceWks).ChartObjects(hGraph)
    oGraphBarChart.Activate
   
    Set oGraphBarChartArea = ActiveChart.ChartArea
   
    oGraphBarChartArea.Copy
    ActiveWorkbook.Worksheets(hDestWks).Activate
    Range(hAddress).Activate
    ActiveSheet.Paste
    Range("A1").Activate
   
    Set LOAD_GRAPH_PROGRESS_BAR = oGraphBarChart
   
FIN:
    Set oGraphBarChart = Nothing
    Set oGraphBarChartArea = Nothing
    Exit Function
HANDLE_ERROR:
    Resume FIN
End Functionet en fin de traitement il est donc nécessaire de supprimer le graphique de la feuille destination via le code suivant
		VB:
	
	
	Function UNLOAD_GRAPH_PROGRESS_BAR(Optional hGraph As String = "BAR_GRAPHIC", Optional hDestWks As String = "ActiveSheet") As Boolean
 
    Dim oGraphBarChart As ChartObject
    Dim wk As Worksheet
   
    UNLOAD_GRAPH_PROGRESS_BAR = False
   
    On Error GoTo HANDLE_ERROR
   
    If hDestWks = "ActiveSheet" Then Set wk = ActiveSheet Else Set wk = ActiveWorkbook.Worksheets(hDestWks)
   
    Set oGraphBarChart = wk.ChartObjects(hGraph)
    oGraphBarChart.Activate
   
    oGraphBarChart.Delete
   
    UNLOAD_GRAPH_PROGRESS_BAR = True
   
FIN:
    Set oGraphBarChart = Nothing
    Exit Function
HANDLE_ERROR:
    Resume FIN
End FunctionUn exemple pour tester tout ceci
		Code:
	
	
	Sub TEST_PROGRESS_BAR()
    Dim oGraphBarChart As ChartObject
    Dim lngIdx As Long
   
    Set oGraphBarChart = LOAD_GRAPH_PROGRESS_BAR("Feuil2", "E5")
    If oGraphBarChart Is Nothing Then
        MsgBox "Impossible de charger la barre de progression"
        Exit Sub
    Else
        Debug.Print oGraphBarChart.Name
    End If
   
    Range("GRAPH_KPI") = 0
 
    For lngIdx = 0 To 300
        '
        ' ==> ici vos traitements...
        '
        Range("MSG_TITRE") = "Traitement " & CStr(lngIdx)
   '     Range("COMPLEMENT_TRSP_INFO") = "Complément " & CStr(lngIdx)
        Range("GRAPH_X_LIBELLE") = "Traitement " & CStr(lngIdx)
        Range("GRAPH_KPI") = lngIdx / 300
        oGraphBarChart.Chart.Refresh ' on refresh par sécurité après
        DoEvents
    Next
    MsgBox "Traitements terminés"
    Range("GRAPH_KPI") = 0
    Range("MSG_TITRE") = "<DEFAUT>"
    Range("COMPLEMENT_TRSP_INFO") = "<DEFAUT>"
    Range("GRAPH_X_LIBELLE") = "<DEFAUT>"
   
    If Not UNLOAD_GRAPH_PROGRESS_BAR() Then
        MsgBox "Impossible de supprimer la barre de progression"
    End If
   
FIN:
    Exit Sub
   
HANDLE_ERROR:
    MsgBox "incident n° " & Err.Number & " - " & Err.Description
    Resume FIN
End SubVia les deux lignes de code ci-dessous pour commenter les traitements en cours en utilisant le titre du graphique et l'axe X via cet exemple
		VB:
	
	
	        Range("MSG_TITRE") = "Traitement " & CStr(lngIdx)
        Range("GRAPH_X_LIBELLE") = "Traitement " & CStr(lngIdx)Ces deux champs nommés sont attachés au titre et l'axe X.
Voilà c'est certainement rudimentaire et perfectible mais ça fait job ! 🙂
 
	 
 
		 
 
		 
 
		