Création de boutons si cases non vides

Bonjour, j'ai piqué une macro me permettant de créer un bouton dans une case (ici c2). Voici le code :

Sub Creation_bouton()

Dim PosG As Integer
Dim PosH As Integer
Dim Hauteur As Integer
Dim Longueur As Integer

   With Range("c2")
       PosG = .Left
       PosH = .Top
       Hauteur = .Height
       Longueur = .Width
   End With
   With ActiveSheet.Buttons
      .Add(PosG, PosH, Longueur, Hauteur).Select
      .OnAction = "Feuil1.Test"
      .Caption = "Ouvrir Fiche technique"
   End With
End Sub

Le bouton ainsi créé renvoi vers une macro permettant d'aller chercher un fichier et d'afficher son nom en case b2. Voici le code :

Sub Test()
Dim nom_fichier As String
nom_fichier = Application.GetOpenFilename(, , "Sélectionner la fiche technique")
nom_fichier = Mid(nom_fichier, InStrRev(nom_fichier, "\") + 1, InStrRev(nom_fichier, ".") - InStrRev(nom_fichier, "\") - 1)
Range("b2") = nom_fichier
End Sub

J'aimerai modifier le deuxième code de façon à obtenir : Si les cases de la colonne A sont remplies, alors créer des boutons sur la même ligne à la colonne C.

Mais il faut aussi que en cliquant sur le bouton créé, le résultat du deuxième code s'affiche sur la ligne où on utilise le bouton... (et non que le nom du fichier s'affiche en b2.

J'espère avoir bien expliqué mon problème.

Je vous met le ficher:

Merci pour votre aide

Clem

Bonjour,

Une proposition plus simple via lien hypertexte

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim chemin_fichier As Variant, nom_fichier As String

    If Not Intersect(Target, Columns("A")) Is Nothing _
    And Target.Count = 1 Then
        chemin_fichier = Application.GetOpenFilename(, , "Sélectionner Fiche")
        If chemin_fichier <> False Then
            nom_fichier = Split(chemin_fichier, "\")(UBound(Split(chemin_fichier, "\")))
            Me.Hyperlinks.Add Target.Offset(, 2), Address:=chemin_fichier, TextToDisplay:=nom_fichier
        End If
    End If

End Sub

sans objet

sans objet ?

sans objet ?

Voir mise à jour.

Bonjour,

Une proposition plus simple via lien hypertexte

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim chemin_fichier As Variant, nom_fichier As String

    If Not Intersect(Target, Columns("A")) Is Nothing _
    And Target.Count = 1 Then
        chemin_fichier = Application.GetOpenFilename(, , "Sélectionner Fiche")
        If chemin_fichier <> False Then
            nom_fichier = Split(chemin_fichier, "\")(UBound(Split(chemin_fichier, "\")))
            Me.Hyperlinks.Add Target.Offset(, 2), Address:=chemin_fichier, TextToDisplay:=nom_fichier
        End If
    End If

End Sub

Bonjour,

Le code ne fonctionne pas si je rempli d'abord ma colonne A et que je lance seulement après la macro.

Clem

Le code ne fonctionne pas si je rempli d'abord ma colonne A et que je lance seulement après la macro.

Dans ce cas, utiliser alors ce code :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim chemin_fichier As Variant, nom_fichier As String

    If Target = Empty Then Exit Sub
    If Not Intersect(Target, Columns("A")) Is Nothing _
    And Target.Count = 1 Then
        chemin_fichier = Application.GetOpenFilename(, , "Sélectionner Fiche")
        If chemin_fichier <> False Then
            nom_fichier = Split(chemin_fichier, "\")(UBound(Split(chemin_fichier, "\")))
            Me.Hyperlinks.Add Target.Offset(, 2), Address:=chemin_fichier, TextToDisplay:=nom_fichier
        End If
    End If

End Sub

Je n'arrive pas à lancer le code : On dirait qu'il ne reconnait pas la macro :

1

je n'arrive pas à lancer le code : On dirait qu'il ne reconnait pas la macro :

Comme il s'agit d'une macro événementielle, il faut placer le code dans la feuille correspondante.

ci-joint exemple

Comme il s'agit d'une macro événementielle, il faut placer le code dans la feuille correspondante.

ci-joint exemple

Toujours la même fenêtre qui s'ouvre au lancement de la macro

Toujours la même fenêtre qui s'ouvre au lancement de la macro

La macro se lance en sélectionnant une cellule de la colonne A comportant une valeur car il s'agit d'une macro se déclenchant à partir de l'événement "sélection d'une cellule".

La macro se lance en sélectionnant une cellule de la colonne A comportant une valeur car il s'agit d'une macro se déclenchant à partir de l'événement "sélection d'une cellule".

Ah effectivement je n'avais pas sélectionné la cellule, j'étais restée sur l'idée de crée un bouton pour que cela soit plus intéractif

Bonjour,

Une petite modification pour éviter une nouvelle demande de fiche lorsque la colonne C est remplie.

Bonjour,

Comment modifier le code, pour obtenir le chemin du fichier en texte et non en hypertexte ?

Merci

Comment modifier le code, pour obtenir le chemin du fichier en texte et non en hypertexte ?

via l'infobulle affichée par la souris.

via l'infobulle affichée par la souris.

Oui mais je voudrai que cela s'affiche dans la case pas uniquement avec l'info bulle

Oui mais je voudrai que cela s'affiche dans la case pas uniquement avec l'info bulle

Dans ce cas, plus de lien hypertexte, juste l'affichage du chemin de la fiche et une sélection de ce chemin pour afficher la fiche.

Dans ce cas, plus de lien hypertexte, juste l'affichage du chemin de la fiche et une sélection de ce chemin pour afficher la fiche.

Merci, je n'ai pas besoin d'ouvrir la ficher donc j'ai supprimé cette ligne :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim chemin_fichier As Variant, nom_fichier As String

If Target = Empty Then Exit Sub

If Not Intersect(Target, Columns("A")) Is Nothing _

And Target.Count = 1 _

And Target.Offset(, 2) = Empty Then

chemin_fichier = Application.GetOpenFilename(, , "Sélectionner Fiche")

If chemin_fichier <> False Then Target.Offset(, 2) = chemin_fichier

End If

If Not Intersect(Target, Columns("C")) Is Nothing _

And Target.Count = 1 _

And Target <> Empty Then

CreateObject("shell.application").ShellExecute Target.Value, "", "", "open", 1

End If

End Sub

Est-ce qu'on peut faire en sorte qu'au lieu d'ouvrir la fenêtre parcourir en cliquant sur les cases de la colonne A, on l'ouvre depuis la colonne C, là où seront les liens ?

Est-ce qu'on peut faire en sorte qu'au lieu d'ouvrir la fenêtre parcourir en cliquant sur les cases de la colonne A, on l'ouvre depuis la colonne C, là où seront les liens ?

pas de problème.

Génial !

Merci beaucoup !

J'abuse un petit peu en vous posant une autre question : Peut-on afficher le chemin d'accès seulement à partir d'un certain dossier? Par exemple :

Obtenir : \LIENS\Dossier A\Fiche 1.txt

Au lieu de : C:\Users\User\Desktop\LIENS\Dossier A\Fiche 1.txt

Toujours démarrer du dossier LIENS (qui s’appellera toujours ainsi)

Rechercher des sujets similaires à "creation boutons cases vides"