Algorithme détaillé

  • Initiateur de la discussion Vivien
  • Date de début
V

Vivien

Guest
Bonjour à tous le monde.
J'aurai besoin de quelqun pour me faire l'algorithme de ce programme.
Si c'est possible,ca serai bien que ça soit détaillé ligne par ligne ou programme par programme.
Merci.

Sub AutoSaveDoc()
'-----------------------------------------------------------------------------------------
'Répertoires de destination (Chemins à modifier)
Const Chemin1 As String = "C:\Confirmation Anomalie\"
Const Chemin2 As String = "C:\Action Commerce\"
Const Chemin3 As String = "C:\Archive\"
'-----------------------------------------------------------------------------------------
Dim Rep As String
Dim Fichier As String
With ThisWorkbook
'Incrémente le numéro si envoi Confirmation Anomalie
If .Sheets(1).Range("Statut").Value = 1 Then
.Sheets("feuil1").Range("g2") = .Sheets("feuil1").Range("g2") + 1
'Sauvegarde le fichier dans son répertoire d'origine
ThisWorkbook.Save
End If
'Incrémente le statut du fichier
MAJStatut
Select Case .Sheets(1).Range("Statut").Value
Case 2
Rep = Chemin1
Fichier = DetermNom(.Name) & DetermNum(.Sheets(1).Range("G2").Value)
Case 3
Rep = Chemin2
Fichier = .Name
Case 4
Rep = Chemin3
Fichier = .Name
End Select
'Oriente le fichier dans le répertoire de destination
On Error GoTo Erreur
.SaveAs Rep & Fichier
MsgBox "Le fichier " & DetermNom(.Name) & " a été sauvegardé à l'adresse " & .Path
End With
Exit Sub
Erreur:
MsgBox "Erreur d'enregistrement, le dossier de destination :" & vbCrLf & Rep & vbCrLf & " n'existe peut-être pas !"
End Sub

Private Function DetermNom(N As String) As String
'Détermine le nom du document
If Right(N, 4) = ".xls" Then
N = Left(N, Len(N) - 4)
End If
DetermNom = N & " "
End Function

Private Function DetermNum(N As Integer) As String
'Détermine le numéro formaté avec des 0 devant
DetermNum = String(6 - Len(CStr(N)), "0") & CStr(N)
End Function

Private Sub MAJStatut()
'Met à jour le statut du document
With ThisWorkbook.Sheets(1)
.Range("Statut").Value = .Range("Statut").Value + 1
End With
End Sub





De celui-ci aussi,si possible:

Private Sub Workbook_Open()
Dim V As Byte
Dim Sh As Byte
V = Sheets(1).Range("Statut")
For Sh = 1 To ThisWorkbook.Sheets.Count
Sheets(Sh).Visible = IIf(Sh = V, True, False)
Next Sh
End Sub
 
M

myDearFriend

Guest
Bonsoir Vivien,

Etant l'auteur de ce morceau de code (qui d'ailleurs a été réalisé selon tes souhaits suite à ta demande sur le Chat), je vais tenter une explication détaillée :

Tout d'abord, tu avais préparé un fichier comportant 4 onglets, chacun destiné à un service, chaque service ne devait pouvoir visualiser que son propre onglet et le document devait circuler au travers de ces 4 services. Par ailleurs, tu souhaitais que le numéro ainsi que le nom du dit document s'auto-incrémente à chaque "départ" en début de circuit.

Pour suivre les étapes parcourues par le document, ce dernier comporte une cellule nommée "Statut" (dans la colonne cachée M de la feuille 1) ayant pour valeur 1 lors de la création du document, 2 si transmis au service "Confirmation d'anomalie", 3 si transmis à "Action Commerce", et 4 si transmis aux "Archives".

C'est ce statut qui va servir à déterminer quelle est la prochaine destination du fichier, donc quel sera l'onglet à afficher et à quelle adresse le sauvegarder.

>> On prédéfinit donc les 3 chemins que va suivre le document :
'-----------------------------------------------------------------------------------------
'Répertoires de destination (Chemins à modifier)
Const Chemin1 As String = "C:\Confirmation Anomalie\"
Const Chemin2 As String = "C:\Action Commerce\"
Const Chemin3 As String = "C:\Archive\"
'-----------------------------------------------------------------------------------------


>> Au premier lancement, le "modèle" comporte le numéro "000000" et le Statut est prédéfini à 1. Donc lors de l'envoi du fichier au service "Confirmation Anomalie" (étape 2), le numéro du document est incrémenté (il devient "000001" dans la cellule G2) et le "modèle" est sauvegardé afin de mémoriser ce nouveau numéro en vu de la prochaine création :

'Incrémente le numéro si envoi Confirmation Anomalie
If .Sheets(1).Range("Statut").Value = 1 Then
.Sheets("feuil1").Range("g2") = .Sheets("feuil1").Range("g2") + 1
'Sauvegarde le fichier dans son répertoire d'origine
ThisWorkbook.Save
End If


>> Comme le fichier passe une étape du circuit, on incrémente également le Statut du document (appel de la procédure MAJStatut()) :

'Incrémente le statut du fichier
MAJStatut


>> On détermine ensuite la destination du document en fonction du code Statut (le fichier est renommé avec son numéro avant envoi à la première destination) :

Select Case .Sheets(1).Range("Statut").Value
Case 2
Rep = Chemin1
Fichier = DetermNom(.Name) & DetermNum(.Sheets(1).Range("G2").Value)
Case 3
Rep = Chemin2
Fichier = .Name
Case 4
Rep = Chemin3
Fichier = .Name
End Select


>> On sauvegarde ensuite le fichier dans le dossier de destination (dossier du service compétent) :

'Oriente le fichier dans le répertoire de destination
On Error GoTo Erreur
.SaveAs Rep & Fichier
MsgBox "Le fichier " & DetermNom(.Name) & " a été sauvegardé à l'adresse " & .Path
End With
Exit Sub
Erreur:
MsgBox "Erreur d'enregistrement, le dossier de destination :" & vbCrLf & Rep & vbCrLf & " n'existe peut-être pas !"


>> A l'ouverture du document, selon le Statut de ce dernier, une macro détermine quel onglet doit être affiché :

Private Sub Workbook_Open()
Dim V As Byte
Dim Sh As Byte
V = Sheets(1).Range("Statut")
For Sh = 1 To ThisWorkbook.Sheets.Count
Sheets(Sh).Visible = IIf(Sh = V, True, False)
Next Sh
End Sub

- L'évènement Workbook_Open() de l'objet ThisWorkbook est déclenché à chaque ouverture du document.
- For Sh = 1 To ThisWorkbook.Sheets.Count : pour chaque onglet du classeur,
- Sheets(Sh).Visible = IIf(Sh = V, True, False) : si le numéro de feuille (Sh) correspond au statut (V) alors la propriété visible de la feuille est mise à True, sinon on lui donne la valeur False.

Espérant que ces explications pourront t'éclairer un peu...

Cordialement.
Didier_mDF
 

Statistiques des forums

Discussions
312 668
Messages
2 090 739
Membres
104 643
dernier inscrit
adriano22