Enregistrer sous format XLSB et variable du chemin Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
A
Ahah
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 5 décembre 2017
Version d'Excel : 2010 FR

Message par Ahah » 18 janvier 2018, 12:21

Bonjour,

Je souhaiterai enregistrer mon fichier xlsm, via une macro reprenant 2 variables : code article & ligne de conditionnement.
Ça j'ai réussi, mais je rencontre 2 problèmes :

-Le premier problème est qu'elle enregistre sous format PDF, alors que je souhaiterai sous format XLSB.
-Le second problème concerne le dossier cible. Actuellement le chemin est U:\Ordo\Dossiers individuels\1 Guillaume\Approvisionnements\Book Nomenclature
Mais selon les postes informatiques, il pourra être non plus U, mais V:\Ordo\Dossiers individuels\1 Guillaume\Approvisionnements\Book Nomenclature
Peut-on faire un codage indiquant si erreur du chemin U, alors chemin V?

Merci à vous,

Guillaume
Book Nomenclature produit.xlsm
(30.27 Kio) Téléchargé 10 fois
Avatar du membre
pyro206
Membre habitué
Membre habitué
Messages : 56
Appréciations reçues : 3
Inscrit le : 3 mars 2014
Version d'Excel : 2016fr

Message par pyro206 » 18 janvier 2018, 13:18

bonjour AhAh

voici le code que j'utilise pour la sauvegarde automatique de mes fichier
Private Sub Workbook_Open()


Dim Nomcomplet
Dim chemin
Dim dossier
Dim path

chemin = Workbooks(ActiveWorkbook.Name).path

'****************direction du dossier de sauvegarde*****************************   
   
chemin = chemin & "nom du dossier"
        
        On Error Resume Next
            
            ChDir chemin
             
'***************resulat  de 'ChDir = "C:\Users\Desktop\nom du dossier****************"
                
On Error GoTo 0

'*****attachement de la feuille au chemin*******

dossier = chemin & "nom du classeur"

'-***********attachement de l'extention**************
                path = dossier
    Nomcomplet = path & ".xlsb"

'***********************résulat  finale '"C:\Users\Desktop\dossier\classeur.xlsb*********************
    
  ThisWorkbook.SaveCopyAs Nomcomplet

end sub
en esprant avoir répondu a ta question

formule en module 2
Copie de Book Nomenclature produit (1).xlsm
(28.21 Kio) Téléchargé 14 fois
:btres:
Modifié en dernier par pyro206 le 18 janvier 2018, 13:29, modifié 2 fois.
:ordi3: :grr: :bof: 8-)
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 18 janvier 2018, 13:24

Bonjour,

xlsb est un fichier Excel, s'enregistre avec SaveAs comme tous les classeurs.
Si tu veux n'enregistrer ainsi qu'une feuille, tu commences par la copier dans un nouveau classeur :
    ActiveSheet.Copy
la feuille étant copiée dans un nouveau classeur, devenu le classeur actif, tu peux poursuivre :
    ActiveWorkbook.SaveAs sFilename, xlExcel12
Pour ton chemin, tu peux essayer de voir si ça fonctionne avec un chemin réseau : \\Ordo\Dossiers...
(s'il s'agit d'un chemin réseau, comme il semble...)

Cordialement.
A
Ahah
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 5 décembre 2017
Version d'Excel : 2010 FR

Message par Ahah » 19 janvier 2018, 11:11

Bonjour,

Merci pour votre aide.

Mon 1er problème est résolu grâce à vous, à savoir l'enregistrement au format XSLB.

En revanche je n'ai pas réussi à appliquer une macro changeant le chemin d'enregistrement en fonction du serveur...

A bientôt,

Guillaume
Avatar du membre
pyro206
Membre habitué
Membre habitué
Messages : 56
Appréciations reçues : 3
Inscrit le : 3 mars 2014
Version d'Excel : 2016fr

Message par pyro206 » 19 janvier 2018, 11:41

bonjour ahah

Essaye le code ci dessous bien sur il faut que tu le personnalise ::D ::D ::D ::D :mrgreen: :mrgreen: :mrgreen:

ce code me permet de récupérer les adresse réseau ainsi que le nom des dossier et les nom des classeur 8-) 8-) 8-) 8-)
Capture.JPG
Option Explicit
 
Declare Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean
Declare Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
 
Dim NbFichiers As Long, NbDossiers As Long
Dim Dep As Currency, fin As Currency, Freq As Currency
 
Private Sub Liste(ByVal sChemin As String, ByVal bSousDossier As Boolean)
Dim FSO As Object, Dossier As Object, SousDossier As Object, FICHIER As String
 
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Dossier = FSO.GetFolder(sChemin)
 
    FICHIER = Dir$(sChemin & "\*.*")
    Do While Len(FICHIER) > 0
        NbFichiers = NbFichiers + 1
        With ShFichiers
            .Cells(NbFichiers, 1) = sChemin
            .Cells(NbFichiers, 2) = FICHIER
        End With
        FICHIER = Dir$()
        Application.StatusBar = "Dossiers : " & NbDossiers & "  Fichiers : " & NbFichiers
    Loop
 
    If bSousDossier Then
        For Each Dossier In Dossier.SubFolders
            NbDossiers = NbDossiers + 1
            Liste Dossier.path, True
        Next Dossier
    End If
 
    Set Dossier = Nothing
    Set FSO = Nothing
End Sub
 
Sub Tst()
Dim sChemin As String
    sChemin = ThisWorkbook.path
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = sChemin & "\"
        .Title = "Sélectionner un Dossier"
        .AllowMultiSelect = False
        .InitialView = msoFileDialogViewDetails
        .ButtonName = "Sélection Dossier"
        .Show
        If .SelectedItems.Count > 0 Then
            ShFichiers.Cells.Clear
            Application.ScreenUpdating = False
            Application.StatusBar = ""
            DoEvents
            QueryPerformanceCounter Dep
            NbFichiers = 0: NbDossiers = 0
 
            Liste .SelectedItems(1), True
 
            Application.ScreenUpdating = True
            QueryPerformanceCounter fin: QueryPerformanceFrequency Freq
            Application.StatusBar = "Dossiers : " & NbDossiers & "  Fichiers : " & NbFichiers & " / " & Format(((fin - Dep) / Freq), "0.00 s")
        End If
    End With
    
 
 'Range("A1:B32").Copy
 
    Range("A1:B1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
 
 
 Sheets("BD").Select
 Range("A" & Range("A65536").End(xlUp).Row + 1).PasteSpecial (xlPasteValues)

Sheets("recup fichier").Select
    
End Sub
ensuite j'utilise le code ci-desous pour ouvrir les fichier avec une petite liste déroulante
Capture1.JPG
Capture1.JPG (23.31 Kio) Vu 513 fois
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

CHEMIN = Range("A3")
        On Error Resume Next
            ChDir CHEMIN
                On Error GoTo 0
                Dossier = CHEMIN & "\" & Range("A4")
path = Dossier
 Application.ScreenUpdating = False
 
Workbooks.Open Filename:=path, ReadOnly:=True

End Sub
:ordi3: :grr: :bof: 8-)
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 19 janvier 2018, 11:42

Bonjour,

Si V: et U: sont des lecteurs réseaux, ils remplacent une adresse réseau. S'ils permettent d'atteindre le même dossier partagé selon les personnes, c'est que cette adresse réseau est la même.
Il faut donc remplacer V: et U: par l'adresse commune qu'ils représentent.
Actuellement tu as : \Ordo\Dossiers individuels\1 Guillaume\Approvisionnements\Book Nomenclature, précédé de U: ou V: que tu enlèves et remplaces par l'adresse réseau qui se présente sous la même forme d'arborescence de dossiers (séparés par des \) et qui débute par : \\
Pour affecter une lettre de lecteur à une adresse réseau on passe par l'Explorateur Windows : menu Outils > Connecter un lecteur réseau... Vas-y donc voir !

[ ou plus simple, tu demandes à ton administrateur réseau : il te le fournira ! ]

Cordialement.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message