mise à jour d'un fichier excel

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

lagodille

XLDnaute Occasionnel
bonjour à tous

voilà ce qui m'amène :
j'ai un répertoire "D:\data" dans lequel j'ai un fichier excel toto*.xls
A l'ouverture du fichier, j'aimerai que le fichier regarde dans ce répertoire si un fichier de mise à jour existe (sous forme de macro complémentaire) et s'il ne l'a déjà pas chargé, le charge et l'installe dans le fichier puis continue a ouvrir les macro du fichier.
Est ce possible et comment?
merci d'avance
 
Re : mise à jour d'un fichier excel

Bonjour lagodille,

je ne sais pas si c'est trop dur à traiter mais c'est trop peu clair, à mon avis...

si un fichier de mise à jour existe

c'est quoi un "fichier de mise à jour" ?

(sous forme de macro complémentaire)

c'est le fichier de mise à jour qui est une macro complémentaire ?

s'il ne l'a déjà pas chargé, le charge et l'installe dans le fichier puis continue a ouvrir les macro du fichier

rien compris à cette fin de phrase.... 🙁
 
Re : mise à jour d'un fichier excel

Bonjour,

Une piste avec le code suivant qui, à l'ouverture du classeur,
1) recherche, dans le répertoire précisé par la constante CHEMIN (à adapter selon votre usage), tous les fichiers .xla
2) rend les .xla disponibles comme Macros complémentaires.

Code à copier dans la fenêtre de code de ThisWorkbook
Code:
Private Sub Workbook_Open()
Call MiseAjourXLA

'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
' suite du traitement à l'ouverture (votre code)
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

End Sub

Code à copier dans un module standard
Code:
'### Adaptez à votre chemin ###
Const CHEMIN As String = "D:\data\"
'##############################

Sub MiseAjourXLA(Optional dummy As Byte)
Dim i&
Dim Msg$
Dim T$()
Dim A$
Dim reponse%
With Application.FileSearch
  .LookIn = CHEMIN
  .Filename = "*.xla"
  If .Execute() > 0 Then
    Msg$ = "On trouve " & .FoundFiles.Count & " fichiers .xla" & vbCrLf
    ReDim T$(1 To .FoundFiles.Count)
    For i& = 1 To .FoundFiles.Count
      T$(i&) = .FoundFiles(i&)
      Msg$ = Msg$ & vbCrLf & T$(i&)
    Next i&
  Else
    Exit Sub
  End If
  .NewSearch
End With
reponse% = MsgBox(prompt:=Msg$ & vbCrLf & vbCrLf & "Voulez-vous le(s) charger ?", _
    Title:="Répertoire " & CHEMIN, _
    Buttons:=vbOKCancel + vbDefaultButton2)
If reponse% <> vbOK Then Exit Sub
For i& = 1 To UBound(T$)
  AddIns.Add Filename:=T$(i&)
  A$ = Mid(T$(i&), InStrRev(T$(i&), "\") + 1)
  A$ = Mid(A$, 1, Len(A$) - 4)
  AddIns(A$).Installed = True
Next i&
End Sub

Cordialement.

PMO
Patrick Morange
 
Re : mise à jour d'un fichier excel

Bonjour à tous

Merci à patrick pour son aide qui m'amène la question suivante :
Ne serait il pas possible, avant de charger systematiquement les fichiers xla,
de chercher s'ils n'existent pas déjà dans les macro complémentaires ces fichiers là
(éventuellement déjà chargés une fois) et dans ce cas de ne pas les recharger et de sortir de la boucle ?
On suppose que les fichiers .xla ont bien sur un nom différents (*1.xla, *2.xla etc…)
merci
cordialement
 

Pièces jointes

Re : mise à jour d'un fichier excel

Bonjour,

Voilà une nouvelle version de la Sub MiseAjourXLA qui s'occupe de ne charger que
les macros complémentaires (.xla) ne figurant pas déjà dans liste des macros complémentaires disponibles.
Toutefois, si la xla est déjà installée et n'est pas active, on l'active.
A vous de voir ce qu'il faut faire en transformant éventuellement en Rem l'instruction
If Txla(2, j&) = False Then AddIns(B$).Installed = True

Code:
'### Adaptez à votre chemin ###
Const CHEMIN As String = "D:\Dossier_LDC_17F\"
'##############################

Sub MiseAjourXLA(Optional dummy As Byte)
Dim XLA As AddIn
Dim i&
Dim j&
Dim cpt&
Dim reponse%
Dim Txla()
Dim T$()
Dim A$
Dim B$
Dim Msg$
Dim Faire As Boolean
For Each XLA In Application.AddIns
  i& = i& + 1
  ReDim Preserve Txla(1 To 2, 1 To i&)
  Txla(1, i&) = XLA.Name
  Txla(2, i&) = XLA.Installed
Next XLA
With Application.FileSearch
  .LookIn = CHEMIN
  .Filename = "*.xla"
  If .Execute() > 0 Then
    For i& = 1 To .FoundFiles.Count
      Faire = True
      A$ = Mid(.FoundFiles(i&), InStrRev(.FoundFiles(i&), "\") + 1)
      B$ = Mid(A$, 1, Len(A$) - 4)
      For j& = 1 To UBound(Txla, 2)
        If LCase(Txla(1, j&)) = LCase(A$) Then
          Faire = False
          '--- Si la xla est déjà installée et n'est pas en action ---
          '--- on la rend active. C'est comme si on faisait menu   ---
          '--- Outils/Macros complémentaires... et qu'on cochait   ---
          '--- la case CheckBox de la xla correspondante           ---
          If Txla(2, j&) = False Then AddIns(B$).Installed = True
          '-----------------------------------------------------------
          Exit For
        End If
      Next j&
      If Faire Then
        cpt& = cpt& + 1
        ReDim Preserve T$(1 To cpt&)
        T$(cpt&) = .FoundFiles(i&)
      End If
    Next i&
  Else
    Exit Sub
  End If
  .NewSearch
End With
If cpt& = 0 Then Exit Sub
Msg$ = cpt& & " " & " mise(s) à jour disponible(s) " & vbCrLf
reponse% = MsgBox(prompt:=Msg$ & vbCrLf & vbCrLf & "Mise(s) à jour à effectuer, merci", _
    Title:="Mise(s) à jour du fichier", _
    Buttons:=vbOKCancel + vbDefaultButton2)
If reponse% <> vbOK Then Exit Sub
For i& = 1 To UBound(T$)
  AddIns.Add Filename:=T$(i&)
  A$ = Mid(T$(i&), InStrRev(T$(i&), "\") + 1)
  B$ = Mid(A$, 1, Len(A$) - 4)
  AddIns(B$).Installed = True
Next i&
MsgBox prompt:=" mise(s) à jour effectuée(s)", Title:="Information"
End Sub

Cordialement.

PMO
Patrick Morange
 
Re : mise à jour d'un fichier excel

bonjour à tous,

Un grand merci à Patrick Morange pour sa célérité à répondre et ses compétences au service des autres, je vais pouvoir l'adapter à mon fichier et m'instruire un peu plus
bon week end
cordialement🙂
 
Re : mise à jour d'un fichier excel

bonsoir,
j'ai essayé de faire mon fichier *.xla mais sans succès.
En fait dans mon fichier *.xla je place une macro qui doit insérer "toto" dans la cellule B2 de la feuille "p1" du fichier *.xls
Je demande à une bonne ame de m'aider
merci
 
Re : mise à jour d'un fichier excel

Bonjour,

Essayez la démarche suivante :

1) créez un classeur
2) copiez le code suivant dans la fenêtre de code de ThisWorkbook

Code:
'### Constantes à adapter ###
Const FEUILLE As String = "p1"  'nom de la feuille cible
Const CELLULE As String = "b2"  'adresse de la cellule cible
Const VALEUR As String = "toto" 'valeur de la cellule cible
'############################

Private Sub Workbook_AddinInstall()
Dim S As Worksheet
On Error GoTo Erreur
  '--- si la feuille cible n'existe pas alors on sort ---
Set S = ActiveWorkbook.Sheets(FEUILLE)
S.Range(CELLULE) = VALEUR
Erreur:
End Sub

3) adaptez, à votre usage, les constantes cernées par des ###
4) enregistrez le classeur comme macro complémentaire .xla

Cordialement.

PMO
Patrick Morange
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
447
Retour