Compatibilité macro entre versions d'Excel

Benjy

XLDnaute Occasionnel
Bonjour à tous,

La question a du être posée un bon paquet de fois mais je tente ma chance.
J'ai un fichier contenant des macros qui fonctionne sous 2007.
J'ai récupérer ce fichier pour le modifier sous Excel 2010.
Après enregistrement le fichier ne fonctionne plus sous 2007 ce qui est problématique pour moi.

Question :
Est ce que le simple fait d'enregistrer un fichier contenant des macros avec 2010 implique son non fonctionnement sous 2007 ?
Existe t'il une liste des macros compatible sous 2010 et pas 2007 ?

En fait je suis surpris car je suis très loin d'être un expert en macro. A part des Range, des .formula et ce genre de chose je n'ai pas grand chose dans mon code. C'est également le premier fichier que je code sous 2010, je n'ai donc pas changé mes habitudes par rapport à 2007...
D'ou mon interrogation sur la cause de cette non compatibilité entre les versions d'excel.

Si je fournis le code complet sera t'il possible de le transformer en version 2007 ?

Merci d'avance pour vos réponses,

Benjy
 

Misange

XLDnaute Barbatruc
Re : Compatibilité macro entre versions d'Excel

Bonjour
Il n'y a pas de différence entre excel 2007 et 2010 pour les macros. Il y a des objets VBA qui ont été ajoutés dans la version 2010 par rapport à 2007 (notamment pour les graphiques) mais dans l'autre sens c'est 100% compatible. Le problème ne vient pas de là.
Si le classeur a été créé avec 2003 ou antérieur, là oui il y a quelques trucs à modifier, notamment quand on recherche des fichiers sur l'ordi ou quand on fait des filtres et tris ou des graphiques.
 

Papou-net

XLDnaute Barbatruc
Re : Compatibilité macro entre versions d'Excel

Bonjour Benjy,

Difficile d'être précis quand on ne connaît pas les dysfonctionnements que tu cites.

Le plus simple serait que tu exécutes tes macros au pas-à-pas afin de savoir à quels endroits se produisent les erreurs.

Comme je n'ai pas la version 2007, je ne peux t'en dire plus mais, si tu publies les erreurs, je ne doute pas qu'un xldnaute sera en mesure de t'aider.

Cordialement.

Edit : bonjour Misange.
 

Benjy

XLDnaute Occasionnel
Re : Compatibilité macro entre versions d'Excel

Bonjour Misange,

Effectivement il semblerait que le classeur a été crée sur 2003.
Tu es 100% sur qu'il n' y a pas de différence entre 2007 et 2010 ?
Mon fichier fonctionne parfaitement sur 2010 mais ne fonctionne pas sous 2007.
( Point important à mon avis, il est enregistré sous 97-2003)

Je vais faire quelques test entres différents PC pour voir.
 

Misange

XLDnaute Barbatruc
Re : Compatibilité macro entre versions d'Excel

OUps, j'avais lu de traviole, je pensais qu'il passait sous 2007 mais pas sous 2010 alors que c'est l'inverse. Comme je te l'ai dit il y a quelques petites choses modifiées dans le VBA entre 2010 et 2007 sur les graphiques. A part ça non. Mets ton classeur en ligne ou la macro qui coince en nous disant sur quelle ligne elle coince. Les généralités ça sert rarement à quelque chose
 

Benjy

XLDnaute Occasionnel
Re : Compatibilité macro entre versions d'Excel

Code:
Sub RecupBen()


Dim i As Integer
Dim j As Integer
Dim y As Integer
Dim x As Integer
Dim t As Integer
Dim r As Integer
Dim u As Integer

Dim c As String
Dim D As String
Dim E As String
Dim z As String

Dim b As String
Dim b1 As Integer
Dim b2 As Integer
Dim XXX As Integer


Dim compteur1 As Integer
Dim compteur2 As Integer
Dim compteur3 As Integer


XXX = 0
u = 0
x = 15
z = ""
y = 4
c = ActiveWorkbook.Name

Ret = MsgBox("Vous devez selectionner un fichier EXPORT Climawin pour importer les données (Fichier EXPORT complet ou Fichier EXPORT Deperditions)," & vbCrLf & " Souhaitez vous continuer ?" & vbCrLf & " (L'importation des données peut prendre quelques secondes)", vbYesNo)
    Select Case Ret
       Case vbYes
fichier = Application.GetOpenFilename("Excel Files (*.csv), *.csv")
Workbooks.Open Filename:=fichier, Local:=True




i = Range("F4").End(xlDown).Offset(1, 0).Row
If Range("F" & i + 1) = "Surface (m²)" Then
While z <> "Surface (m²)"
i = Range("F" & y).End(xlDown).Offset(1, 0).Row
y = i + 1
z = Range("F" & y).Value
Wend
Else
i = Range("A4").End(xlDown).Offset(1, 0).Row
End If

' Verification ligne fichier export
For x = 4 To i
If Range("U" & x) <> "" Then
XXX = 1
t = Range("U" & x).End(xlToRight).Column
r = Range("U" & x).End(xlToLeft).Column
Range(Cells(x, r), Cells(x, t)).Select
    Selection.Cut
    Range("F" & x).Select
    ActiveSheet.Paste
Else
End If
Next x

D = ActiveWorkbook.Name
E = Replace(D, ".csv", "")
j = i + 10

'Nom local
Workbooks(c).Sheets("Bâtiment").Range("C15:C" & j) = Workbooks(D).Sheets(E).Range("E4:E" & i).Value
'Surface
Workbooks(c).Sheets("Bâtiment").Range("D15:D" & j) = Workbooks(D).Sheets(E).Range("F4:F" & i).Value
'Volume
Workbooks(c).Sheets("Bâtiment").Range("F15:F" & j) = Workbooks(D).Sheets(E).Range("G4:G" & i).Value
'Tint
Workbooks(c).Sheets("Bâtiment").Range("J15:J" & j) = Workbooks(D).Sheets(E).Range("H4:H" & i).Value
'Transmission
Workbooks(c).Sheets("Bâtiment").Range("K15:K" & j) = Workbooks(D).Sheets(E).Range("J4:J" & i).Value
'infiltration
Workbooks(c).Sheets("Bâtiment").Range("L15:L" & j) = Workbooks(D).Sheets(E).Range("K4:K" & i).Value
'Surpuissance
Workbooks(c).Sheets("Bâtiment").Range("O15:O" & j) = Workbooks(D).Sheets(E).Range("P4:P" & i).Value
'Deperditions par ventilation
Workbooks(c).Sheets("Bâtiment").Range("M15:M" & j) = Workbooks(D).Sheets(E).Range("L4:L" & i).Value
'batiment
Workbooks(c).Sheets("Bâtiment").Range("A15:A" & j) = Workbooks(D).Sheets(E).Range("A4:A" & i).Value
'code piece
Workbooks(c).Sheets("Bâtiment").Range("B15:B" & j) = Workbooks(D).Sheets(E).Range("D4:D" & i).Value
'Puissance totale
For x = 15 To j
Workbooks(c).Sheets("Bâtiment").Range("Q" & x).Formula = "=if(RC[-3]="""",Sum(RC[-4]:RC[-1]),Sum(RC[-3]:RC[-1]))"
Next x
'Puissance à couvrir
For x = 15 To j
Workbooks(c).Sheets("Bâtiment").Range("S" & x).Formula = "=RC[-2]"
Next x
'Puissance par radiateur
For x = 15 To j
Workbooks(c).Sheets("Bâtiment").Range("T" & x).Formula = "=RC[-1]/RC[-2]"
Next x
'Hauteur
For x = 15 To j
Workbooks(c).Sheets("Bâtiment").Range("E" & x).Formula = "=RC[+1]/RC[-1]"
Next x
'Puissance dans le local
For x = 15 To j
Workbooks(c).Sheets("Bâtiment").Range("AA" & x).Formula = "=RC[-9]*RC[-1]"
Next x
'Deper statique
For x = 15 To j
Workbooks(c).Sheets("Bâtiment").Range("P" & x).Formula = "=RC[-4]+RC[-5]"
Next x


'Secu radiateur
Workbooks(c).Sheets("Bâtiment").Range("AC15:AC" & j) = 1
Workbooks(c).Sheets("Bâtiment").Range("R15:R" & j) = 1


Workbooks(c).Activate
Workbooks(D).Saved = True
Workbooks(D).Close


'Edition pieces sans chauffage
For x = j To 15 Step -1
If Range("K" & x) = " - " Then
Range("K" & x).Value = 0
Range("L" & x).Value = 0
Range("M" & x).Value = 0
Range("O" & x).Value = 0
Range("J" & x).Value = ""
Range("T" & x).Value = 0
Else
End If
Next x

'Verif Température vide
For x = j To 15 Step -1
If Range("J" & x) = "-" Then
MsgBox ("Attention la temperature interieur n'est pas definie dans une ou plusieurs pieces. Merci de completer la ou les lignes correspondantes avant de poursuivre le calcul")
Exit For
Else
End If
Next x


'secu radiateur 2
Range("AC15").Value = 1


Ret = MsgBox("Voulez vous effectuer le calcul des totaux par batiment et par zone ?", vbYesNo)
    Select Case Ret
       Case vbYes


'Total par batiment
i = Range("A15").End(xlDown).Offset(1, 0).Row
b = Range("A15").Value
b1 = 0
For x = 15 To i + 100
If Range("A" & x) <> b Then
Rows(x & ":" & x).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Rows(x & ":" & x).RowHeight = 49.5
Selection.Font.Bold = True
With Selection.Font
        .Color = -16776961
        .TintAndShade = 0
End With
Range("A" & x) = "Somme " & b & " :"
b = Range("A" & x + 1).Value
x = x + 1
i = i + 1
b1 = 0
Else
b1 = b1 + 1
End If
Next x
Rows(i & ":" & i).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Font.Bold = True
With Selection.Font
        .Color = -16776961
        .TintAndShade = 0
End With
Range("A" & i) = "TOTAL :"



'Total par code piece
b1 = 0
b = Range("B15").Value
For x = 15 To i + 1000
If b = "" Then
x = x + 1
b = Range("B" & x + 1).Value
b1 = b1 + 1
Else
If Range("B" & x) <> b Then
Rows(x & ":" & x).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Rows(x & ":" & x).RowHeight = 49.5
Selection.Font.Bold = True
Selection.Font.Underline = xlUnderlineStyleNone
With Selection.Font
        .Color = -11489280
        .TintAndShade = 0
End With
Rows(x & ":" & x).Select
'Range("B" & x).Select
 With Selection
        .VerticalAlignment = xlCenter
    End With
Range("B" & x) = "Somme " & b & " :"
b = Range("B" & x + 2).Value
Range("D" & x).Formula = "=SUM(D" & x - 1 & ":D" & x - 1 - b1 & ")"
Range("F" & x).Formula = "=SUM(F" & x - 1 & ":F" & x - 1 - b1 & ")"
Range("K" & x).Formula = "=SUM(K" & x - 1 & ":K" & x - 1 - b1 & ")"
Range("L" & x).Formula = "=SUM(L" & x - 1 & ":L" & x - 1 - b1 & ")"
Range("M" & x).Formula = "=SUM(M" & x - 1 & ":M" & x - 1 - b1 & ")"
Range("O" & x).Formula = "=SUM(O" & x - 1 & ":O" & x - 1 - b1 & ")"
Range("Q" & x).Formula = "=SUM(Q" & x - 1 & ":Q" & x - 1 - b1 & ")"
Range("R" & x).Formula = "=SUM(R" & x - 1 & ":R" & x - 1 - b1 & ")"
Range("P" & x).Formula = "=SUM(P" & x - 1 & ":P" & x - 1 - b1 & ")"
Range("AA" & x).Formula = "=SUM(AA" & x - 1 & ":AA" & x - 1 - b1 & ")"
x = x + 2
i = i + 2
b1 = 0
Else
b1 = b1 + 1
End If
End If
Next x





'Calcul des totaux batiment
b1 = 15
For x = b1 To i
If Range("E" & x).Value = "" And Range("E" & x + 1).Value = "" And Range("E" & x + 2).Value = "" Then
If Range("A" & x) = "TOTAL :" Then
Exit For
Else
x = x + 2
Range("D" & x).Formula = "=SUM(D" & b1 & ":D" & x - 1 & ")/2"
Range("F" & x).Formula = "=SUM(F" & b1 & ":F" & x - 1 & ")/2"
Range("K" & x).Formula = "=SUM(K" & b1 & ":K" & x - 1 & ")/2"
Range("L" & x).Formula = "=SUM(L" & b1 & ":L" & x - 1 & ")/2"
Range("M" & x).Formula = "=SUM(M" & b1 & ":M" & x - 1 & ")/2"
Range("O" & x).Formula = "=SUM(O" & b1 & ":O" & x - 1 & ")/2"
Range("P" & x).Formula = "=SUM(P" & b1 & ":P" & x - 1 & ")/2"
Range("Q" & x).Formula = "=SUM(Q" & b1 & ":Q" & x - 1 & ")/2"
Range("R" & x).Formula = "=SUM(R" & b1 & ":R" & x - 1 & ")/2"
Range("AA" & x).Formula = "=SUM(AA" & b1 & ":AA" & x - 1 & ")/2"
b1 = x + 1
End If
Else
End If
Next x



'Calcul du total total
Range("D" & x).Formula = "=SUM(D15:D" & x - 1 & ")/3"
Range("F" & x).Formula = "=SUM(F15:F" & x - 1 & ")/3"
Range("K" & x).Formula = "=SUM(K15:K" & x - 1 & ")/3"
Range("L" & x).Formula = "=SUM(L15:L" & x - 1 & ")/3"
Range("M" & x).Formula = "=SUM(M15:M" & x - 1 & ")/3"
Range("O" & x).Formula = "=SUM(O15:O" & x - 1 & ")/3"
Range("P" & x).Formula = "=SUM(P15:P" & x - 1 & ")/3"
Range("Q" & x).Formula = "=SUM(Q15:Q" & x - 1 & ")/3"
Range("R" & x).Formula = "=SUM(R15:R" & x - 1 & ")/3"
Range("AA" & x).Formula = "=SUM(AA15:AA" & x - 1 & ")/3"


Case vbNo
        End Select


'Erreur dans fichier Export
If XXX = 1 Then
MsgBox ("ATTENTION, le programme a détecte une anomalie dans le fichier EXPORT." & vbCrLf & " Erreur : donnees decalees pour une ligne." & vbCrLf & " L'anomalie a ete corrige lors de l'importation des donnees.")
Else
End If

'message de fin
MsgBox ("Importation terminée ! Vérifiez le nombre de radiateurs et l'orientation de ces derniers avant de lancer la selection automatique")

       Case vbNo
        End Select
End Sub


Voilà le code. Milles excuses pour ma logique qui doit être indigeste pour la plupart d'entre vous ce n'est pas mon métier ;)
L'execution sur 2007 stoppe au début sur
Code:
Ret = MsgBox("Vous devez selectionner un fichier EXPORT Climawin pour importer les données (Fichier EXPORT complet ou Fichier EXPORT Deperditions)," & vbCrLf & " Souhaitez vous continuer ?" & vbCrLf & " (L'importation des données peut prendre quelques secondes)", vbYesNo)
    Select Case Ret
Il est fort probable qu'il y 'est d'autres erreurs par la suite mais je n'est plus de PC sous 2007 de disponible actuellement pour faire une exécution pas à pas.
 

Misange

XLDnaute Barbatruc
Re : Compatibilité macro entre versions d'Excel

Une erreur sur un msgbox ?? alors là non ce n'est clairement pas un problème de code différent entre 2007 et 2010 !! les msgbox existent depuis le ba-ba du VBA :)
Je n'ai pas 2007 pour tester. Peut être quelqu'un peut le faire pour toi ici mais il faut joindre ton classeur pour ça (enlève tout ce qui n'est pas dépendant de cette macro et ce qui est confidentiel bien sur).
Même si ce code peut être optimisé (regarde les with end with, ça permet d'alléger beaucoup les écritures déjà )
je ne vois rien dedans qui justifie qu'il passe sur 2010 et pas sur 2007. Il devrai même passer sur excel 97 !
 

Benjy

XLDnaute Occasionnel
Re : Compatibilité macro entre versions d'Excel

Je me disais aussi...
Peut être un problème lié à la sécurité des macros ?

Mais j'ai testé sur 3 PC avec 2010 et les macros s’exécutent sans message d'erreur.
J'ai testé sur un 2003 sa ne passe pas.
J'ai testé sur un 2007 sa ne passe pas.

Je vais faire d'autres test et surtout voir plus en détails ou sa coince.
Et sinon je mettrais mon classeur en ligne en espérant qu'une âme charitable pourra se pencher sur la question.
 
Dernière édition:

Benjy

XLDnaute Occasionnel
Re : Compatibilité macro entre versions d'Excel

J'ai testé sur un Excel 2003.
J'ai des erreurs pour ces lignes
Code:
.TintAndShade = 0
Dans les With. Je les ai supprimé pour le moment.

Et j'ai également une erreur sur cette ligne :

Code:
If Range("E" & x).Value = "" And Range("E" & x + 1).Value = "" And Range("E" & x + 2).Value = "" Then
Incompatible en 2003 ?
 

Misange

XLDnaute Barbatruc
Re : Compatibilité macro entre versions d'Excel

Alors oui tintandshade fait référence à la façon dont les couleurs sont déterminées avec les dégradés dans excel 2007 et +. Ce classeur n'a donc pas été créé avec 2003 et je ne pense pas que tu avais dit jusqu'ici qu'il devait être compatible aussi avec cette version.
La seconde erreur n'a pas de raison de se produire, sauf si x est supérieur à 65536 sur excel 2003 ou que x est dimensionné comme integer et que sa valeur dans la boucle va au delà 32767. Mais ce n'est forcément pas un problème de compatibilité 2007/2010. si ça passe sous 2010 ca devait passer sous 2007 et réciproquement ou alors ça coince sur les deux.
utilise la fenêtre espion pour suivre ta valeur de X.
 

Benjy

XLDnaute Occasionnel
Re : Compatibilité macro entre versions d'Excel

En réalité le classeur a été crée sous 2003 et contient des macros. Je suis passé derrière sous 2010 pour rajouter deux trois choses qui me semblait intéressante. C'est donc un mix entre 2003 (ancienne macro ) et 2010 (ma nouvelle macro)
Il ne doit pas forcément passé sous 2003 mais hier je ne disposais que d'un PC sous 2003. Je suis donc partis du principe que si le fichier marche sous 2003 il marche sous 2007.
J'ai supprimé les
Code:
.TintAndShade = 0
Sa semble fonctionner sous 2003 à présent. La seconde erreur n'étant pas réapparue. Je ne sais pas pourquoi.
x ne dépasse généralement pas la valeur de 400 ou 500 selon mes fichiers.

Je n'ai toujours pas pu tester sous 2007 mais je pense qu'a présent sa devrait tourner.
Je pense que la plupart des bugs que j'ai rencontré entre 2010 et 2007 sont liés à la sécurité des macro sous les différents PC.

Pour le moment j'ai un fichier qui fonctionne sous 2010 (testé sur 3PC différents) et un fichier qui fonctionne sous 2003 (testé sur 1PC) je pense donc que le fichier 2003 devrait fonctionner sous 2007 à présent. Je ferais un test dès que possible.

Merci de ton aide !
 

Benjy

XLDnaute Occasionnel
Re : Compatibilité macro entre versions d'Excel

J'ai vraiment du mal à comprendre...
Mon fichier fonctionne donc sur 3 PC en 2010.
Il fonctionne sur un PC en 2003 (Sp3)

Il ne fonctionne pas sur un autre pc en 2003 (version de base)
Il ne fonctionne pas sur un autre PC en 2007 (version de base)
Les erreurs sur ces deux PC sont identiques : "Erreur de compilation : Projet ou bibliothèque introuvable"

J'ai télécharger la sp3 de office 2003 mais je n'ai pas les droits administrateurs (Géniale...) Donc je ne sais pas si le problème vient de la. Mais l'erreur sur le PC disposant d'Excel 2007 me chagrine beaucoup. Même en version de base Excel 2007 devrait être capable de faire tourner un fichier qui fonctionne sous la dernière version de 2003 non ?
 

Discussions similaires

Réponses
26
Affichages
383

Statistiques des forums

Discussions
312 240
Messages
2 086 514
Membres
103 239
dernier inscrit
wari