VBA - Modifier une image à partir d'un Userform

soso882

XLDnaute Nouveau
Bonjour,

J'avance doucement mais surement dans le VBA. Je suis débutante et j'ai réussi à ajouter des données par Userform donc jusque là tout va bien. Maintenant Je cherche à faire un Userform ou je pourrais modifier une image à partir d'un Userform toujours Voilà le formulaire en question :

Sans titre.png

Et voici que j'ai saisi jusqu'à présent.

Code:
Option Explicit


Private Sub ComboBoxLine_Change()
        Dim Plage As Range
    Dim Tbl
    Dim i As Integer
    Dim tailleTableau As Integer
    Dim ligne_a_editer As Integer
    
    
    'crée un tableau contenant les noms des contrôles où récuperer les valeurs
    Tbl = Array("ComboBoxNom", "TextBoxNum", "TextBoxPage", "TextBoxDateS", "ComboBoxParu", "ComboBoxType", "TextBoxDAch", "TextBoxCodeBarre", "TextBoxCb")
    
    ' On recupere la taille du tableau
    tailleTableau = UBound(Tbl) + 1
 
    
    'défini la plage en feuille "BDD" adapter le nom...
    With Worksheets("BDD")
        'plage de A2 à Mx. Les cellules de la colonne M sont sensées être toutes renseignées
        Set Plage = .Range("A2", .Cells(.Rows.Count, tailleTableau).End(xlUp))
 
    End With
 
    
    'décale d'une ligne
    ligne_a_editer = CInt(ComboBoxLine.Value) - 1
    

    With Plage.Rows(ligne_a_editer)

        'boucle pour inscription des valeurs
        For i = 1 To tailleTableau

            Me.Controls(Tbl(i - 1)).Text = .Cells(1, i + 1).Value


        Next i

'      MODIFIER IMAGE ?????
       
    End With

End Sub

Private Sub CommandButton2_Click()
 
   blnCancel = True
   Me.Hide
 
End Sub
 

Private Sub CommandUpdateButton_Click()
        Dim Plage As Range
    Dim Tbl
    Dim Img
    Dim i As Integer
    Dim tailleTableau As Integer
    Dim ligne_a_editer As Integer
    
    
    'crée un tableau contenant les noms des contrôles où récuperer les valeurs
    Tbl = Array("ComboBoxNom", "TextBoxNum", "TextBoxPage", "TextBoxDateS", "ComboBoxParu", "ComboBoxType", "TextBoxDAch", "TextBoxCodeBarre", "TextBoxCb")
    
    ' On recupere la taille du tableau
    tailleTableau = UBound(Tbl) + 1
 
    
    'défini la plage en feuille "BDD" adapter le nom...
    With Worksheets("BDD")
        'plage de A2 à Mx. Les cellules de la colonne M sont sensées être toutes renseignées
        Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, tailleTableau).End(xlUp))
 
    End With
 
    ' On recupere le numero de la ligne de ComboBoxLine
    ligne_a_editer = CInt(ComboBoxLine.Value) - 1
    
    
    With Plage.Rows(ligne_a_editer)
 
        'boucle pour inscription des valeurs
        For i = 1 To tailleTableau
 
            .Cells(1, i + 1).Value = Me.Controls(Tbl(i - 1)).Text
                

        Next i
 
           
   blnCancel = False
   Me.Hide
   
End Sub

Private Sub UserForm_Initialize()
    
    Dim nombre_de_ligne As Integer
    
    Dim Tbl
    Dim Plage As Range
    Dim tailleTableau As Integer
    Dim i As Integer
    
    
    'crée un tableau contenant les noms des contrôles où récuperer les valeurs
    Tbl = Array("ComboBoxNom", "TextBoxNum", "TextBoxPage", "TextBoxDateS", "ComboBoxParu", "ComboBoxType", "TextBoxDAch", "TextBoxCodeBarre", "TextBoxCb")
    
    ' On recupere la taille du tableau
    tailleTableau = UBound(Tbl) + 1

    
    'défini la plage en feuille "BDD"
    With Worksheets("BDD")
        'plage de A2 à Mx. Les cellules de la colonne M sont sensées être toutes renseignées
        Set Plage = .Range("A2", .Cells(.Rows.Count, tailleTableau).End(xlUp))
    End With
 
    
    nombre_de_ligne = Plage.Rows.Count
    'MsgBox nombre_de_ligne
    
    
    With ComboBoxLine
        
        For i = 2 To nombre_de_ligne
            .AddItem (i + 1)
        Next
        .ListIndex = 0
        
    End With
 
 
 'Nom
 ComboBoxNom.RowSource = "INDEX!A2:A156"
 
 End Sub
   

Sub DoStuff()
UserFormEditElement.Show
If UserFormEditElement.blnCancel Then
   ' cancel button was pressed
Else
   ' OK button was pressed
End If
Unload UserFormEditElement
End Sub

Private Sub UserForm_Click()

End Sub

Ma question est comment je peux faire pour modifier l'image en cliquant sur "Modifier l'image", et supprimer l'ancienne.

Je vous remercie par avance
 

Pièces jointes

  • Sans titre.png
    Sans titre.png
    10.5 KB · Affichages: 454
  • Sans titre.png
    Sans titre.png
    10.5 KB · Affichages: 473

soso882

XLDnaute Nouveau
Re : VBA - Modifier une image à partir d'un Userform

en fait, au départ je rempli un tableau en cliquant sur un bouton "ajouter un élément". Un formulaire s'ouvre :

Sans titre.png
code du formulaire
Code:
' Auteur Anne-Sophie Lippmann
' Date 03/09/2014

Option Explicit

'de portée module afin de mémoriser le chemin et le nom
'du fichier image pour l'enregistrement dans le classeur
Dim NomFichierImage As String


Private Sub ComboBoxNom_Change()

End Sub

Private Sub ComboBoxParu_Change()

End Sub

Private Sub CommandButton1_Click()
 
    Dim Plage As Range
    Dim Tbl
    Dim i As Integer
    Dim tailleTableau As Integer
    Dim ligne_a_editer As Integer
    
    
    'crée un tableau contenant les noms des contrôles où récuperer les valeurs
    Tbl = Array("ComboBoxNom", "TextBoxNum", "TextBoxPage", "TextBoxDateS", "ComboBoxParu", "ComboBoxType", "TextBoxDAch", "TextBoxCodeBarre", "TextBoxCb")
    
    ' On recupere la taille du tableau
    tailleTableau = UBound(Tbl) + 1
 
    
    'défini la plage en feuille "BDD" adapter le nom...
    With Worksheets("BDD")
        'plage de A2 à Mx. Les cellules de la colonne M sont sensées être toutes renseignées
        Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, tailleTableau).End(xlUp))
 
    End With
 
    
    'décale d'une ligne
    ligne_a_editer = Plage.Rows.Count + 1
    
    
    With Plage.Rows(ligne_a_editer)
 
        'boucle pour inscription des valeurs
        For i = 1 To tailleTableau
 
        .Cells(1, i + 1).Value = Me.Controls(Tbl(i - 1)).Text
                
 
        Next i
 
        'insertion de l'image
        With .Cells(1, 1)
        
            If NomFichierImage <> "" Then
                .Value = NomFichierImage
                Worksheets("BDD").Shapes.AddPicture NomFichierImage, True, True, .Left, .Top, .Width, .Height
 
            End If
 
        End With
 
        NomFichierImage = ""
 
    End With
    
   blnCancel = False
   Me.Hide
   
   'Ouverture systématique de la page accueil
    Sheets("BDD").Select
    
End Sub
 


Private Sub CommandButton2_Click()
 
   blnCancel = True
   Me.Hide
 
End Sub
 
'utilisé pour la récup de l'image sur le disque ici, "CommandButton3" donc adapter le nom si différent...

Private Sub CommandButton3_Click()

 With Application.FileDialog(3)
 
        .Show
 
        On Error Resume Next 'si annuler
        NomFichierImage = .SelectedItems(1)
 
        If Err.Number <> 0 Then Exit Sub
 
    End With
 
    Image1.Picture = LoadPicture(NomFichierImage)
    
Image1.PictureSizeMode = fmPictureSizeModeStretch

End Sub

Private Sub Image1_Click()

End Sub

'Private Sub DTPickerDachat_CallbackKeyDown(ByVal KeyCode As Integer, ByVal Shift As Integer, ByVal CallbackField As String, CallbackDate As Date)
'
'End Sub

'Private Sub DTPickerSortie_CallbackKeyDown(ByVal KeyCode As Integer, ByVal Shift As Integer, ByVal CallbackField As String, CallbackDate As Date)
'
'End Sub


Private Sub Label14_Click()

End Sub

Private Sub TextBoxCodeBarre_Change()

End Sub

Private Sub TextBoxDAch_Change()

End Sub

Private Sub TextBoxDateS_Change()

End Sub

Private Sub UserForm_Initialize()

 
 'Type
     With ComboBoxType
     .AddItem "Magazine"
     .AddItem "Livre"
     .AddItem "Guide Officiel"
     .AddItem "Guide Non Officiel"
     .AddItem "Autre"
 End With
 
  'Parution
     With ComboBoxParu
        .AddItem "bihebdomadaire"
        .AddItem "hebdomadaire"
        .AddItem "bimensuel"
        .AddItem "mensuel"
        .AddItem "bimestriel"
        .AddItem "trimestriel"
        .AddItem "quadrimestre"
        .AddItem "semestriel"
        .AddItem "annuel"
        .AddItem "hors-série"
 End With
 
 'Nom
 ComboBoxNom.RowSource = "INDEX!A2:A156"
 
 End Sub
   

Sub DoStuff()
UserForm1.Show
If UserForm1.blnCancel Then
   ' cancel button was pressed
Else
   ' OK button was pressed
End If
Unload UserForm1
End Sub

Private Sub UserForm_Click()

End Sub

Une fois validé j'obtiens ça par exemple :

Sans titre.jpg

Je souhaiterai, par même principe que l'ajout, faire un formulaire où je pourrais modifier chaque entrée du tableau et bien entendu l'image est compris, ce pourquoi j'ai fait le formulaire posté dans mon premier message
 

Pièces jointes

  • Sans titre.png
    Sans titre.png
    8.1 KB · Affichages: 121
  • Sans titre.png
    Sans titre.png
    8.1 KB · Affichages: 130
  • Sans titre.jpg
    Sans titre.jpg
    17 KB · Affichages: 75
  • Sans titre.jpg
    Sans titre.jpg
    17 KB · Affichages: 82

Discussions similaires

Réponses
7
Affichages
526
Réponses
4
Affichages
413

Statistiques des forums

Discussions
314 492
Messages
2 110 187
Membres
110 694
dernier inscrit
xaviergilb