Macro dans excel

caillou66 2 Messages postés vendredi 16 juin 2017Date d'inscription 24 juin 2017 Dernière intervention - 16 juin 2017 à 21:14 - Dernière réponse :  Luc
- 24 juin 2017 à 15:58
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.
Afficher la suite 

7 réponses

Répondre au sujet
f894009 12542 Messages postés dimanche 25 novembre 2007Date d'inscription 16 décembre 2017 Dernière intervention - 17 juin 2017 à 11:59
+1
Utile
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

Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de f894009
yg_be 4191 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention - 16 juin 2017 à 22:32
0
Utile
bonsoir, sur quelle ligne de code l'erreur se produit-elle?
Commenter la réponse de yg_be
Caillou66 - 18 juin 2017 à 10:53
0
Utile
Bonjour je suis parti en we, j'essaye cela mardi et vous dit quoi. Merci beaucoup et bonne journée
Commenter la réponse de Caillou66
-3
Utile
3
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.
 
Edit : dans les 2 premières subs, remplacer [B10:B18].PasteSpecial xlValues
par [B10].PasteSpecial xlValues
caillou66 2 Messages postés vendredi 16 juin 2017Date d'inscription 24 juin 2017 Dernière intervention - 24 juin 2017 à 13:42
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
Luc > caillou66 2 Messages postés vendredi 16 juin 2017Date d'inscription 24 juin 2017 Dernière intervention - 24 juin 2017 à 15:58
 
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.
 
Commenter la réponse de Luc