Compatibilité Version Excel

Bonjour a tous,

J'ai un problème de compatibilité entre version d'excel pour mes macros. J'ai donc trouvé un moyen avec Outils référence et décocher les library marquées manquantes pour les faire fonctionner. Néanmoins, cela ne fonctionne pas tout le temps. J'aimerais connaitre un moyen d'adapter les macros pour qu'elles fonctionnent entre les différentes versions. On m'a parlé de late binding; concernant les déclarations de variables mais je ne comprends pas trop comment faire. Merci de votre aide.

Bonjour,

il n'y a pas grand chose à comprendre si ce n'est qu'en Early binding (déclaration As New) c'est plus rapide, seulement vba intègre définitivement la version utilisée.

Il suffit d'appliquer. Par exemple :

Au lieu de Dim AppWord As New Word.Application

qui ajoute la référence "Microsoft Word 15.0 Object Library" (qui se retrouve manquante sur une autre version)

Déclarer ainsi, sans mettre un nom d'objet précis :

Dim AppWord As Object
Set AppWord = CreateObject("Word.Application")

Plus d'ajout de référence, la recherche de la version présente se fait à l'ouverture du fichier.

Par contre tu ne bénéficies plus de l'intellisense lors du développement.

Néanmoins, cela ne fonctionne pas tout le temps.

Ca ne résoudra pas les problèmes de bibliothèques qui varient au fil de version, comme le fameux calendrier qu'il vaut mieux bannir.

Mais là ce n'est plus le même message d'erreur

eric

Bonjour,

Le Late Binding ne résout pas tous les problèmes : En gros c'est un pansement sur une jambe de bois :

Il vaut mieux avoir une jambe normale !

Il faut procéder au cas par cas. La plupart des cas ne se résolvent pas par le Late Binding.

De plus tout dépend expressément du problème : Si tu programmes des macros avec un ordinateur récent il faut prendre soin de programmer dans un langage compris par tous les ordinateurs. Sinon les ordinateurs les plus anciens ne comprendront pas ce que tu programmes. Là pas de Late Binding qui tienne...

A l'inverse des programmes trop anciens doivent être reprogrammés. Il faut connaitre la/les macros, l'ancienne version d'Excel et celle d'Office et la nouvelle, (le cas échéant vérifier qu'Excel est en 32 bits (même si la machine est 64...) On commence à trouver de plus en plus de versions ou Excel est en 64 bits : Dans ce cas en cas de problème, selon le problème c'est reprogrammation d'office ! Il n'y a pas de compatibilité en MAC et PC.

La version Excel se lit dans le menu Fichier : Compte :

version

Vala...

A+

Ok ... Ce n'est ppas totalement claire mais je vais faire avec ^^.

Prenons en exemple ma macro :

Sub email1() Dim olapp As Outlook.Application Dim olMail As Outlook.MailItem Dim olinsp As Outlook.Inspector Dim wddoc As Word.Document Dim a As String c = Sheets("Reporting").Range("A6") a = "Bonsoir," & vbNewLine & "Veuillez trouver ci-dessous le rapport d'exécution du jour sur notre ordre " & c & " :" b = a & vbNewLine date1 = Sheets("Reporting").Range("A8").Value sujet = "Rachat d'Actions " & c & " " & date1 & "" Set olapp = New Outlook.Application Set olMail = olapp.CreateItem(olMailItem) Sheets("Reporting").Range("A2:J31").Select Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "\\umilp-p2\CSEC-EMETTEUR$\EMETTEURS\SALLE DE MARCHE EMETTEUR\Commercial\Reportings\" & c & " " & Format(Date, "DDMMYYYY") & ".pdf" _ , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ :=False, OpenAfterPublish:=False With olMail .Body = " " .Attachments.Add ("\\umilp-p2\CSEC-EMETTEUR$\EMETTEURS\SALLE DE MARCHE EMETTEUR\Commercial\Reportings\" & c & " " & Format(Date, "DDMMYYYY") & ".pdf") .Display .Subject = sujet .To = Sheets("Reporting").Range("R2") .BCC = Sheets("Reporting").Range("R4") .CC = Sheets("Reporting").Range("R3") Set olinsp = .GetInspector Set wddoc = olinsp.WordEditor wddoc.Range.InsertBefore b Sheets("Reporting").Activate Range("A2:j31").Copy wddoc.Range(Len(b), Len(b)).PasteSpecial , DataType:=wdPasteOLEObject End With Set olMail = Nothing Set olapp = Nothing Kill "\\umilp-p2\CSEC-EMETTEUR$\EMETTEURS\SALLE DE MARCHE EMETTEUR\Commercial\Reportings\" & c & " " & Format(Date, "DDMMYYYY") & ".pdf" End Sub

Comment je peux integrer ce late biding dans ce code svp ? Un collegue ma dit que cela fonctionnait pour lui je veux essayer. Si cela ne fonctionne pas, je reprogramerai ...

Je ne vois aucune tentative d'appliquer l'exemple fourni...

Peut-être qu'en nous montrant ce que tu fais (et le message d'erreur s'il y en a) on verrait le pb.

eric

Desole mais par soucis de confidentialité je ne peux partager le fichier. Vous pensez donc qu'il n'y a pas de moyen de rendre une macro utilisable par toutes les versions d'excel en ajoutant du code ou en modifiant des parties de code ?

Tu lis les réponses ?

Je t'ai montré un exemple mais tu n'essaies même pas

Bonjour,

Eriiic t'a montré la voie.

Ton code fait référence à la bibliothèque Outlook qui peut être différente selon les versions d'Excel. Pour un pansement provisoire sur ta jambe dont j'espère qu'elle n'est pas en bois …..

Dim olapp As Object
Dim olMail As Object
Dim olinsp As Object
Dim wddoc As Object

Set olapp = CreateObject("Outlook.Application")
Set olMail = olapp.CreateItem(0)

wddoc.Range(Len(b), Len(b)).PasteSpecial , DataType:=0

Donc :

1- merci d'utiliser la balise "</>" pour la présentation du code

2-remplacer toutes les définitions liées à la bibliothèque OutLook

3- utiliser le "CreateObject"

4- remplacer les constantes par leurs valeurs

Merci de vos réponses. Voici le code fonctionnant :

Sub email1()

Dim olapp As Object
Dim olMail As Object
Dim olinsp As Object
Dim wddoc As Object
Dim a As String
c = Sheets("Reporting").Range("A6")

a = "Bonsoir," & vbNewLine & "Veuillez trouver ci-dessous le rapport d'exécution du jour sur notre ordre " & c & " :"
b = a & vbNewLine
date1 = Sheets("Reporting").Range("A8").Value
sujet = "Rachat d'Actions " & c & " " & date1 & ""

Set olapp = CreateObject("Outlook.Application")
Set olMail = olapp.CreateItem(0)

Merci pour votre aide.

Rechercher des sujets similaires à "compatibilite version"