Code VBA sous Excel 2010 ne fonctionnant pas avec Excel 2013
Bonjour,
Nouveau sur le forum, je viens solliciter votre aide pour un problème - je pense - de compatibilité entre du VBA 2010 et 2013.
J'ai créé un fichier avec macros sous Excel 2010 pour des utilisateurs travaillant avec Excel 2007. Cela fonctionne très bien.
Depuis peu, un nouvel utilisateur travaille sous Excel 2013.
Or un problème apparait durant l'exécution d'une macro. Comme c'est la première fois qu'un utilisateur rapporte un tel problème, je suspecte un problème de compatibilité avec la nouvelle version d'Excel.
Voici le code qui génère une erreur 1004:
(Comme j'obtiens tout de même un résultat partiel, je suspecte que l'erreur survienne après la partie en bleu.)
Sub New_Month()
On Error GoTo Err_Block
Dim NewBook As String
Dim VarAnswer As Long
sht1Menu.Select
VarAnswer = MsgBox("ARE YOU SURE THAT YOU WANT TO GENERATE THE NEXT MONTH ?", vbOKCancel, "WARNING")
If VarAnswer = 2 Then Exit Sub
Application.ScreenUpdating = False
Application.EnableCancelKey = xlDisabled
ProtectAll (False)
'copy/paste final balance'
sht4Payroll.Range("as10:as36").Copy
sht4Payroll.Range("aw10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'save present/old month workbook
ProtectAll (True)
ActiveWorkbook.Save
'start new/next month workbook
'create new month file name
sht1Menu.Select
NewBook = Range("n11").Value
ProtectAll (False)
ChDir ThisWorkbook.Path
'ActiveWorkbook.SaveAs (NewBook)
If Application.Dialogs(xlDialogSaveAs).Show(NewBook) = False Then
GoTo Err_Block
End If
'Application.Dialogs(xlDialogSaveAs).Show (NewBook)
'("NewBook.xls")
'changing date and year for next month
Application.Calculation = xlCalculationManual
sht1Menu.Range("c17") = sht91SetUp.Range("b5")
sht1Menu.Range("c15") = sht91SetUp.Range("b11")
'sheet menu: erase required cells
sht1Menu.Range("j15, i17:j17, c19, c21").ClearContents
'sheets Crew list: copy/paste and erase obsolete datas
sht2CrewList.Range("e37:m63").ClearContents
sht2CrewList.Range("t37:w63").ClearContents
'sheet allotment: erase obsolete datas
sht3Allotments.Range("f15:g41, f65:g91").ClearContents
'sheets Crew payroll: copy/paste and erase obsolete datas
sht4Payroll.Range("ar10:ar36") = sht4Payroll.Range("aw10:aw36").Value
sht4Payroll.Range("r10:r36, v10:v36, x10:z36, ah10:aj36, am10:ao36").ClearContents
sht4Payroll.Range("r42:r68, v42:v68, x42:z68, ah42:aj68, am42:ao68, ar42:ar68").ClearContents
sht4Payroll.Range("aw10:aw36") = 0
Exit_Block:
'resetting workbook parameters
sht1Menu.Range("c19").Select
Application.ScreenUpdating = True
Application.EnableCancelKey = xlInterrupt
Application.Calculation = xlAutomatic
ProtectAll (True)
ChDir ThisWorkbook.Path
ActiveWorkbook.Save
Exit Sub
Err_Block:
MsgBox "Error during macro execution. Please contact the office. Error #" & Err.Number & vbCr & Err.Description
Resume Exit_Block
'
End Sub
Par avance, merci infiniment pour votre aide.
bonjour,
1) je ne vois pas de partie bleue dans ton message
2) peux-tu nous indiquer quelle instruction donne ce message d'erreur ?
merci
Bonjour h2so4 - acide sulfurique,
Merci de t'être penché sur mon problème.
J'ai édité mon message initial pour ajouter la partie en bleu. Désolé pour cet oubli.
Le code fonctionne très bien sur Excel 2010 et antérieur.
Le problème est que je ne possède pas la version 2013 pour tester.
J'opère en tant que "helpdesk". Tous les utilisateurs travaillent sur Excel 2007-2010 (donc pas de problème), mais un utilisateur récent travaille sur Excel 2013 et me rapporte ce problème.
Une idée sur le code en lui-même ?
Ou est-ce que quelqu'un connait un site répertoriant les problèmes de compatibilité entre 2010 et 2013 ?
Merci d'avance.
Du nouveau:
J'ai réussi à tester le fichier sur Excel 2013. A l'exécution de la macro, le même problème survient. Jusque là, tout est normal.
Mais là où ça devient étrange: lorsque je teste le code au pas à pas avec F8, la macro s'exécute normalement, sans aucun bug/problème.
Alors là, je sèche complètement. Une aide serait la bienvenue, svp.
bonjour,
tu peux donc indiquer l'instruction qui pose problème ?
J'ai finalement pu mettre la main sur un Excel 2013 au travail et j'ai trouvé la solution.
Je vous en livre ici le détail pour information:
- la macro exécutée depuis le document Excel générait une erreur 1004
- la macro testée sous VBA (mod debug / F8) ne génère aucune erreur !!! (véridique)
- finalement, en fouillant le code pas à pas (supprimant chaque ligne de code l'une après l'autre pour voir laquelle empêchait la macro de s'exécuter), j'ai fini par mettre le doigt sur la ligne problématique (en rouge dans mon message initial). Une simple commande de sélection.
Au final (après plusieurs heures), j'ai supprimé cette ligne de sélection qui n'avait qu'une valeur "visuelle" et tout fonctionne parfaitement.
Je ne comprends pas la raison de cette erreur 1004, si quelqu'un sait m'expliquer, je suis preneur, par curiosité.
Désolé du dérangement et merci pour votre aide !
bonjour,
je ne sais pas si c'est lié à la version, car à mon avis tu pourrais avoir le problème dans une version précédente.
worksheet.range.select
ne fonctionne pas si worksheet n'est pas sélectionné
apparemment tu dois fractionner cette instruction en 2
worksheets.select
range.select
Merci pour l'astuce supplémentaire !