Insérer des hypothèses dans une macro + supprimer des photos grâce à une macro

alocator

XLDnaute Nouveau
Bonjour,
Etant en train d’utiliser pour réaliser un comparatif interactif, j’utilise les macros pour mettre face à face 2 produits sélectionnés et pouvoir ainsi visualiser les différences.

Chaque produit st présenté sous forme de fiche. Chacune de ces fiches ont des dimensions rigoureusement identiques de façon à pourvoir les mettre cote à cote, elles se trouvent dans l’onglet B.

Le texte se trouve aujourd’hui dans des zone de texte et des photos sont présentes sur chaque fiche.

Le document se présente de la manière suivante :
- Un onglet permettant de sélectionner le matériel à comparer (feuille A)
o Seul onglet qui, à terme sera accessible directement par les personnes
- Un onglet comprenant ttes le fiches des produits (feuille B)
o Invisible à terme
- Un onglet où sont transférer les 2 fiches sélectionnées (copier/coller) (feuille C)
o Permet aux personnes d’effectuer leur comparatif directement sur l’écran
- Un onglet destiné à l’impression recto / verso (le seul moyen que j’ai trouvé pour faire coïncider le recto avec le verso : subtil mais ca marche bien) (feuille D)
o Invisible à terme

Tout ceci serait merveilleux si je ne me heurtais pas à certains problèmes :

1er
Par définition, l’onglet comparatif (feuille C) contient les 2 fiches issues de la feuille B et sélectionnées dans la feuille A. Seul souci, comment demander à Excel la chose suivante : si dans la feuille C l’espace de gauche sur la page est libre alors insertion de la 1ére fiche à gauche sinon à droite de la page. Ceci réglerait mon souci actuel, car les macros enregistrées à ce jour basculent les fiches automatiquement dans une case prédéfinie, soit à gauche soit à droite mais ce copier/coller est réglé à l’avance (si 2 fiches possèdent le même emplacement du collage dans l’onglet comparatif, j’aurai une superposition des fiches).

En gros la question est de savoir si les macros acceptent une formule de type : si la fficeautre cellule définie. Delà, la 1ére fiche sélectionnée irait automatiquement à gauche puis la suivant s’alignerait à côté de façon tout aussi automatique.
Et si oui, l’auriez vous ?

2éme
Comment faire en sorte que les photos soient supprimées lors de l’exécution d’une macro destinée à cet effet ? Je demande à une macro de supprimer la totalité des informations contenues sur la feuille C en vue de pouvoir à nouveau comparer 2 autres produits. Seul hic, tout s’efface sauf les photos. Seule solution que je viens de trouver à l’instant serait dans la macro, de créer une nouvelle feuille aux mêmes caractéristiques que la feuille C puis de supprimer la 1ere feuille C afin de renommer le nouveau par le même nom. A voir

Les questions vous semblent elles suffisamment claires et auriez vous une solution à ce problème ?

D’avance merci pour votre aide,
Sébastien

PS : je suis sur office 2007 est la majorité des utilisateurs utilisera 2003.
 

Pièces jointes

  • comparatif.xlsm
    88.7 KB · Affichages: 87
  • comparatif.xlsm
    88.7 KB · Affichages: 96
  • comparatif.xlsm
    88.7 KB · Affichages: 89
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : Insérer des hypothèses dans une macro + supprimer des photos grâce à une macro

Salut alocator et le forum
Il est difficile d'expliquer avec du texte, mais encore plus de le comprendre et de faire comprendre la solution. C'est pour ça qu'on demande des fichiers d'essai : pour ton cas, il faudrait 3 feuilles :
- Feuille A : une possibilité de sélection de 4 produits
- Feuille B : 4 produits : P1, P2, P3 et P4 (des lettres pour le texte, et des nombres pour les valeurs numériques (1,2,3, etc.)
- Feuille C : ta feuille
En général, je fais une copie du fichier de travail en limitant le nombre de données.
Tout ceci serait merveilleux si je ne me heurtais pas à certains problèmes :
si dans la feuille C l’espace de gauche sur la page est libre
Il suffit de tester une cellule qui doit être remplie par la macro.
En gros la question est de savoir si les macros acceptent une formule de type : si la fficeautre cellule définie. Delà, la 1ére fiche sélectionnée irait automatiquement à gauche puis la suivant s’alignerait à côté de façon tout aussi automatique.
Oui, mais sans infos...
Comment faire en sorte que les photos soient supprimées
Si les images ne sont pas supprimées, c'est qu'elles sont sur une Shape. Il suffit de supprimer les Shapes qui gênent dans la feuille /
A+
 

alocator

XLDnaute Nouveau
Re : Insérer des hypothèses dans une macro + supprimer des photos grâce à une macro

je me disais bien que ca ne pouvait pas être limpide. Voici donc le fichier pouvant ressembler au fichier final souhaité.

Merci pour ovtre aide et n'hésitez pas me me dire si le fichier n'est a-pas assez clair, je pourrais le refaire demain dans la journée.
cdt,
Sébastein
 

Gorfael

XLDnaute Barbatruc
Re : Insérer des hypothèses dans une macro + supprimer des photos grâce à une macro

Salut alocator et le forum
T'as pas tout compris : on a besoin de pouvoir relier tes différentes feuilles aux macros pour comprendre ce que tu veux.
Je suppose queque c'est ce code qu'il faut modifier :
Code:
Sub IMPRESSION_PDF()
'
' IMPRESSION_PDF Macro
'

'
Sheets("COMPARATIF RECTO").Select
Range("A1:CJ36").Select
Range("CJ1").Activate
Selection.Copy
Sheets("IMPRESSION PDF").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("COMPARATIF RECTO").Select
ActiveWindow.SmallScroll Down:=36
ActiveWindow.Zoom = 55
Range("AS37:CJ72").Select
Range("CJ37").Activate
Application.CutCopyMode = False
Selection.Copy
Sheets("IMPRESSION PDF").Select
ActiveWindow.SmallScroll Down:=18
Range("A37").Select
ActiveSheet.Paste
Sheets("COMPARATIF RECTO").Select
ActiveWindow.SmallScroll Down:=0
Range("A37:AR72").Select
Range("AR37").Activate
Application.CutCopyMode = False
Selection.Copy
Sheets("IMPRESSION PDF").Select
Range("AS37").Select
ActiveSheet.Paste
Range("DA54").Select
ActiveWindow.SmallScroll Down:=-36
Range("A1:CK72").Select
Range("CK1").Activate
Application.CutCopyMode = False
ActiveSheet.PageSetup.PrintArea = "$A$1:$CK$72"
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
Columns("A:CK").Select
Range("CK1").Activate
Selection.Delete Shift:=xlToLeft
Range("CT12").Select
Sheets("MODELES").Select
End Sub
Ça me rappelle mes débuts ;).
On va décomposer un peu :
Sheets("COMPARATIF RECTO").Select Une sélection a pour action principale de ralentir ton code. Sélectionner la feuille "Comparatif Recto". Comme je n'ai plus comme feuille que A, B, C et "Impression PDF", je suppose que c'est la feuille C
Range("A1:CJ36").Select la plage qu'on sélectionne
Range("CJ1").Activate la cellule qu'on active (pour rien)
Selection.Copy l'action qu'on fait (copier la sélection dans le presse-papier
Sheets("IMPRESSION PDF").Select on sélectionne la feuille d'arrivée
Range("A1").Select on selectionne la cellule d'arrivée
ActiveSheet.Paste on colle le presse papier dans la cellule d'arrivée
Comme on est à l'époque du light, le même résultat après dégraissage ;)
Sheets("COMPARATIF RECTO").Range("A1:CJ36").Copy Sheets("IMPRESSION PDF").Range("A1")
Copier la plage A1:CJ36 de "COMPARATIF RECTO" dans "IMPRESSION PDF" à partir de A1
Un peu plus...concis que le code initial, non :p ?
ActiveWindow.SmallScroll déplacement sur l'ascenseur : inutile
Application.CutCopyMode = False Sortir du mode copier/couper => efface les tirets clignotant qui apparaissent sur une action Copier/Couper. Une seule fois en fin de macro.

Par contre, je ne comprends pas la ligne
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
Je ne connais pas les arguments de l'instruction Print d'Excel 4
Donc, si tu pouvait expliquer ce que sont les options d'impression ?

Ta macro ressemble plus à ça
Code:
Sub IMPRESSION_PDF()
' IMPRESSION_PDF Macro
With Sheets("IMPRESSION PDF")
    Sheets("COMPARATIF RECTO").Range("A1:CJ36").Copy .Range("A1")
    Sheets("COMPARATIF RECTO").Range("AS37:CJ72").Copy .Range("A37")
    Sheets("COMPARATIF RECTO").Range("A37:AR72").Copy
End With
'Manque d'info pour corriger réellement
Sheets("IMPRESSION PDF").Select
Range("AS37").Select
ActiveSheet.Paste
Range("A1:CK72").Select
Application.CutCopyMode = False
ActiveSheet.PageSetup.PrintArea = "$A$1:$CK$72"
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
'Suppression plage A:CK
Columns("A:CK").Delete
'retour page d'origine ?
Sheets("MODELES").Select
End Sub
Il y a toujours plusieurs façons de traiter un problème avec Excel.
Si j'ai bien compris, on imprime de A1 à CK72. Pas utile de redéfinir la plage à chaque fois.
Mais si on a une seule feuille à imprimer :
- Soit on crée une nouvelle feuille d'impression et on choisit la feuille avec laquelle travailler
- soit on colle sur A1:AR36 et sur AT37:CK72
- Soit on colle sur AT1:CK36 et sur A37:CK72
Une fois les plages de collages déterminée, pour savoir s'il y a une ou deux pages, il faut trouver, dans la feuille comparatif Recto une cellule qui sera obligatoirement remplie. En la testant, on choisira quoi faire. C'est pour ça que je demandais 4 produits "renseignés".
A+
 
Dernière édition:

alocator

XLDnaute Nouveau
Re : Insérer des hypothèses dans une macro + supprimer des photos grâce à une macro

Bonjour, et merci pour cette version light de l'impression.
Je me suis permis de garder les copier / coller initiaux car ce syst me permet d'inverser le verso en les passant de gauche à droite et inversement (necessaire lors de l'impression pour avoir ts les éléméents d'un fiche du même côté lorsqu'on la retourne).

B]ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)[/B]
Il s'agit de l'impression au format PDF via pdf creator

De plus, j'ai inséré un réajustement des colonnes en fin de macro car sinon à force de supprimer les colonnes pour enlever tous les éléments, la largeur standard reviendrait.

Donc pour ce qui est de la macro Imppression PDF, c'est OK pour moi, elle correspond pleinement au but recherché. Cool :)

Reste ce procblème de posiitonner la fiche d'un produit à gauche ou à droite dans la feuille "comparatif" en fonction de la dispo de la cellule B3. Si cette cellule est vide, apliqquer le transfert de fiche à parir de A1 sinon AT1. Comment cela est ce possible ?

Autre question : comment fais tu pour supprimer les "Shape" reprenant les photos ?

A plus,
Sébastien
Ps : le fichier Excel à été modifié, il est plus détaillé que l'original et contient les modifs que tu as proposé.
 

Kiseki

XLDnaute Occasionnel
Re : Insérer des hypothèses dans une macro + supprimer des photos grâce à une macro

Bonjour,

Si cela t'intéresse tu peux charger l'image d'un produit avec ou sans redimensionnement à l'aide d'une fonction personnalisée :

=AfficheImage(NOM;répertoire)

Si répertoire n'est pas indiqué ce sera /image/

Si l'image n'est pas trouvée ce sera "Image".

Le redimensionnement est en rapport avec la taille de la cellule (On peux fusionner).


Code:
Function AfficheImage(NomImage, Optional rep)
  Application.Volatile
  If IsMissing(rep) Then rep = ThisWorkbook.Path & "\Image\"
  Set adr = Application.Caller
  Set adr2 = Range(adr.Address).MergeArea
  temp = NomImage & "_" & adr.Address
  Existe = False
  For Each s In adr.Worksheet.Shapes
    If s.Name = temp Then Existe = True
  Next s
  If Not Existe Then
     For Each k In adr.Worksheet.Shapes
        p = InStr(k.Name, "_")
        If Mid(k.Name, p + 1) = adr.Address Then k.Delete
     Next k
     If Dir(rep & NomImage) = "" Then
        AfficheImage = "Image"
     Else
       Set myShell = CreateObject("Shell.Application")
       If TypeName(rep) = "Range" Then
          Set myFolder = myShell.Namespace(rep.Value)
       Else
          Set myFolder = myShell.Namespace(rep)
       End If
       Set myFile = myFolder.Items.Item(NomImage)
       Taille = myFolder.GetDetailsOf(myFile, 26)
       H = Val(Split(Taille, "x")(1))
       L = Val(Split(Taille, "x")(0))
       echH = adr2.Height / H
       EchL = adr2.Width / L
       If L * echH > adr2.Width Then ech = EchL Else ech = echH
       H = H * ech
       L = L * ech
       Set s = adr.Worksheet.Shapes.AddPicture(rep & NomImage, True, True, adr.Left, adr.Top, L, H)
       s.Name = NomImage & "_" & adr.Address
       AfficheImage = ""
    End If
  End If
End Function


Le seule soucis que je rencontre c'est que le nom de l'image ne peux être trouvé par une formule, sinon excel plante, à moins que ça ne te fasse pas le coup.
 

alocator

XLDnaute Nouveau
Re : Insérer des hypothèses dans une macro + supprimer des photos grâce à une macro

Pour ce cas précis, j'envisage de toujours garder en invisible la trame de la feuille "comparatif". Lors de l'éxécution de la macro, la feuille comparatif visible se supprime, je fais un copier/coller de la feuille "comparatif" invisible pour la renommer correctmeent et ques les macros continuent à bien s'effecvtuer. Un peu lourd mais ca devrait marcher.
As tu une idée pour le dernier point à savoir :
Le posiitonnenement de la fiche d'un produit à gauche ou à droite dans la feuille "comparatif" en fonction de la dispo de la cellule B3. Si cette cellule est vide, apliqquer le transfert de fiche à parir de A1 sinon AT1. Comment cela est ce possible ?

En tout cas déjà merci pour ton aide, ca peut paraitre rien mais ca aide beaucoup :)
A plus,
Sébastien
 

alocator

XLDnaute Nouveau
Re : Insérer des hypothèses dans une macro + supprimer des photos grâce à une macro

Pour revenir sur les photos, comme le fichier Excel sera seul, je ne peut pas créer de lien de typoe hypertexte pour que le fichier aille cherher une image, d'oû la suppresion totale de la feuille
 

alocator

XLDnaute Nouveau
Re : Insérer des hypothèses dans une macro + supprimer des photos grâce à une macro

Yop à tous,
je reviens vers vous pour tenter de trouver une solution a cette question : Mais comment faire pour créer une hypothèse dans une macro de type si la cellule A3 de la feuille intitulé "comparatif" est libre alors copie d'une plage sélectionnée en amont à partir de A1, sinon copie à partir de la cellule AT1 ?

Merci pour votre aide,
Sebastien
 

Gorfael

XLDnaute Barbatruc
Re : Insérer des hypothèses dans une macro + supprimer des photos grâce à une macro

Salut alocator et le forum
si la cellule A3 de la feuille intitulé "comparatif" est libre alors copie d'une plage sélectionnée en amont à partir de A1, sinon copie à partir de la cellule AT1 ?
Est libre ne veut rien dire. vide ou non a une signification.
Code:
If isEmpty(sheets("comparatif").[A3]) then
    set cel = Sheets("IMPRESSION PDF").[A1]
Else
    set cel = Sheets("IMPRESSION PDF").[AT1]
endif
Sheets("COMPARATIF RECTO").Range("A1:CJ36").Copy Cel
A+
 

Discussions similaires

Réponses
26
Affichages
377

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16