Suppression d'images

Bonjour,

Je suis passé à la version 2007 d’Excel, et un souci se pose avec une de mes feuilles de calcul utilisée avant sous la version 2003.

En effet, j’ai des images sur ma feuille de calcul (une par ligne), et lorsque je supprime certaines de ces lignes, les images restent sur la feuille Excel. Alors que les propriétés de l’image sont les même que sous 2003 à savoir « Déplacer et dimensionner avec les cellules » !!

Y a-t-il une raison à ce problème ? Ou une solution ?

Merci d’avance de votre aide

Erwan

Bonsoir,

cela est normal, la suppression de ligne ne supprime pas l'objet !

- tu ne le vois plus, mais il est toujours là.

pour visualiser les objets et pouvoir les supprimer :

Edition/Atteindre/Cellules

tu coche l'option "Objets"

et là tu peux les supprimer.

amicalement

Claude.

Bonjour Claude

Merci pour ta réponse. Lorsque j’étais sous Excel 2003 je voyais plus les images donc elles ne sortaient pas à l’impression, mais sous 2007 les images des lignes supprimées sont toujours visible.

Mon souci est que cette feuille de calcul est automatisée, les lignes (qui sont nulles) sont supprimées par une macro. Mon souhait aurai été que lorsqu’une ligne est supprimée par la macro, l’image de la ligne correspondante ne soit plus visible (ou supprimé).

La macro: https://www.excel-pratique.com/~files/doc/Macro_suppression_lignes.xls

Merci d’avance

Erwan

Bonjour,

au vu de ta macro (xl4), tu désires supprimer toutes les lignes, entre les lignes 63 et 94, dont la valeur, dans la colonne D est soit à 0, soit vide?

Si c'est bien cela, on pourrait refaire le code (en VBA), qui supprimerait également les images

Si pas cela, peux-tu expliquer exactement ce que tu veux faire, notamment dans la suppression des lignes?

Bonjour Félix

C’est exactement cela, je souhaite supprimer toutes les lignes, entre les lignes 63 et 94 (ainsi qu’entre 9 et 35), dont la valeur, dans la colonne D est soit à 0, soit vide, et du coup supprimer l’image des lignes supprimées.

Par contre ni connaissant rien au code VBA, pourrais tu m’aider dans l’écriture de ma macro en VBA ?

Merci de t’être penché sur mon problème

Cordialement

Erwan

Bonjour

Avec XL4, pour effacer ou supprimer une image (un objet), il faut indiquer le nom de l'objet "Image 11" "Dessin 21" "Canard", etc...

ou utiliser la Fonction COUPER après sélection de la ligne, ce qui est faisable au vu de la macro.

Seul bémol, l'image ne sera supprimée que si on la colle ailleurs , n'importe ouù dans le fichier, une sorte de poubelle qu'un jour il faudrait vider, mais manuellement...

Cordialement

Re-,

ton fichier, avec le code

Pour le voir, tu fais Alt + F11

En cliquant sur le bouton vert, dans l'onglet "Certificat", les dessins rouges vont être supprimés

Le code :

Sub supp()
With Sheets("Certificat")
    .Range("D63:D94").Replace What:="0", Replacement:="", LookAt:=xlWhole
    For Each sh In .Shapes
        If Not Intersect(.Cells(sh.TopLeftCell.Row, 4), .Range("D63:D94").SpecialCells(xlCellTypeBlanks)) Is Nothing Then
            sh.Delete
        End If
    Next sh
    .Range("D63:D94").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
With Sheets("Tableau déperditions")
    .Range("D9:D35").Replace What:="0", Replacement:="", LookAt:=xlWhole
    For Each sh In .Shapes
        If Not Intersect(.Cells(sh.TopLeftCell.Row, 4), .Range("D9:D35").SpecialCells(xlCellTypeBlanks)) Is Nothing Then
            sh.Delete
        End If
    Next sh
    .Range("D9:D35").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End Sub

Le fichier :

https://www.excel-pratique.com/~files/doc/supp_lignes_et_objets.xls

Bonjour à tous,

felix,

En partant de ton code, j'ai tenté d'en faire un autre pour moi,

Sub essai()
    With ActiveSheet
        Application.ScreenUpdating = True
        For Each sh In .Shapes
                sh.Select
            rep = InputBox("Supprimer cet objet ?    O/N")
            If rep = "O" Or rep = "o" Then sh.Delete
        Next sh
    End With
End Sub

il fonctionne bien en pas-à-pas (l'objet est sélectionné), mais en auto, je ne vois pas quel

objet est pris en compte !

aurais-tu une astuce pour voir l'objet avant de le supprimer ?

Claude.

Bonjour, Claude

effectivement, on ne peut pas voir l'objet sélectionné

En biaisant un peu, essaie ce code :

Sub essai()
    With ActiveSheet
        Application.ScreenUpdating = True
        For Each sh In .Shapes
                sh.Select
                x = Selection.ShapeRange.Fill.ForeColor.SchemeColor
                Selection.ShapeRange.Fill.ForeColor.SchemeColor = 8
            DoEvents
            rep = InputBox("Supprimer cet objet ?    O/N")
            If rep = "O" Or rep = "o" Then
                sh.Delete
            Else
                Selection.ShapeRange.Fill.ForeColor.SchemeColor = x
            End If
        Next sh
    End With
End Sub

On met en noir l'objet, et si on ne le supprime pas, on lui remet sa couleur originelle....

Un peu tiré par les cheveux, mais cela semble fonctionner....

re,

çà me va très bien, merci felix

Claude.

Re bonjour Félix et Claude,

Je viens de tester la macro sur mon ficher Excel :

Sub supp()

With Sheets("Certificat")

.Range("D63:D94").Replace What:="0", Replacement:="", LookAt:=xlWhole

For Each sh In .Shapes

If Not Intersect(.Cells(sh.TopLeftCell.Row, 4), .Range("D63:D94").SpecialCells(xlCellTypeBlanks)) Is Nothing Then

sh.Delete

End If

Next sh

.Range("D63:D94").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End With

With Sheets("Tableau déperditions")

.Range("D9:D35").Replace What:="0", Replacement:="", LookAt:=xlWhole

For Each sh In .Shapes

If Not Intersect(.Cells(sh.TopLeftCell.Row, 4), .Range("D9:D35").SpecialCells(xlCellTypeBlanks)) Is Nothing Then

sh.Delete

End If

Next sh

.Range("D9:D35").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End With

End Sub

Elle fonctionne, mais quelques problèmes se posent. Elle supprime des images alors que les cellules des lignes correspondantes ne sont pas à zéro, et lorsqu’elle passe sur la page « Tableau déperditions », elle plante.

Le plus simple est que je vous envois le fichier pour que vous puissiez y jeter un œil.

https://www.excel-pratique.com/~files/doc/iyP4qEssai.xls

Pour un probleme de taille de fichier je n'ai pa pu mettre la feuille "Tableau déperditions". Sur cette feuille il n'y a pas d'image, il suffit juste de supprimer les ligne (entre la 9 et la 35) lorque la colonne D est nulle ou égale à zéro.

De plus je n'ai pas pu laisser toute les images. (elle sont remplacées par "image")

En espérant que ca soit assez clair.

Merci pour votre aide

Erwan

Désolé, mon ficher était resté protégé.

Le voici sans protection:

https://www.excel-pratique.com/~files/doc/63NtDEssai.xls

Re-,

dans ton fichier, tu n'as pas de valeur, dans la colonne D

Faut-il prendre la colonne B, ou la colonne G?

Et les 0 (zéros), sont-ils le résultat de formules, ou insérés manuellement?

Et les lignes, de 60 à 111?

Dans l'attente de ces quelques précisions

Re-,

- Il faut prendre la colonne B

- Chaque cellule en appelle une autre sur une autre feuille. Exemple : ='Insertion bati.'!G9  si G9 est égale à zéro, alors la cellule sera égale à zéro

- On peut le faire de 60 à 111. (Je m’étais arrêté à 94 dans la mesure où j’étai sur de supprimer au moins 15 ligne)

Merci à toi

Erwan

Re-,

une dernière question

Auras-tu besoin de tes formules, ultérieurement, ou je peux les remplacer par leur valeur?

Nan j'en aurais plus besoin, tu peut les remplacer par des valeurs.

Une fois que je lance la macro, j'imprime le rapport, pour les clients suivants je repart avec une nouvelle version de la feuille.

Merci

Erwan

Re-,

regarde le fichier joint

Nota, tu avais 3 objets, en bas de feuille

https://www.excel-pratique.com/~files/doc/erwan_v1.zip

le code :

Sub supp_images_et_lignes()
With Sheets("Certificat")
    With .Range("A60:K111")
    On Error Resume Next
        With .SpecialCells(xlCellTypeFormulas, 23)
            .Value = .Value
        End With
        .Replace What:="0", Replacement:="", LookAt:=xlWhole
    On Error GoTo 0
    End With
    For Each sh In .Shapes
        If Not Intersect(.Cells(sh.TopLeftCell.Row, 7), .Range("G60:G111").SpecialCells(xlCellTypeBlanks)) Is Nothing Then
            sh.Delete
        End If
    Next sh
    .Range("G60:G111").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End Sub

Impécable, on dirat que ca marcha à merveille !

Merci de t'être cassé la tête pour moi.

Bon wekeend

Erwan

Juste un dernier petit truc, serait-il possible que ce ne supprime pas les lignes entre les tableaux ?

Erwan

Re-,

il me semble que dans la colonne B, dans les interlignes, tu avais mis un petit a, avec la police blanche

Comme j'utilise la colonne G, pour la suppression des lignes vides, le plus simple serait que tu fasses de même, que tu mettes une lettre quelconque, voire un espace, dans ces cellules.

Rechercher des sujets similaires à "suppression images"