J'ai essayé le FolderPicker mais le problème est que l'affichage de la sélection du chemin est très différente de la boite enregistrer sous et cela risque de troubler les utilisateurs finaux (déjà perdus dès que l'on change la place d'une icône sur le bureau) car ceux-ci sont habitués au résultat de la macro existante en version VBA sous excel.
Le fait est que si je ne remets pas la même interface graphique, il va y avoir une forte augmentation de l'encombrement du service informatique de l'entreprise seulement pour dire et expliquer (pas toujours facile quand le récepteur n'est pas très réceptif) que le résultat est le même mais qu'il faut changer les petites habitudes (il y a environ 50 postes touchés), d'où la nécessité de passer par enregistrer sous.
Voilà le code vba si cela peut aider quelqu'un à trouver une solution :
Code : Tout sélectionner
Sub ChangerDeCampagne()
ActiveWorkbook.Save
On Error GoTo ChangerDeCampagne_erreur
année = InputBox("Entrez la nouvelle année de récolte") 'la variable est année
If année = "" Then Exit Sub ' vérifie si l'entrée est vide ou si on annule
If année < 1900 Or année > 2030 Then
MsgBox (année & " n'est pas une année valide")
ChangerDeCampagne
Else
monfichier = Application.GetSaveAsFilename(initialfilename:="GestionParcelles" + année, fileFilter:="Classeur Excel (*.xls), *.xls") If monfichier <> False Then
ActiveWorkbook.SaveAs Filename:=monfichier
Range("F4:F53").Copy
Range("E4").PasteSpecial Paste:=xlValues
Range("F4:F53").Select
Selection.ClearContents
Range("E2") = année
Sheets("Intrants-Résultats").Select
Range("N23:N30").Copy
Range("K23").PasteSpecial Paste:=xlValues
Range("M51:M65").Copy
Range("J51").PasteSpecial Paste:=xlValues
Range("M70:M75").Copy
Range("J70").PasteSpecial Paste:=xlValues
Range("I80:I109").Copy
Range("F80").PasteSpecial Paste:=xlValues
Range("I114:I143").Copy
Range("F114").PasteSpecial Paste:=xlValues
Range("I148:I162").Copy
Range("F148").PasteSpecial Paste:=xlValues
Range("I167:I176").Copy
Range("F167").PasteSpecial Paste:=xlValues
Range("I180:I184").Copy
Range("F180").PasteSpecial Paste:=xlValues
Range("I189:I198").Copy
Range("F189").PasteSpecial Paste:=xlValues
Range("L23:N30,K51:M65,K70:M75,G80:I109,G114:I143,G148:I162,G167:I176,G180:I184,G189:I198").ClearContents
Range("C4").Select
For Each parcelle In Range("Nom_actuel")
Sheets(parcelle.Text).Select
Range("N5,B7:N15,B20:E20,G20:L20,B23:E25,G23:L25,B29:E31,G29:L31,B35:E37,G35:L37,B44:I46,N43,A52:I61").ClearContents
Range("B65:E68,G65:G68,I65:L68,E72:L74,B77:E83,B88:E90,G88:G90,B94:E107,G94:L107,B110:E117,G110:L117,
B120:E123,G120:L123,B126:E130,G126:L130,B133:E138,G133:L138,D141,B144,D144:H144").ClearContents
Range("B7").Select
Next
Sheets("Intrants-Résultats").Select
MajConsoParcelles
Sheets("Parcelles").Select
Range("récolte").Select
ActiveWorkbook.Save
End If
End If
ChangerDeCampagne_erreur:
End Sub
Voilà, en fait ce que j'ai à traduire sous OO c'est cette partie du code :
monfichier = Application.GetSaveAsFilename(initialfilename:="GestionParcelles" + année, fileFilter:="Classeur Excel (*.xls), *.xls")