Shapes.Delete qui ne fonctionne pas ?

Hulk

XLDnaute Barbatruc
Hello tout le monde,

Comme le titre le dit, j'ai ceci qui est censé faire une image d'une plage, l'exporter et la supprimer après qui fonctionne nickel sur Office 2010 mais qui ne fonctionne pas avec Office 2007 ??
Code:
    With Sheets("Feuil1")
        .Range("A1:Q19").CopyPicture
        .Paste
        With .ChartObjects.Add(0, 0, 670, 360).Chart
            .Paste
            .Export chemin
        End With
        .ChartObjects(.ChartObjects.Count).Delete
        .Shapes(.Shapes.Count).Delete
    End With
La macro crée bien l'image, fait l'export, mais ne supprime pas l'image après l'export avec le Delete ??

Une idée pour y remédier ?


Cela dit, je pousse mon coup de gueule :

Décidemment c'est vraiment n'importe quoi ce qu'ils ont fait chez Microsoft, compatibilité entre les diverses versions, NUL :mad: :mad:

Les mecs pas foutus de faire quelque chose qui respecte un peu plus les (modeste pour ma part) programmeurs que nous sommes.

Perso je vois de plus en plus de mes classeurs qui ne tournent plus comme il le faudrait sous tel ou tel version d'Office...

Non parce qu'à un moment donné Bill, entre les nouvelles versions et les maj... M...E Bill !
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Shapes.Delete qui ne fonctionne pas ?

Bonjour Hulk :),

On dirait que Microsoft te fait te fâcher tout vert ;)

Je viens de tester ton code sur 2007 avec succès, pas de version 2010 sous la main

Code:
Sub a()
    With Sheets("Feuil1")
        .Range("A1:Q19").CopyPicture
        .Paste
        With .ChartObjects.Add(0, 0, 670, 360).Chart
            .Paste
            .Export "c:\temp\a.jpg"
        End With
        .ChartObjects(.ChartObjects.Count).Delete
        .Shapes(.Shapes.Count).Delete
    End With
End Sub
 

Hulk

XLDnaute Barbatruc
Re : Shapes.Delete qui ne fonctionne pas ?

Re,

Merci à tous pour vos réponses !

La façon de Dan à l'air de jouer, merci bien.

Je m'aperçois aussi que le mot clé Chr n'est pas accepté par 2007 ? J'ai donc commencé (à tort) par remplacer tous les Chr(13) qui me servaient pour les retours à la ligne, par vbCrLf (plus d'une centaine, sympa :p) , mais il y a les TextBox qui ont presque tous cette ligne -> If InStr("0123456789,", Chr(KeyAscii)) = 0 Then KeyAscii = 0 et boum erreur... Grr !

Je regarde du côté des Références et là pleins de références qui sont sur mon pc avec 2010 ne figurent pas dans la liste des références sur mon portable avec 2010... Je crois que sur mon portable avec 2007, j'avais une référence manquante, je l'ai décochée et après c'était bon, mais je crois j'en suis même pas sur.

Si je continue la liste des problèmes, j'ai sur une feuille des images (Contrôles ActiveX) Image1, Image2, etc..., il me dit que la variable Image1 n'est pas déclarée :confused: pas une variable c'est des contrôles !?

Je continue... ? Apparemment les [A1], il y a erreur faut remplacer par Range("A1"), j'arrive pas à y croire !

Vous dis pas le bordel que ça met dans mon projet :mad: :mad:

Effectivement Tototiti, j'ai les boules :mad::)

Nan parce qu'à un moment donné...;)
 

tototiti2008

XLDnaute Barbatruc
Re : Shapes.Delete qui ne fonctionne pas ?

Bonjour Dan :), Bonjour PMO2 :)
Re,

Si tu as des références manquantes, ça plombe tout. Les fonctions de bases de VBA (Len, Chr,...) ne fonctionnent plus et ça plante un peu n'importe où
Il faut avant tout que tu décoches les références manquantes, que tu coches leurs équivalent en 2007 si tu en as besoin dans ton projet, et seulement ensuite que tu corriges ton code, sinon tu vas corriger du code qui fonctionne correctement en 2007 avec les bonnes références
 

Hulk

XLDnaute Barbatruc
Re : Shapes.Delete qui ne fonctionne pas ?

Re,

C'est ce que je dis et beaucoup d'autres disent, niveau compatibilité entre les diverses version d'Office, NUL !

Bon ben merci pour tes conseils et je retourne à la mine !

Et après, tournera t-il avec d'autres versions d'Office ?

Franchement sais plus quoi faire.
 

tototiti2008

XLDnaute Barbatruc
Re : Shapes.Delete qui ne fonctionne pas ?

Re,

Pour assurer une meilleure compatibilité des références, le mieux est... de se passer de références :rolleyes: (quand c'est possible)
de nombreux objets peuvent être utilisés avec CreateObject plutôt que par une référence
CreateObject ne nécessite de cocher aucune référence
tu as des références vers quels objets ?
 

Hulk

XLDnaute Barbatruc
Re : Shapes.Delete qui ne fonctionne pas ?

Hello,

Je mets en image les liste des références côchées sur les deux pc

de nombreux objets peuvent être utilisés avec CreateObject plutôt que par une référence
CreateObject ne nécessite de cocher aucune référence
Mais franchement je ne suis pas sûr de sur quels objets elles font références... :rolleyes:

Pourrais-tu me montrer un ou deux exemples stp...

Sur une feuille : Quelques contrôles ActiveX "Image".

Dans l'Usf des : CommandButton, Image, TextBox, 1 WebBrowser, Label, mais je pense notamment aux 3 ListView, ce sont elles qui ont posés problème lors de la fameuse maj du 14 avril...

Dans l'attente, merci !
 

Pièces jointes

  • Références.jpg
    Références.jpg
    43.9 KB · Affichages: 63
  • Références.jpg
    Références.jpg
    43.9 KB · Affichages: 68
  • Références.jpg
    Références.jpg
    43.9 KB · Affichages: 69

tototiti2008

XLDnaute Barbatruc
Re : Shapes.Delete qui ne fonctionne pas ?

Bonjour à tous,

Les références ne sont pas seulement là pour les contrôles, (ne pas confondre les soucis de la mise à jour particulière de ces derniers jours avec tes problèmes de références "classiques") dans le lien en bas de ma signature, mon outil contient une Listview et un treeview et je crois qu'il n'y avait pas de soucis d'une version à l'autre (sauf versions 64 bits...)

Donc tu as le choix, soit tu fait une version 2010 et une version 2007, dans la version 2007 tu coches les références Office/Outlook 12 et en 2010 Office/Outlook 14, mais ça demande de maintenir les 2 versions.
Soit tu essayes de te passer des références qui font appels à des objets (pas aux contrôles, a priori), mais ça demande de reprendre le code
Par exemple, pour créer un objet Word :

Avec la référence Word cochée ça donne un truc du genre

Code:
Sub test()
Dim WordApp As Word.Application
Set WordApp = New Word.Application
WordApp.Visible = True
WordApp.Documents.Add
WordApp.Documents.Add
WordApp.Windows.Arrange arrangestyle:=wdTiled
End Sub

L'intérêt quand tu code c'est que tu as l'autocompletion des méthodes, les constantes, etc...

Sans la référence cochée, ça donne ça

Code:
Sub test2()
Dim WordApp As Object
Set WordApp = CreateObject("Word.Application")
WordApp.Visible = True
WordApp.Documents.Add
WordApp.Documents.Add
WordApp.Windows.Arrange arrangestyle:=0
End Sub

il faut remplacer les contantes Word par leur valeur (ici wdTiled = 0)
 

Discussions similaires

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote