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 !

Rechercher des sujets similaires à "code vba 2010 fonctionnant pas 2013"