HELP : Insertion de fichier dans Cellule Excel

Signaler
Messages postés
27
Date d'inscription
vendredi 30 avril 2010
Statut
Membre
Dernière intervention
1 juin 2011
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour,

Tout d'abord, merci à tous ceux qui prendront la peine de lire mon message, et de me proposer une solution, s'ils en ont une ;)

En fait, il existe dans Excel, une option qui permet d'ajouter dans une cellule sélectionnée, une icône pointant vers un fichier joint. Pour ceux qui ne m'aurait pas compris, rendez vous dans excel: Insertion/Objet/Créer à partir du fichier. Il s'agit alors de parcourir son disque pour sélectionner le fichier à insérer, puis ensuite de cocher les cases "lier au fichier" puis "afficher sous forme d'icône". Une icône est alors crée dans la case sélectionner. Un double clic sur celle ci entraine alors l'ouverture du fichier qui lui est lié. J'espère que vous voyez de quoi je parle maintenant ^^

Par rapport à ça, on m'a demandé au bureau, de trouver une petite macro VB, qui, liée à un bouton parcourir dans une case excel, permette d'accéder directement à la sélection du fichier à importer (Sans avoir besoin de spécifier les options "afficher sous forme d'icône" et "lier au fichier", qui seront activées par défaut).

En résumé, il s'agit de créer une macro qui simplifie tout cela, et permette de rapatrier des fichiers dans des cases Excel de manière quasi automatisée.

Pensez vous que c'est possible ?!

Je suis, pour ma part, apprenti en entreprise... Jusque là, j'ai réussi à coder la plupart des choses que l'on m'a demandé... Mais là j'avoue que je ne vois pas du tout comment faire...

Bonne journée.

12 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut
Oui, c'est faisable et simple :
Il suffit de s'appuyer sur l'enregistreur de macro.
Si tu insères un objet, cela donne ce code :
    ActiveSheet.OLEObjects.Add(Filename:= _
        "C:\Documents and Settings\Jack\Mes documents\monFichier de test.xls", _
        Link :=True, DisplayAsIcon:=True, IconFileName:= _
        "C:\windows\Installer\{9111040C-6000-11D3-8CFE-0150048383C9}\xlicons.exe", _
        IconIndex:=0, IconLabel:= _
        "C:\Documents and Settings\Jack\Mes documents\monFichier de test.xls").Select

Il te suffit donc de paramétrer cette instruction avec le nom du fichier désiré.
Pour le choisir simplement, il te suffit d'utiliser le "Microsoft Common Dialog Control" que tu ajouteras à ta barre d'outils et que tu placeras sur ta feuille.
Comme il s'agit d'un composant externe à VBA, tu n'auras pas d'aide dans Excel à son sujet.
Voir <cet exemple tout prêt>, qui utilise l'objet mais sans avoir besoin de le placer sur la feuille.
    Dim FichierChoisi As String
    With CommonDialog21
        .Filter = "Feuilles Excel|*.xls|Images JPG|*.jpg"
        .ShowOpen
        FichierChoisi = .Filename
    End With
Il ne te reste plus qu'à remplacer
"C:\Documents and Settings\Jack\Mes documents\monFichier de test.xls"
par
FichierChoisi
dans le premier code

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
27
Date d'inscription
vendredi 30 avril 2010
Statut
Membre
Dernière intervention
1 juin 2011

Salut Jack,

Merci beaucoup pour ta réponse, super clair et rapide ;)

Par contre, je suis vraiment débutant avec tout ça, j'ai donc du mal utiliser ton explication. Voici mon code:

'Utilisation de la fonction :
'mettre une commande de type : Call OuvrirAvecCD("xls", "c:", "TOTO fait du ski")
'Puis ont peux récupérer le chemin du fichier sélectionné par l'utilisateur
'dans la variable "FichierSélectionné"
'c'est tout !

Public FichierSélectionné As String

Public Function OuvrirAvecCD(Extension As String, DOSSIER As String, TITRE As String)
FichierSélectionné = ""
Set CD = CreateObject("MSComDlg.CommonDialog")
On Error Resume Next
Debut:
With CD
.MaxFileSize = 260
.InitDir = DOSSIER
.CancelError = True
.DialogTitle = TITRE
.Filter = "Fichiers " & Extension & "(*." & Extension & ")|*." & Extension & "|"
.FilterIndex = 1
Err.Clear
.ShowOpen
If Err.Number <> 0 Then
If MsgBox("Vous n'avez pas sélectionné de fichier." & Chr(10) & "Voulez-vous annuler la sélection ?", vbYesNo, TITRE) = vbYes Then
Exit Function
Else
GoTo Debut
End If
End If
End With
FichierSélectionné = CD.Filename
Set CD = Nothing
End Function
Sub Macro4()
'
' Macro4 Macro
' Macro enregistrée le 21/06/2010 par CAPUANO-JUL
'
Dim FichierChoisi As String
With CommonDialog21
.Filter = "Feuilles Excel|*.xls|Images JPG|*.jpg"
.ShowOpen
FichierChoisi = .Filename
End With
'
ActiveSheet.OLEObjects.Add(Filename:= _
FichierChoisi, Link:=True, _
DisplayAsIcon:=True, IconFileName:= _
"C:\WINNT\Installer\{0001040C-78E1-11D2-B60F-006097C998E7}\xlicons.exe", _
IconIndex:=0, IconLabel:= _
FichierChoisi).Select
Selection.ShapeRange.IncrementLeft 26.25
Selection.ShapeRange.IncrementTop 33.75
End Sub

Le débogage me renvoit une erreur sur la ligne '.Filter = "Feuilles Excel|*.xls|Images JPG|*.jpg"'...


Pourrais tu m'expliquer pourquoi, STP ?!


Au passage, si tu pouvais aussi me dire comment poster le code sur ce forum avec la même mise en forme que toi, ça pourrait m'être utile pour être plus clair et me faire mieux comprendre ;)


Merci.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Mise en forme du code = 3ème icone de droite

Le code que je t'ai fourni correspond à l'usage du composant CommonDialog.
Il te faut donc ajouter ce composant à ta barre d'outils (icone clé et marteau et ...) puis dessiner un de ces composants sur ta feuille Excel. Ce composant n'a pas de représentation en mode Run, il ne dévisagera pas ta feuille)
Une fois cette instance du composant apposée sur la feuille, sélectionne-le et appuis sur F4 pour avoir ses propriétés : Tu trouveras son nom.
Dans mon cas, il s'est appelé CommonDialog21, mais chez toi, je ne le sais pas.

Si tu comptes utiliser le premier code issu de la source, tu peux te passer de la représentation du composant. Ce code appelle le CommonDialog mais dynamiquement.

Il faut choisir une des solutions, mais pas un mélange des deux.

Si tu veux utiliser la fonction OuvrirAvecCD, il te suffit de faire
FichierChoisi = OuvrirAvecCD("XLS", "C:", "Toto la riflette")
Messages postés
27
Date d'inscription
vendredi 30 avril 2010
Statut
Membre
Dernière intervention
1 juin 2011

Merci !

Voici mon code à présent:

Public FichierSélectionné As String

Public Function OuvrirAvecCD(Extension As String, DOSSIER As String, TITRE As String)
    FichierSélectionné = ""
    Set CD = CreateObject("MSComDlg.CommonDialog")
    On Error Resume Next
Debut:
    With CD
        .MaxFileSize = 260
        .InitDir = DOSSIER
        .CancelError = True
        .DialogTitle = TITRE
        .Filter = "Fichiers " & Extension & "(*." & Extension & ")|*." & Extension & "|"
        .FilterIndex = 1
        Err.Clear
        .ShowOpen
        If Err.Number <> 0 Then
            If MsgBox("Vous n'avez pas sélectionné de fichier." & Chr(10) & "Voulez-vous annuler la sélection ?", vbYesNo, TITRE) = vbYes Then
                Exit Function
            Else
                GoTo Debut
            End If
        End If
    End With
    FichierSélectionné = CD.Filename
    Set CD = Nothing
End Function

Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 21/06/2010 par CAPUANO-JUL
'
FichierChoisi = OuvrirAvecCD("XLS", "C:", "Toto la riflette")'
End Sub


Lorsque je tente de l'executer, j'ai le message d'erreur suivant:

"Erreur d'execution '429'

Un composant ActiveX ne peut pas créer d'objet"

????
Messages postés
27
Date d'inscription
vendredi 30 avril 2010
Statut
Membre
Dernière intervention
1 juin 2011

Je ne trouve également aucune référence à Common Dialog...
Messages postés
27
Date d'inscription
vendredi 30 avril 2010
Statut
Membre
Dernière intervention
1 juin 2011

Nouveau rebondissement:

J'ai fini par trouver "Microsoft Common Dialog 6.0" dans les options de ma barre d'outil.

Cependant, lorsque je relâche le clic de ma souris, pour dessiner le contrôle, le message suivant appariait:

"Impossible d'insérer un objet"

Je suis un peu perdu là...
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Je répète : Avec le code que tu utilises, tu n'as pas besoin de charger ce composant, le code s'en occupe.
Messages postés
27
Date d'inscription
vendredi 30 avril 2010
Statut
Membre
Dernière intervention
1 juin 2011

Merci,

Ce qui te semble clair ne l'est pas pour moi...

Je suis novice... Et toujours bloqué par rapport aux 2 méthodes que tu m'as communiqué.

La première me renvoit:

"Erreur d'execution '429'

Un composant ActiveX ne peut pas créer d'objet"

Et la deuxième:

"Impossible d'insérer un objet"
Messages postés
27
Date d'inscription
vendredi 30 avril 2010
Statut
Membre
Dernière intervention
1 juin 2011

Bon, voilàa mon code:

Sub Macro2()
'
' Macro2 Macro
' Macro enregistrée le 21/06/2010 par CAPUANO-JUL
'
Dim FichierChoisi As String
    With CommonDialog21
        .Filter = "Feuilles Excel|*.xls|Images JPG|*.jpg"
        .ShowOpen
        FichierChoisi = .Filename
    End With

        
ActiveSheet.OLEObjects.Add(Filename:= _
        FichierChoisi, _
        Link:=True, DisplayAsIcon:=True, IconFileName:= _
        "C:\windows\Installer\{9111040C-6000-11D3-8CFE-0150048383C9}\xlicons.exe", _
        IconIndex:=0, IconLabel:= _
        FichierChoisi).Select
'
End Sub


Sommes nous d'accord sur le fait qu'il me reste juste à dessiner un common dialog control sur ma feuille excel et de remplacer CommonDialog21 par le nom que prendra le contôle ?!

Quand j'essaie de dessiner le common dialog, j'ai le message que j'ai déjà cité:

"Impossible d'insérer un objet"
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Ok, de toute façon, il s'agit du même objet, utilisé de manière différente.
Sur quel Windows ? XP, Vista ou W7

Si c'est XP, vérifie que le fichier suivant est bien présent (je pense que oui) :
C:\Windows\System32\COMDLG32.OCX (et DLL)
Ensuite, assure toi qu'il a été correctement installé :
- Ouvre une fenêtre DOS (Démarrer, Exécuter, CMD)
- Place toi sur le répertoire :
CD \
CD C:\Windows\System32
- Lance l'enregistrement dans la base de registres :
RegSvr32 COMDLG32.OCX
La fenêtre doit te dire "DllRegisterServer dans "C:\...OCX" réussi

Pour Vista et Windows 7, tu peux essayer les même manips, mais pas sûr.
Messages postés
27
Date d'inscription
vendredi 30 avril 2010
Statut
Membre
Dernière intervention
1 juin 2011

Je suis sous Windows 2000... Choix de la direction...

Les dll sont bien prsentes.

En fait j'ai réussi, à faire ce que je voulais, via le code suivant:

Public FichierSélectionné As String

Public Function OuvrirAvecCD(Extension As String, DOSSIER As String, TITRE As String)
    FichierSélectionné = ""
    Set CD = CreateObject("MSComDlg.CommonDialog")
    On Error Resume Next
Debut:
    With CD
        .MaxFileSize = 260
        .InitDir = DOSSIER
        .CancelError = True
        .DialogTitle = TITRE
        .Filter = "Fichiers " & Extension & "(*." & Extension & ")|*." & Extension & "|"
        .FilterIndex = 1
        Err.Clear
        .ShowOpen
        If Err.Number <> 0 Then
            If MsgBox("Vous n'avez pas sélectionné de fichier." & Chr(10) & "Voulez-vous annuler la sélection ?", vbYesNo, TITRE) = vbYes Then
                Exit Function
            Else
                GoTo Debut
            End If
        End If
    End With
    FichierSélectionné = CD.Filename
    Set CD = Nothing
End Function

Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 21/06/2010 par CAPUANO-JUL
'

Fichier = Excel.Application.GetOpenFilename("Fichier Excel (*.xls), *.xls")

'
ActiveSheet.OLEObjects.Add(Filename:= _
        Fichier, _
        Link:=True, DisplayAsIcon:=True, IconFileName:= _
        "C:\windows\Installer\{9111040C-6000-11D3-8CFE-0150048383C9}\xlicons.exe", _
        IconIndex:=0, IconLabel:= _
        Fichier).Select
'
End Sub


J'ai changé :
FichierChoisi = OuvrirAvecCD("XLS", "C:", "Toto la riflette")
par:
Fichier = Excel.Application.GetOpenFilename("Fichier Excel (*.xls), *.xls")

Et là, sans que je sache pourquoi ça fonctionne.

Par contre, je ne parviens pas à récupérer l'icône du type de fichier sélectionné en miniature...

Saurais-tu comment faire ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Oui, tu as bien fait, cette méthode incluse au langage est plus sûre, je n'y avais pas pensé. Désolé.

Pour ce qui est de l'icone, c'est une autre paire de manche.
Il faudrait faire un enregistrement de macro avec chaque type de fichier et voir ce qu'il utilise comme déclaration dans la propriété IconFileName + changer ta syntaxe en fonction de l'extension du fichier.