Bonjour,
Je suis tout débutant en programmation VBA sous Excel et j'ai créé cette macro qui me sert à rapatrier des données depuis un serveur avec un logiciel particulier "PI".
Mon souci est que je la trouve très répétitive... je pense qu'il est faisable d'améliorer ça mais je ne sais pas comment ?!
J'ai copié le code ci-dessous :
Ma demande est de m'orienter pour établir une boucle plus simple et peut être moins répétitive...
Merci d'avance pour votre aide.
Cissou
Je suis tout débutant en programmation VBA sous Excel et j'ai créé cette macro qui me sert à rapatrier des données depuis un serveur avec un logiciel particulier "PI".
Mon souci est que je la trouve très répétitive... je pense qu'il est faisable d'améliorer ça mais je ne sais pas comment ?!
J'ai copié le code ci-dessous :
Code:
Sub Recup_PI_EP8()
'
' Recup_PI_EP8 Macro
' Macro recorded 15/07/2010 by Cissou
'
'
Dim sTagname As String
Dim sTime As String
Dim sServer As String
Dim macroResult As Variant
sServer = "10.123.456.78"
i = 8
j = 8
a = 1
b = 1
' Recherche des dates
Do While a <> ""
a = Cells(j, 7).Value
j = j + 1
Loop
j = j - 2
' Recherche des valeurs pour le premier tag
Do While b <> ""
b = Cells(i, 21).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 21).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 21).Value = macroResult
If Cells(k, 21).Value = "No Data" Then
Cells(k, 21).Value = ""
End If
Next
End If
' L'opération est répétée pour chaque tag désiré, le code est copié, seule la colonne est modifiée
i = 8
b = 1
Do While b <> ""
b = Cells(i, 22).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 22).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 22).Value = macroResult
If Cells(k, 22).Value = "No Data" Then
Cells(k, 22).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 23).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 23).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 23).Value = macroResult
If Cells(k, 23).Value = "No Data" Then
Cells(k, 23).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 24).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 24).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 24).Value = macroResult
If Cells(k, 24).Value = "No Data" Then
Cells(k, 24).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 25).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 25).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 25).Value = macroResult
If Cells(k, 25).Value = "No Data" Then
Cells(k, 25).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 26).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 26).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 26).Value = macroResult
If Cells(k, 26).Value = "No Data" Then
Cells(k, 26).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 27).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 27).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 27).Value = macroResult
If Cells(k, 27).Value = "No Data" Then
Cells(k, 27).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 28).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 28).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 28).Value = macroResult
If Cells(k, 28).Value = "No Data" Then
Cells(k, 28).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 29).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 29).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 29).Value = macroResult
If Cells(k, 29).Value = "No Data" Then
Cells(k, 29).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 30).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 30).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 30).Value = macroResult
If Cells(k, 30).Value = "No Data" Then
Cells(k, 30).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 31).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 31).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 31).Value = macroResult
If Cells(k, 31).Value = "No Data" Then
Cells(k, 31).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 32).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 32).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 32).Value = macroResult
If Cells(k, 32).Value = "No Data" Then
Cells(k, 32).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 33).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 33).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 33).Value = macroResult
If Cells(k, 33).Value = "No Data" Then
Cells(k, 33).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 34).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 34).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 34).Value = macroResult
If Cells(k, 34).Value = "No Data" Then
Cells(k, 34).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 35).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 35).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 35).Value = macroResult
If Cells(k, 35).Value = "No Data" Then
Cells(k, 35).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 36).Value
i = i + 1
Loop
i = i - 2
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 36).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 36).Value = macroResult
If Cells(k, 36).Value = "No Data" Then
Cells(k, 36).Value = ""
End If
Next
End If
i = 8
b = 1
Do While b <> ""
b = Cells(i, 37).Value
i = i + 1
Loop
i = i - 2
If i = j Then MsgBox ("Pas de mise à jour à effectuer")
If i < j Then
For k = i + 1 To j
sTime = Cells(k, 7).Value
sTagname = Cells(5, 37).Value
macroResult = Application.Run("PITimeDat", sTagname, sTime, sServer)
Cells(k, 37).Value = macroResult
If Cells(k, 37).Value = "No Data" Then
Cells(k, 37).Value = ""
End If
Next
ok = MsgBox("opération terminée", vbOKOnly, "Recup PI EP8")
End If
If i > j Then MsgBox ("Il manque des dates")
'
End Sub
Ma demande est de m'orienter pour établir une boucle plus simple et peut être moins répétitive...
Merci d'avance pour votre aide.
Cissou
Dernière édition: