• Initiateur de la discussion Initiateur de la discussion meta
  • Date de début Date de début

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 !

M

meta

Guest
bonjour,
dans le cadre de mon activité professionnelle, je travaille beaucoup avec des liens interclasseurs, mais depuis notre passage en excel 2007 les liens ne sont plus stables.
Dans excel 2003 quand on insérait des lignes dans la base, le fichier qui y faisait références intégrait le changement de ligne ou de colonne. Depuis excel 2007, nous sommes constamment obligés de refaire les liens, le fichier qui y fait référence garde en mémoire la ligne et la colonne et non la cellule ??? serait-ce un problème de paramétrage par défaut ?
je m'interroge mais je ne trouve pas la réponse quelqu'un aurait déjà t'il eu ce problème et l'aurait résolu ?
Merci beaucoup pour vos réponses.
 
Re : problèmes de liens

bonjour,

Sur Excel 2007, deux types de fichier
- .xlsx fichier standard
- .xlsm fichier prenant en charge les macros

il faut peut être enregistrer tes fichiers .xlsx en .xlsm

(Ne pas changer juste l'extension))

@+
 
Dernière édition:
remplacer xlsx en xlsm

bonjour,

une petite macro qui peux t'aider à changer les extensions xlsx en xlsm

Code:
Sub Changer_Extension_xlsx_En_xlsm()
  With Application
    'pas d'affichage d'alerte
    .DisplayAlerts = False
    'pas de mise à jour de l'écran
    .ScreenUpdating = False
  End With

  Dim objFSO, objDossier, objFichier, objListe
  Dim Racine, ExtX, ExtM
  ExtX = ".xlsx"
  ExtM = ".xlsm"
  On Error Resume Next
  'mets le chemin de ton répertoire ici
  Racine = "C:\Users\Fred\Desktop\"
  'le nom du fichier .txt qui contiendra la liste des classeurs .xlsx
  laListe = "Liste changements ext.txt"

  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objDossier = objFSO.GetFolder(Racine)
  Set objListe = objFSO.CreateTextFile((Racine & "\" & laListe), 2)

  If (objDossier.Files.Count > 0) Then
     For Each objFichier In objDossier.Files
        's'il y a .xlsx comme extension,
        If Right(objFichier.Name, 5) = ExtX Then
          'on inscrit le nom du classeur dans la liste
          objListe.WriteLine objFichier.Name
          'on modifie l'extension en .xlsm
          NouveauNom = Left(objFichier.Name, Len(objFichier.Name) - 5) & ExtM
          'on ouvre le classeur
          Workbooks.Open Filename:=Racine & objFichier.Name
          'on l'enregistre en .xlsm
          ActiveWorkbook.SaveAs Filename:=Racine & NouveauNom, _
            FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
          'on ferme
          ActiveWindow.Close
         'on supprime le classeur xlsx
         'Kill Racine & objFichier.Name
        End If
     Next
   End If

  objListe.Close
  Set objListe = Nothing
  Set objDossier = Nothing
  Set objFSO = Nothing

With Application
  .DisplayAlerts = True
  .ScreenUpdating = True
End With

End Sub

ATTENTION : fais une copie de sauvegarde de ton répertoire avant.
L'instruction Kill supprime tes fichiers (j'ai mis un ' devant l'instruction dans le code, à toi de voir).
Je crois que Staple1600 avait écris un killer n'épargne personne

J'ai personnellement utilisé cette macro pour "transformer" mes .xls en .xlsm lorsque je suis passé à Excel 2007.

Cordialement
fred65200
 
Mettre à la corbeille vs Kill

Si tu préfères mettre à la corbeille
J'ai trouvé ce code


Code:
Private Type SHFILEOPSTRUCT
   hwnd As Long
   wFunc As Long
   pFrom As String
   pTo As String
   fFlags As Long
   fAnyOperationsAborted As Long
   hNameMappings As Long
   lpszProgressTitle As String
End Type

Private Const FO_DELETE As Long = &H3
Private Const FOF_ALLOWUNDO As Long = &H40

Private Declare Function SHFileOperation Lib "Shell32.dll" Alias "SHFileOperationA" _
                                         (lpFileOp As SHFILEOPSTRUCT) As Long
 
Public Function ZSendFileToRecycleBin(ByVal sFileName As String, Optional _
  bAskConfirmation As Boolean = True, _
   Optional ByVal hwnd As Long = 0) As Boolean
 
Dim shFile As SHFILEOPSTRUCT
Dim wResult As Long
Dim wFlags As Long
 
      If Not bAskConfirmation Then wFlags = FOF_ALLOWUNDO Or FOF_NOCONFIRMATION _
        Else wFlags = FOF_ALLOWUNDO
   
      With shFile
         .hwnd = hwnd
         .wFunc = FO_DELETE
         .pFrom = sFileName & vbNullChar & vbNullChar
         .fFlags = wFlags
      End With
   
      wResult = SHFileOperation(shFile)
      ZSendFileToRecycleBin = (wResult = 0) And (shFile.fAnyOperationsAborted = 0)
End Function
Ajoute le en haut d' un module.

Ensuite remplace
Code:
Kill Racine & objFichier.Name
par
Code:
ZSendFileToRecycleBin Racine & objFichier.Name 'False ou True
Sur mon poste, false ou true ne change rien,
j'ai décoché la case de confirmation de suppression dans les propriétés de la corbeille.




Cordialement
fred65200
 

Pièces jointes

Dernière édition:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

L
  • Verrouillé
  • Question Question
Réponses
7
Affichages
1 K
A
Réponses
11
Affichages
2 K
A
Réponses
19
Affichages
3 K
Bob O' Deville
B
F
Réponses
1
Affichages
687
fmxrider07
F
R
  • Question Question
Réponses
1
Affichages
1 K
Rousseau Benoit
R
P
  • Question Question
Réponses
6
Affichages
1 K
Retour