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 :
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
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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:=0Donc :
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.