Macro dans excel

caillou66 Messages postés 2 Statut Membre -  
 Luc -
Bonsoir, Pour faire nos horaires nous utilisons excel avec macro depuis plus de 15 ans. Avant certaines macros fonctionnait dans excel 2000 et maintenant dans le 10 cela ne fonctionne plus et il me met comme erreur :
Erreur d'eexécution '1004' :
Microsoft excel ne peut accéder au fichier : "C:\D518E400".
Plusieurs raisons sont possibles : ...

Voici ci-dessous la macro :
Sub TransMoisNouv()
'
' TransMoisNouv Macro
' Macro enregistrée le 20/01/03 par P.S.
'

'
    Range("E10:E18").Select
    Selection.Copy
    Workbooks.Open FileName:="C:\TransferV3.xlsx"
    Range("B10:B18").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Range("D11").Select
    ActiveWorkbook.Save
    ActiveWindow.Close
    Range("G2").Select
    Application.CutCopyMode = False
End Sub
Sub TransMoisPréc()
'
' TransMoisPréc Macro
' Macro enregistrée le 20/01/03 par P.S.
'

'
    Workbooks.Open FileName:="C:\TransferV3.xlsx"
    Range("B10:B18").Select
    Selection.Copy
    ActiveWindow.WindowState = xlMinimized
    ActiveWindow.WindowState = xlMaximized
    Range("B10:B18").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Windows("TransferV3.xlsx").Activate
    Application.CutCopyMode = False
    ActiveWindow.Close
    Range("G2").Select
End Sub

Sub MiseàZéro()
'
' MiseàZéro Macro
' Macro enregistrée le 19/01/03 par P.S.
'

'
    Workbooks.Open FileName:="C:\TransferV3.xlsx"
    Range("B10").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B11").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B12").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B13").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B14").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B15").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B16").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B17").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B18").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B17").Select
    ActiveWorkbook.Save
    ActiveWindow.Close
End Sub

Sub Action1()

If ActiveWindow.DisplayHeadings = False And ActiveWindow.DisplayGridlines = False Then

ActiveWindow.DisplayHeadings = True
 ActiveWindow.DisplayGridlines = True
 
 Else
 
ActiveWindow.DisplayHeadings = False
 ActiveWindow.DisplayGridlines = False
 
End If

End Sub


Comment récrire cela pour que cela fonctionne sous excel 2010.

Merci d'avance et bonne soirée.

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

4 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour a tous,

    Sans .Select et sans .copy

    Sub TransMoisNouv()
        ' TransMoisNouv Macro
        TR = Range("E10:E18").Value     'mise en memoire plage de cellules
        Workbooks.Open Filename:="C:\TransferV3.xlsx"
        Range("B10:B18") = TR       'copie mem plage
        Workbooks("TransferV3.xlsx").Save       ' fermeture ou pas ??
    End Sub
    
    Sub TransMoisPréc()
        ' TransMoisPréc Macro
        Workbooks.Open Filename:="C:\TransferV3.xlsx"
        TR = Range("B10:B18").Value
        Workbooks("TransferV3.xlsx").Close True
        Range("B10").Resize(9) = TR
        ActiveWorkbook.Save
    End Sub
    
    Sub MiseàZéro()
        ' MiseàZéro Macro
        Workbooks.Open Filename:="C:\TransferV3.xlsx"
        Range("B10:B18") = 0
        Workbooks("TransferV3.xlsx").Close True
    End Sub
    
    'Affiche/masque entete et grille
    Sub Action1()
            ActiveWindow.DisplayHeadings = Not ActiveWindow.DisplayHeadings
            ActiveWindow.DisplayGridlines = Not ActiveWindow.DisplayGridlines
    End Sub
    
    
    1
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonsoir, sur quelle ligne de code l'erreur se produit-elle?
    0
  3. Caillou66
     
    Bonjour je suis parti en we, j'essaye cela mardi et vous dit quoi. Merci beaucoup et bonne journée
    0
  4. Luc
     
    Essaye ce code VBA :

    
    Option Explicit
    
    Const NomX As String = "TransferV3.xlsx"
    Const FileX As String = "C:\" & NomX
    
    Sub TransMoisNouv()
      [E10:E18].Copy
      Workbooks.Open FileX: [B10:B18].PasteSpecial xlValues
      [D11].Select: ActiveWorkbook.Save: ActiveWindow.Close
      [G2].Select: Application.CutCopyMode = False
    End Sub
    
    Sub TransMoisPrec()
      Workbooks.Open FileX: [B10:B18].Copy
      ActiveWindow.WindowState = xlMinimized
      ActiveWindow.WindowState = xlMaximized
      [B10:B18].PasteSpecial xlValues: Windows(NomX).Activate
      Application.CutCopyMode = False: ActiveWindow.Close
      [G2].Select
    End Sub
    
    Sub MiseàZéro()
      Workbooks.Open FileX: [B10:B18] = 0: [B17].Select
      ActiveWorkbook.Save: ActiveWindow.Close
    End Sub
    
    Sub Action1()
      With ActiveWindow
        .DisplayHeadings = Not .DisplayHeadings
        .DisplayGridlines = Not .DisplayGridlines
      End With
    End Sub
    
    

    Merci de me dire si ça te convient.
     
    -3
    1. Luc
       
      Edit : dans les 2 premières subs, remplacer [B10:B18].PasteSpecial xlValues
      par [B10].PasteSpecial xlValues
      0
    2. caillou66 Messages postés 2 Statut Membre
       
      Bonjour,
      Quand j'essaye avec ce code, dès la mise à zéro, il m'écrit :

      Erreur d'eexécution '1004' :
      Microsoft excel ne peut accéder au fichier : "C:\D518E400".
      Plusieurs raisons sont possibles : ...

      Et si je fais débogage, il va sur la ligne :
      ActiveWorkbook.Save

      Et il bloque sur l'enregistrement de transferV3.xlsx.

      Merci de m'aider
      0
      1. Luc > caillou66 Messages postés 2 Statut Membre
         
         
        Bonjour,

        Sur ton énoncé initial, il y a dans ton code VBA 3× cette ligne :
        Workbooks.Open FileName:="C:\TransferV3.xlsx"

        Donc ton fichier est clairement "C:\TransferV3.xlsx", et mon
        code VBA le reprend 1 seule fois en constante, en 2 étapes :

        Étape 1
        Const NomX As String = "TransferV3.xlsx"
        sans C:\ devant, car dans la sub TransMoisPrec(), il y a :
        Windows(NomX).Activate

        Étape 2
        Const FileX As String = "C:\" & NomX
        avec C:\ devant, donc FileX = "C:\TransferV3.xlsx"
        (=> même nom que celui de ton code initial),
        et ensuite, FileX est utilisé plusieurs fois.

        -------------------------------------------------------

        Si le nom de fichier bloque, vérifie-le bien : c'est peut-être plutôt :
        TransfertV3.xlsx ou TransfertV3.xlsm ?

        Dans ce 2ème cas, mets :
        Const NomX As String = "TransfertV3.xlsm"

        -------------------------------------------------------

        Vérifie aussi s'il est bien à la racine du disque dur : C:\

        Si ton fichier est dans ton dossier Documents, mets :
        Const FileX As String = "C:\Users\caillou66\Documents\" & NomX
        à la place de Const FileX As String = "C:\" & NomX

        -------------------------------------------------------

        Voici d'ailleurs l'intérêt d'utiliser les 2 constantes NomX et FileX :
        en cas de modif, il suffit d'adapter le code en un seul endroit
        pour chaque : le nom de fichier et le dossier.

        -------------------------------------------------------

        Pourquoi donc as-tu une erreur pour ce fichier : "C:\D518E400"
        alors qu'il n'est pas utilisé dans ton code initial (ni le mien) ?

        De plus, s'il faut vraiment que ton code utilise ce fichier, ce serait
        mieux d'indiquer l'extension ! exemple : "C:\D518E400.xlsm"

        Si tu arrives à résoudre ces problèmes de nom de fichier (et les
        dossiers dans lesquels ils sont), ton code devrait marcher.

        Si oui, merci de l'indiquer, puis de passer le sujet en résolu.

        À te lire.
         
        0