Macro dans excel

Fermé
caillou66 Messages postés 2 Date d'inscription vendredi 16 juin 2017 Statut Membre Dernière intervention 24 juin 2017 - Modifié le 16 juin 2017 à 21:21
 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.
A voir également:

4 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
17 juin 2017 à 11:59
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
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
16 juin 2017 à 22:32
bonsoir, sur quelle ligne de code l'erreur se produit-elle?
0
Bonjour je suis parti en we, j'essaye cela mardi et vous dit quoi. Merci beaucoup et bonne journée
0
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
Edit : dans les 2 premières subs, remplacer [B10:B18].PasteSpecial xlValues
par [B10].PasteSpecial xlValues
0
caillou66 Messages postés 2 Date d'inscription vendredi 16 juin 2017 Statut Membre Dernière intervention 24 juin 2017
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
0
Luc > caillou66 Messages postés 2 Date d'inscription vendredi 16 juin 2017 Statut Membre Dernière intervention 24 juin 2017
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.
 
0