Syntaxe Importer Image dans feuille Excel vers UserForm

Résolu
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 - 1 mars 2012 à 15:51
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 - 2 mars 2012 à 19:52
Bonjour à tous,

Pour importer une image depuis un fichier dédié : Pas de problème avec le code
Chem = "C:\InfiltroPass\Images"
Pict = "Toto.jpg"
VoirGamme.Slide.Picture = LoadPicture(Chem & Pict)


Mais si je veux plutôt utiliser cette image, préalablement collée dans MaFeuille de MonClasseur sous MonImage (ouvert),
Chem = "C:\InfiltroPass"
'Quelle syntaxe pour Pict ?
Pict = "Workbooks("MonClasseur").Sheets("MaFeuille").Shapes("MonImage")"
VoirGamme.Slide.Picture = LoadPicture(Chem & Pict)


La syntaxe n'est évidemment pas correcte (incompatibilté de type)!

Je suis un peu confus, mais je cherche toujours la bonne syntaxe en vain...

Merci d'un coup de main.

Cordialement
Rataxes64

25 réponses

CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
2 mars 2012 à 19:52
Oups!

Erreur de copier/coller de VoirGamme...

Private Sub UserForm_Initialize()

    GmeBox.value = ActiveCell.value
    
End Sub

Private Sub GmeBox_Click()
'Par Userform Images

    Application.ScreenUpdating = False
    Dim Gme As String
    'Dim iGme As String ' As quoi ?
    
    Gme = GmeBox.value
    ActiveCell.value = Gme
    
    'Reprise de l'image dans userform Images
    iGme = "Image" & Replace(GmeBox.value, ",", "_")
    If Gme = "C2" _
        And VoirGamme.ModelVT.Caption = "S2000" _
        Then iGme = "ImageC2_2"
    If Gme = "C2" _
        And VoirGamme.ModelVT.Caption = "S3000" _
        Then iGme = "ImageC2_3"
    GmeSlide.Picture = Images.Controls(iGme).Picture
    
End Sub


Ceci est évidemment inutile !

Private Sub RepGmeBox_Click()
'Par répertoire de fichiers
'.../...
End Sub

Rataxes64
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2012 à 16:30
Bonjour,

Lorsque tu affecte un fichier image à un contrôle, VBA ne garde pas en mémoire son chemin, mais uniquement l'image.
Ce genre de démarche n'est donc pas réalisable.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
1 mars 2012 à 16:52
Bonjour Ucfoutu,

Donc, on ne peut pas "coller" un objet Shape, présent dans une feuille, dans une UserForm ?...

Et zut!

Cordialement
Rataxes64
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
1 mars 2012 à 17:14
Bonjour,
C'est exact, on ne peut pas "coller" un objet Shape, présent dans une feuille, dans une UserForm. Par contre si cela t'interesse regarde ceci qui est assez étonnant:
http://silkyroad.developpez.com/VBA/ExcelImageGIF/
@+Le Pivert
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2012 à 17:19
Non.
Et on ne saurait non plus charger dans un contrôle image (je viens d'essayer) le contenu du presse-papier.
on peut y copier l'image (dans le presse-papier) par (exemple ici) :
ActiveSheet.Shapes("Image 2").CopyPicture

Mais les contrôles image de VBA ne permettent pas, comme ceux de VB6, d'attribuer à la propriété Picture une image autrement que par LoadPicture qui, lui, nécessite le chemin d'accès d'un fichier image.

Je ne vois dans ces conditions pas d'autres solution que l'utilisation d'un array, genre :
toto = array("D:\titi.bmp","D:\blala\coucou.bmp", etc ...)
array dans lequel figurent, dans l'ordre de ton choix, les chemins utilisés pour tes Shapes.
Et ensuite ===>> exemple ===>>
Image1.picture = LoadPicture(toto(1)) ' chargera l'image du fichier "D:\blala\coucou.bmp"
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2012 à 17:27
Ou encore : peut-être plus "parlant" et plus facilement utilisable, une collection déclarée dans un module
Dim toto As New Collection
toto.Add "D:\bateau.bmp", "Image 1"
toto.Add "D:\blabla.bmp", "Image 2"


et ensuite, là où tu le veux dans ton code : exemple
Image1.Picture = LoadPicture(toto.Item("Image 2"))




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
1 mars 2012 à 18:14
Résumons:

Je veux éviter de passer par un répertoire contenant les images afin que l'on n'ait à utiliser que UN SEUL Classeur.

Un macro pourrait-elle faire ça :

1° Copier une image choisie dans Paint,
2° l'enregister sous C:\Temp\Toto.jpg,
3° appeler le fichier dans xxx.Picture=LoadPicture("C:\Temp\Toto.jpg"),
4° puis détruire le fichier par kill.

Mais comment faire le 1° et le 2° ?

Je cherche...

Cordialement
Rataxes64
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2012 à 18:26
Pour faire celà, il te faudrait piloter Paint (et je vois mal un tel mécanisme ... à coups de Sendkeys !)
- copier l'image (je t'ai montré comment avec CopyPicture). Elle est dans le press-papier
- ouvrir paint
- ===>> edition ===>> coller
- Fichier ===>> enregistrerer sous ===>> renseigner
- fermer Paint

et faire ensuite le reste (qui est par contre alors simple)

C'est déraisonnable, Maxime.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
1 mars 2012 à 18:46
Il faut que je sois plus précis!
Je vais essayer de faire court...
Dans une feuille "Mesures", j'ai des cellules avec Données/validation/Liste (par ex. liste= 1;2;3;4)

Quand le vais faire un choix dans la liste, avec Worksheet_Change, cela ouvre une Form (non modal), et je veux y afficher dans .picture une des image .jpg (construites à partir de différents jeux de cercles de couleurs groupés 'Groupe xxx') que j'ai collées dans une feuille ("Débits").

J'ai trouvé ça sur le net (Michel PIERRON):

Option Explicit
Private Declare Function IsClipboardFormatAvailable Lib _
"user32" (ByVal wFormat As Integer) As Long
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function GetClipboardData Lib "user32" _
(ByVal wFormat As Integer) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" _
(PicDesc As uPicDesc, RefIID As GUID _
, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
Private Declare Function CopyImage Lib "user32" (ByVal handle As Long _
, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long _
, ByVal un2 As Long) As Long
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
Private Type uPicDesc
Size As Long
Type As Long
hPic As Long
hPal As Long
End Type

Private Function PasteBmp() As IPicture
Dim hCopy As Long
If IsClipboardFormatAvailable(2) Then
If OpenClipboard(0&) Then
hCopy = CopyImage(GetClipboardData(2), 0, 0, 0, &H4)
CloseClipboard
If hCopy Then Set PasteBmp = CreateBmp(hCopy, 0, 2)
End If
End If
End Function

' IPicture requires a reference to "OLE Automation"
Private Function CreateBmp(ByVal hPic As Long, ByVal hPal As Long, ByVal lPicType) As IPicture
Dim i As Long, PicInfo As uPicDesc, OlePicStore As GUID, IPic As IPicture
With OlePicStore
    .Data1 &H7BF80980: .Data2 &HBF32: .Data3 = &H101A
    For i = 1 To 8
        .Data4(i - 1) = Choose(i, &H8B, &HBB, &H0, &HAA, &H0, &H30, &HC, &HAB)
    Next i
End With
With PicInfo
    .Size = Len(PicInfo)
    .Type = 1
    .hPic = hPic
    .hPal = hPal
End With
If OleCreatePictureIndirect(PicInfo, OlePicStore, True, IPic) Then MsgBox "Impossible de créer le bitmap !", 48
Set CreateBmp = IPic
End Function

Sub SaveBmp() ' inutilisé (Optional idx As Integer = 1)
On Error GoTo Fin
Dim oPic As IPictureDisp, BmpFile As String
'Inutilisé ThisWorkbook.Sheets("Débits").Shapes("Picture " & idx).CopyPicture xlScreen, xlBitmap
ThisWorkbook.Sheets("Débits").Shapes("Image 683").CopyPicture xlScreen, xlBitmap
BmpFile = ThisWorkbook.Path & "\Temp.bmp"
Set oPic = PasteBmp: SavePicture oPic, BmpFile
VoirGamme.GmeSlide.Picture = LoadPicture(BmpFile)
Kill BmpFile: Set oPic = Nothing
Exit Sub
Fin: MsgBox "Image non trouvée !", 48
End Sub


Dans ma Form, j'ai:
Private Sub UserForm_Initialize()
GmeSlide.Picture = LoadPicture("")
SaveBmp
End Sub
'-----------------------------------------
Private Sub GmeBox_Change()
Application.ScreenUpdating = False
Dim Gme
Gme = GmeBox.value
'Remplace GmeSlide.Picture = LoadPicture("C:\InfiltroPass\Images" & Gme & ".jpg")
SaveBmp
ActiveCell.value = Gme
End Sub


Si je lance "manuellement" la sub SaveBmp, le fichier Temp.bmp est bien construit sur mon bureau, et peut donc être exploité (Set oPic = PasteBmp: SavePicture oPic, BmpFile).

En revanche, il ne l'est plus avec WorkSheet_Change car Temp.bmp inexistant....

Une idée ?

Cordialement
Rataxes64
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2012 à 19:27
Bonjour,
ce que fait ce code est reconstruire un fichier image à partir d'une image mise en mémoire (par CopyPicture) dans le presse-papier. Lourd, mais le fait.
Je ne comprends par contre pas :
En revanche, il ne l'est plus avec WorkSheet_Change car Temp.bmp inexistant

A quel moment et par quel code ?
Si après le code montré et que tu cherches ce fichier, il n'y est plus, du fait de ton
Kill BmpFile

J'ignore tout de ton mécanisme.
A l'aveugle, donc : je te dirais de déclarer la variable BmpFile en Public dans un module et de ne tuer BmpFile qu'en quittant ton classeur.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2012 à 20:14
Je ne sais pas non plus pourquoi et dans quelles circonstances tu aurais besoin de mettre en oeuvre un tel artifice consistant à récupérer, pour en faire un fichier bmp, le contenu d'une image (ton shape "Image 683") dont il a bien, à la base, fallu que tu la charges à partir d'un fichier image déjà existant.
A moins que tu ne dises pas tout. Mais dans ce cas : comment as-tu donc chargé "Image 683" ? quelle est son origine ? Pourquoi et dans quelles circonstances son origine aurait disparu ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 mars 2012 à 20:57
Je voudrais également appeler ton attention sur un point :
Si, sur ta feuille :
en lieu et place d'insérer une image dans un Shape, tu l'insérais dans un contrôle activex image "imagetoto", le problème disparaitrait totalement, car ainsi :
sur ton userform où tu insérerais une image Image1 :
Image1.Picture = ActiveSheet.Imagetoto.Picture

ferait que l'image du contrôle Imagetoto de ta feuille viendrait se mettre sans aucune espèce de problème dans le contrôle Image1 de ton Userform, sans passer par tout un tas d'artifices acrobatiques et lourds.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
1 mars 2012 à 23:09
Bonsoir,

Je galère toujours...

Ucfoutu, pour eépondre à ta (judicieuse!) question:
j'avais dit plus haut
Je veux éviter de passer par un répertoire contenant les images afin que l'on n'ait à utiliser que UN SEUL Classeur.


Bien sûr, tu as raison, j'ai "construit" ces images (je les ai dans un répertoire), mais pour diffuser mon classeur, je souhaite ne pas avoir à installer ce répertoire.
Le but étant alors de coller les images du répertoire dans une feuille du classeur.
Reste à pouvoir les "appeler" ensuite!

1°) Je dois déjà pouvoir les renommer correctement. En effet, quand je les colle, elles changent de nom ("image xxx") ; mais je n'ai toujours pas trouvé comment faire ça en VBA...

2°) Leur appel est délicat :
Dans la liste de la cellule, j'appelle une valeur d'un calibre, dont je veux montrer une image. Si, à la vue de l'image, le calibre choisi n'est pas le bon, il faut donc en changer la valeur choisie dans la liste de sa cellule.
"Pour voir", j'ai mis une combo (Gme) dans ma userform, qui reprend la même liste que dans la cellule, et là, j'actualise bien l'image correctement avec Private Sub GmeBox_Change().

C'est donc bien faisable, mais le worksheet_change de ma cellule me joue (encore!!!) des tours...

Je continiue de chercher...

Cordialement
Rataxes64
0
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
1 mars 2012 à 23:27
Re bonsoir,

Très bien, Ucfoutu, ça doit être très bien ça :

tu l'insérerais dans un contrôle activex image "imagetoto",


Mais je ne sais pas du tout le faire...

Tu m'expliques un peu s'il te plaît ?

Cordialement
Rataxes64
0
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
2 mars 2012 à 00:04
Bon,

Je vais rester "à mon humble niveau" ; j'en peus plus de tourner en rond!

Voilà "ce qui marche" : Que du classique!

Un répertoire C:\InfiltroPass\Images qui contient toutes les images

Dans la feuille "Mesures" des plages de cellules avec listes
    If Not Intersect(Target, Sheets("Mesures").Range("H42:Q42")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H72:Q72")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H95:Q95")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H113:Q113")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H131:Q131")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H149:Q149")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H167:Q167")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H185:Q185")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H203:Q203")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H221:Q221")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H239:Q239")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H257:Q257")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H275:Q275")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H293:Q293")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H311:Q311")) Is Nothing _
    Then VisuGme
    If Not Intersect(Target, Sheets("Mesures").Range("H329:Q329")) Is Nothing _
    Then VisuGme


Un module (GammeVT)
Sub VisuGme()

    Application.ScreenUpdating = False
    Dim Gme, Grw, GmeOK, GmeVent, ListeGamme
    Gme = ActiveCell.value
    Grw = ActiveCell.Row
    
    'Reprise de l'image
    GmeOK = Dir("C:\InfiltroPass\Images" & Gme & ".jpg")    'Fichier JPG correspondant trouvé
    If GmeOK <> "" Then
        VoirGamme.GmeSlide.Picture = LoadPicture("C:\InfiltroPass\Images" & Gme & ".jpg")
    Else
        MsgBox "Gamme non reconnue!", vbCritical, "Visualiser Gamme"
    End If
    
    'Reprise liste des Gammes disponible pour le Ventilateur choisi
    GmeVent = Sheets("Mesures").Range("G" & Grw).value
    ListeGamme = ThisWorkbook.Sheets("Data").Range(GmeVent).Address(external:=True)
    VoirGamme.GmeBox.RowSource = ListeGamme
    VoirGamme.Show

End Sub


Une Userform (VoirGamme) avec une Combo (GmeBox) et une PictureBox (GmeSlide)
Private Sub UserForm_Initialize()

    GmeBox.value = ActiveCell.value
    
End Sub


Private Sub GmeBox_Change()

    Application.ScreenUpdating = False
    Dim Gme, GmeOK
    Gme = GmeBox.value
    GmeOK = Dir("C:\InfiltroPass\Images" & Gme & ".jpg")
    ActiveCell.value = Gme
    If GmeOK <> "" Then
        GmeSlide.Picture = LoadPicture("C:\InfiltroPass\Images" & Gme & ".jpg")
    End If

End Sub


A chaque changement de valeur d'une cellule concernée : Affichage non modal de la Form ; Report de la valeur dans la combo ; report de la liste de la cellule pour la combo ; affichage de l'image en rapport.

Pour un changement dans la combo : Changement de valeur dans la cellule active ; affichage de l'image en rapport.

Voilà ce que je voudrais "reproduire" avec les images DANS le classeur.

J'aime pas "demander du code", mais, désepérement, je crois que je vais oser faire appel à votre bon coeur...


Cordialement
Rataxes64
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mars 2012 à 00:07
Au lieu d'insérer une image par le menu ===>> onglet insertion ====>> image du menu général :
Onglet développeur ===>>> insérer ===>> si tu es sous Excel 2007 (peut-être différent sous 2003) ===>> tu vois apparaître une boite à outils ===>> dans sa partie "Contrôles Activex" ===>> choisis le contrôle Image.
Donne à sa propriété Picture le chemin de ton image
Cerise sur le gâteau : dans sa fenêtre des propriétés, tu pourras lui donner le nom évocateur de tes rêves.
Voilà tout !


Ceci étant dit : j'espère que tu es conscient des conséquences de ces méthodes (images toutes embarquées dans ton classeur), quel que soit le conteneur choisi pour tes images : ===>>
ton classeur va se trouver sans cesse constamment alourdi par leur poids, qu'il aura sans cesse "sur le paletot". C'est un peu comme si un ouvrier devait sans cesse travailler avec toutes ses poches constamment remplies d'outils pesants en tous genres alors qu'il n'en met finalement qu'un à la fois entre ses mains ! Ainsi alourdi, ses gestes deviennent plus lents, plus gauches.. et ce : tout au long de son travail.
Un ouvrier averti laisse ses outils dans une caisse à part, dans laquelle il ne prend, un par un, que l'outil dont il a besoin à tel ou tel autre moment. Il est alors bien plus rapide, agile et efficace. C'est clair !

Tu m'exposes que tu veux faire cela pour n'avoir qu'un fichier (ton classeur) à donner en téléchargement. Bé ! .... rien ne t'empêche de zipper un dossier ! Un seul zip ! lorsque son destinataire le déchargera/dézippera, il installera tous les fichiers (classeurs et images) sans faire plus de gestes qu'il n'en fait actuellement pour le seul classeur. Mais ton classeur s'en trouvera agilisé et l'utilisateur te remerciera de la meilleure performance (c'est cela, qui importe à ses yeux) ainsi atteinte.



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
2 mars 2012 à 00:15
Merci ucfoutu,

Je suis sous 2003. J'ai voulu charger mon classeur sous 2007, ça a été une catastrophe!
J'avoue ne pas trop savoir pourquoi, mais j'ai été inondé de messages d'erreur sur les macros.

Donc pour "ActiveX" avec 2003 : comment dois-je faire ?

Cordialement
Rataxes64
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mars 2012 à 00:30
Je te le dirai demain (faut que j'aille trouver une machine chez un voisin, avec excel 2003).

Mais je viens de voir ton code, dont ceci :
If Not Intersect(Target, Sheets("Mesures").Range("H42:Q42")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H72:Q72")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H95:Q95")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H113:Q113")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H131:Q131")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H149:Q149")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H167:Q167")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H185:Q185")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H203:Q203")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H221:Q221")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H239:Q239")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H257:Q257")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H275:Q275")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H293:Q293")) Is Nothing _
Then VisuGme
If Not Intersect(Target, Sheets("Mesures").Range("H311:Q311")) Is Nothing _
Then VisuGme
If Not Intersec
t(Target, Sheets("Mesures").Range("H329:Q329")) Is Nothing _
Then VisuGme

A main levée :
dim truc as range 
with sheets("Mesures")
  set truc = union(.Range("H42:Q42"),.Range("H72:Q72"), .... etc ...      ,.Range("H311:Q311"),.Range("H329:Q329"))
end with
If not intersect(target, truc) is nothing then visuGme

déjà !
et (maus je regarderai le reste demain) ce n'est pas tout ! tu connais déjà target, dont target.value, target row, ...! Je les passerais volontiers en paramètre de visuGme ! au lieu d'y recalculer Gme ActiveCell.value et Grw ActiveCell.Row !
A demain (vais au dodo).
_______________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
2 mars 2012 à 01:00
Pour sûr, avec set truc , ce sera plus "propre".
Je fais dans la foulée.

Par ailleurs, cette amélioration par images n'est pas (encore) dans le fichier que je t'ai envoyé. Elle m'a été demandée lors des tests "terrain" actuellement en cours.

Au fait, aurais-tu pu ouvrir mon fichier sans problème avec 2007 ?

Bonne nuit
Rataxes64
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mars 2012 à 01:25
Un classeur 2007 ne peut être ouvert avec 2003.
Un classeur 2003 est par contre ouvrable sans problème avec 2007 (compatibilité descendante)

J'en profite :
Dim Gme, Grw, GmeOK, GmeVent, ListeGamme

Rien n'y est typé !
me moque de savoir gme et grw
mais par contre quid de gmeOK ? ====>> à typer en string
gmevent ? ===>> je ne sais pas . Quel type (selon la cellule) ? dis-moi.
ListeGamme + ====> à typer en string

Je crois que je vais t'appeler au phone, car autres petits trucs qui me paraissent bien bizarres ou tortueux, mais je me vois mal rentrer ici dans un jeu de ques(ions/réponses. Plus facile de vive voix.
Bonne nuit
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous