XL 2013 insertion image dans cellule

bredeche

XLDnaute Occasionnel
bonjour
j'ai un formulaire qui me permet d'inséré une image dans un onglet qui se crée a l’emplacement H20 et le chemin dans un tableau en aw

pour les éléments qui s 'inscris dans la cellule de l'onglet cela me place que des chiffres je ne comprend pas voici mon code
VB:
Option Explicit


Private Sub CommandButton2_Click() 'Bouton VALIDER
Dim NewLig As Long
Dim laconcat As String


 
 'ELEMENT ENREGISTRE DANS LE TABLEAU PRESENTATION RECAP
  With Sheets("02-Présentation Recap")
    
        NewLig = Application.Max(10, .Range("A" & Rows.Count).End(xlUp).Row + 1)
        .Range("A" & NewLig).Value = Application.WorksheetFunction.Max(Range("A:A")) + 1
      
      laconcat = ComboBox4.Value & " _ " & TextBoxfiche.Text & " _ " & TextBoxannée.Text & " " & ComboBox5.Value
   .Range("B" & NewLig).Value = laconcat
   .Range("C" & NewLig).Value = TextBoxobjet
    .Range("D" & NewLig).Value = ComboBox1
    
     End With
    
    'ELEMENT ENREGISTRE DANS LE TABLEAU  RECAP
    With Sheets("00-Recap")
    
    
        NewLig = Application.Max(10, .Range("A" & Rows.Count).End(xlUp).Row + 1)
        .Range("A" & NewLig).Value = Application.WorksheetFunction.Max(Range("A:A")) + 1
      
        .Range("C" & NewLig).Value = TextBoxobjet
        .Range("Y" & NewLig).Value = ComboBox4
        .Range("Z" & NewLig).Value = TextBoxfiche
        .Range("AA" & NewLig).Value = CDate(TextBoxdate)
        .Range("AB" & NewLig).Value = TextBoximputation
        .Range("AC" & NewLig).Value = TextBoxlocalisation
        .Range("AD" & NewLig).Value = ComboBox1
        .Range("D" & NewLig).Value = ComboBox1
        .Range("AE" & NewLig).Value = TextBoxannée
        .Range("AF" & NewLig).Value = CheckBox1
        .Range("AG" & NewLig).Value = CheckBox2
        .Range("AH" & NewLig).Value = CheckBox3
        .Range("AI" & NewLig).Value = TextBoxconstat
        .Range("AJ" & NewLig).Value = TextBoxrisque
        
        .Range("AK" & NewLig).Value = TextBoxorigine
        .Range("AL" & NewLig).Value = CheckBox4
        .Range("AM" & NewLig).Value = CheckBox5
        .Range("AN" & NewLig).Value = CheckBox6
        
        
        .Range("AO" & NewLig).Value = TextBoxtravaux
        .Range("AP" & NewLig).Value = CheckBox7
        .Range("AQ" & NewLig).Value = CheckBox8
        .Range("AR" & NewLig).Value = CheckBox9
        
        .Range("AS" & NewLig).Value = TextBoxobservation
        
        .Range("AT" & NewLig).Value = TextBoxconstructeur
        .Range("AU" & NewLig).Value = TextBoxdureevie1
        .Range("AV" & NewLig).Value = TextBoxdureevie2
        .Range("AW" & NewLig).Value = CHEMIN
        
   laconcat = ComboBox4.Value & " _ " & TextBoxfiche.Text & " _ " & TextBoxannée.Text & " " & ComboBox5.Value
   .Range("B" & NewLig).Value = laconcat
  
    End With
   Application.ScreenUpdating = False
    'On crée les onglets
        'on copie le modèle en dernier
        Worksheets("03-TRAME").Copy After:=Worksheets(ThisWorkbook.Sheets.Count)
            With ActiveSheet
            .Name = Worksheets("00-RECAP").Range("B" & NewLig)    'je renome
            'Je remplit mon modèle comme je veut...
            .Range("B3") = TextBoxobjet
            .Range("A6") = TextBoxfiche
            .Range("B6") = TextBoxdate
            .Range("C6") = TextBoximputation
            .Range("D6") = TextBoxlocalisation
            .Range("E6") = ComboBox1
            .Range("F6") = TextBoxannée
            .Range("G6") = ComboBox4
            
            .Range("A9") = TextBoxconstat
            .Range("E11") = CheckBox1
            .Range("E12") = CheckBox2
            .Range("E13") = CheckBox3
            
            .Range("A16") = TextBoxrisque
            
            .Range("A21") = TextBoxorigine
            .Range("E23") = CheckBox4
            .Range("E24") = CheckBox5
            .Range("E25") = CheckBox6
            
            
            .Range("A28") = TextBoxtravaux
            .Range("E31") = CheckBox7
            .Range("E32") = CheckBox8
            .Range("E33") = CheckBox9
            
            .Range("A36") = TextBoxobservation
            
            .Range("H15") = TextBoxconstructeur
            
            .Range("K17") = TextBoxdureevie1
            .Range("K18") = TextBoxdureevie2
            
            [h20].Select
    ActiveSheet.Pictures.Insert (Me.Image1.Picture)
          
        End With
            Application.ScreenUpdating = True
    Unload UserForm1
End Sub

 Private Sub Textboxdate_Change()
'Code permettant de mettre une date au format 00/00/0000 dans une textbox
Dim valeur As Byte
TextBoxdate.MaxLength = 8 'nb caractères maxi autorisé dans le textbox
valeur = Len(TextBoxdate)
If valeur = 2 Or valeur = 5 Then TextBoxdate = TextBoxdate & "/"

End Sub

Private Sub ComboBox4_Change()
    Dim c As Range, sh As Worksheet
    Set sh = Worksheets("01-données")
    Set c = sh.[B:B].Find(ComboBox4, LookIn:=xlValues, lookat:=xlWhole)
    TextBoximputation = IIf(c Is Nothing, "", c.Offset(, 1))
End Sub

Private Sub CommandButton3_Click()
 Dim NF
  NF = Application.GetOpenFilename("Fichiers jpg,*.jpg")
  If Not NF = False Then
    Me.CHEMIN = NF
    Me.Image1.Picture = LoadPicture(NF)
    Me.Image1.PictureSizeMode = fmPictureSizeModeStretch
  End If

merci de votre aide par avance
 
End Sub

Private Sub CommandButton4_Click()
Image1.Picture = LoadPicture("")
End Sub
 

Dranreb

XLDnaute Barbatruc
Faite le tableau avec tous ces éléments, s'il existe déjà mettez un ListObject dessus.
N'oubliez pas de prévoir une colonne pour la référence du fichier image.
Ensuite inspirez vous de la programmation du CBxLiéesYahaBelbachir.xlsm
Mettez les formules déjà expliquées dans la fiche.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Générez surtout l'UserForm dans votre classeur d'application, pas dans le GénérateurUFm.xlsm.
Vous auriez dû préparer tout ça dans la feuille Appli 1 de celui-ci. Lafeuille Modèle c'était plutôt à usage interne avec un échantillon de tout ce qu'il était possible de faire.
 

bredeche

XLDnaute Occasionnel
je suis désoler mais a se stade je ne vois pas la différence entre mon userform et le nouveau que j'ai crée
avec ton userform
il faudra que je remplisse aussi 2 tableaux et que je crée autant de fiche que de ligne dans les deux tableaux
cela me perturbe

avec userform que j'ai crée je n'ai pas pu mettre image que je veux voir affiché dans mes fiches

mon souci principal sur mon fichier de base est que mon image est mal dimensionné dans mes fiches et je t'e remercie de ton aide
ensuite j'ai un problème avec le CODE pour modifier une fiche et donc rappeler l'image (chemin enregistre dans cellule tableau) aw
et mon code duplique car l'image de la fiche que je désire dupliquer ne s 'enregistre pas

j'aurais les mème problème avec ton userform "je pense"

y a il pas une solution plus simple pour intégré mes image dans les fiche au lieux utiliser l'userform

je te suis reconaissant de m'aider mais je suis sur le point d'avoir terminer apres c es trois sujet

encore merci
 

Dranreb

XLDnaute Barbatruc
Mais c'est absurde. Du moment que votre client pourra toujours voir la fiche qu'il veut … Elle sera facile à rappeler avec l'UserForm !
Si vous avez du mal à le convaincre, peut être que vous pourriez commencer à lui suggérer que les feuilles des autre fiches que celle sélectionnée sont masquées. Hé, on pourrait même changer le nom de la feuille fiche, y mettre l'objet par exemple.
Justement avec une seule image le fichier sera plus léger. S'il ne veut pas en démordre on pourra toujours ajouter un dispositif qui créera une copie de la feuille fiche. Oui j'aurais une idée s'il était vraiment impossible d'y couper: mettre la référence du fichier image comme valeur d'un nom "RéfImage"de la collection Names de l'objet Worksheet, faire le Image1.Picture = LoadPicture(Me.[RéfImage]) à l'activation de la feuille, un Image1.Picture = LoadPicture("") à sa désactivation. Pas besoin de l'image quand la feuille n'est pas active, n'est-ce pas ? Vu que déjà moi je dis que même la feuille ne sert à rien puisqu'on peut la reconstituer quand on veut.
Pas sûr que ce soit indispensable de prévoir l'image dans l'UserForm, mais ça peut se faire.
 
Dernière édition:

bredeche

XLDnaute Occasionnel
dans un premier temps
cela est possible d’aller cherche le chemin des images pour quel apparaisse dans les fiches a l'ouverture du fichier et les effacé a la fermeture du fichier
cela mirai car le image sont dans un mème répertoire
que dois je mettre comme code et je le mets dans la trame Worksheet comme cela a chaque nouvelle creation fiche le code s'y trouve
c'est plus simple
dans un deuxième temps en parallèle
car pour ce qui est de mon client il est très chiant
je vais construire le meme genre avec ton fichier avec ton savoir faire pourrais tu donc m’aider en prenant la philosophie de mon fichier de base
que je présenterais a la rentrée par exemple.
encore merci
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Non, j'ai dit seulement chercher la seule image qu'on a besoin de voir à un moment donné.
J'ai indiqué les instructions des Pivate Sub Worksheet_Activate et Worksheet_Deactivate dans mon poste précédent.
Mais vraiment, faites l'effort d'essayer de convaincre votre client que c'est inutile voir absurde de garder les fiches si on peut les reconstituer facilement quand on veut. En tout cas travaillez toujours avec la même feuille fiche. Appelez son objet Worksheet WshFiche0 dans les objets de la rubrique Microsoft Excel Objet de l'explorateur de projet, par exemple. Pour pouvoir accéder à WshFiche0.Image1
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Exemple de programmation possible dans le module WshFiche0 :
VB:
Option Explicit
Public Property Let RéfImage(ByVal ChNomF As String)
   On Error Resume Next
   Me.Image1.Picture = LoadPicture(ChNomF)
   If Err = 0 Then Me.Names.Add "RéfImg", ChNomF
   End Property
Public Property Get RéfImage() As String
   On Error Resume Next
   RéfImage = Me.[RéfImg]
   End Property
Private Sub Worksheet_Activate()
   Application.ScreenUpdating = False
   Image1.Picture = LoadPicture(Me.RéfImage)
   End Sub
Private Sub Worksheet_Deactivate()
   Image1.Picture = LoadPicture("")
   End Sub
Private Sub Image1_Click()
   Dim ChNomF As String, GOFn
   On Error Resume Next
   ChNomF = Me.RéfImage
   If Err = 0 Then Err.Clear: ChDrive ChNomF: ChDir Left$(ChNomF, InStrRev(ChNomF, "\") - 1)
   On Error GoTo 0
   GOFn = Application.GetOpenFilename("Image,*.jpg;*.gif;*.bmp")
   If VarType(GOFn) <> vbString Then Exit Sub
   Me.RéfImage = GOFn
   End Sub
Pour rectifier l'image depuis l'UserForm à partir d'un chemin en colonne 12 à la ligne LCou de la base récupérée dans le Tableau TVL (Table des Valeurs de la Ligne), il suffitra de faire :
VB:
WshFiche0.RéfImage = TVL(LCou, 12)
Et l'inverse est possible aussi avant de mettre à jour la ligne de la base :
VB:
TVL(LCou, 12) = WshFiche0.RéfImage
 

bredeche

XLDnaute Occasionnel
Exemple de programmation possible dans le module WshFiche0 :
VB:
Option Explicit
Public Property Let RéfImage(ByVal ChNomF As String)
   On Error Resume Next
   Me.Image1.Picture = LoadPicture(ChNomF)
   If Err = 0 Then Me.Names.Add "RéfImg", ChNomF
   End Property
Public Property Get RéfImage() As String
   On Error Resume Next
   RéfImage = Me.[RéfImg]
   End Property
Private Sub Worksheet_Activate()
   Application.ScreenUpdating = False
   Image1.Picture = LoadPicture(Me.RéfImage)
   End Sub
Private Sub Worksheet_Deactivate()
   Image1.Picture = LoadPicture("")
   End Sub
Private Sub Image1_Click()
   Dim ChNomF As String, GOFn
   On Error Resume Next
   ChNomF = Me.RéfImage
   If Err = 0 Then Err.Clear: ChDrive ChNomF: ChDir Left$(ChNomF, InStrRev(ChNomF, "\") - 1)
   On Error GoTo 0
   GOFn = Application.GetOpenFilename("Image,*.jpg;*.gif;*.bmp")
   If VarType(GOFn) <> vbString Then Exit Sub
   Me.RéfImage = GOFn
   End Sub
Pour rectifier l'image depuis l'UserForm à partir d'un chemin en colonne 12 à la ligne LCou de la base récupérée dans le Tableau TVL (Table des Valeurs de la Ligne), il suffitra de faire :
VB:
WshFiche0.RéfImage = TVL(LCou, 12)
Et l'inverse est possible aussi avant de mettre à jour la ligne de la base :
VB:
TVL(LCou, 12) = WshFiche0.RéfImage

je travail sur le sujet
je le mais a ne plus suive
encore merci de ton aide
 

Discussions similaires

Statistiques des forums

Discussions
311 711
Messages
2 081 792
Membres
101 817
dernier inscrit
carvajal