Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

limiter l'action d'une macro à une cellule

9 réponses
Avatar
AB
Bonjour à tous,
Le code ci-après m'a été fourni par Daniel.C, à qui je tiens à redire ma
gratitude.
Il lit les données en colonne B, va chercher sur mon disque le fichier dont
le nom figure en colonne B, et écrit en colonne C le chemin complet d'accès
à ce fichier.
Il fait ça pour tout le classeur, qui comporte 22 feuilles. Ca prend donc un
certain temps.
Chaque fois que j'ajoute une ligne, je relance la procédure.
Je voudrais que l'action d'aller chercher le chemin, et de l'inscrire en
colonne C ne concerne désormais que la cellule active.
Ce code étant pour moi totalement incompréhensible, merci à ceux qui
pourront m'aider.
AB

Voici le code :

Public TabloD() As String
Public TabloF() As String

Sub Recherche()
ReDim TabloD(0)
ReDim TabloF(0)

racine = ThisWorkbook.Path
'Set fso = New Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine
For Each c In Range("B1", Range("B100").End(xlUp))
For i = 0 To UBound(TabloF) - 1
If UCase(c.Value & ".htm") = UCase(TabloF(i)) Then
c.Offset(, 1) = TabloD(i)
End If
Next i
Next c
End Sub
Sub Lit_dossier(ByRef dossier)
For Each d In dossier.SubFolders
Lit_dossier d
Next
For Each f In dossier.Files
If Right(f.Name, 4) = ".htm" Then
TabloD(UBound(TabloD)) = dossier.Path
TabloF(UBound(TabloF)) = f.Name
ReDim Preserve TabloD(UBound(TabloD) + 1)
ReDim Preserve TabloF(UBound(TabloF) + 1)
End If
Next
Var = UBound(TabloD)
End Sub

9 réponses

Avatar
Daniel.C
Bonjour.
la macro se déclenchera si tu cliques sur une cellule de la colonne B pour
la sélectionner.
1. Dans un module :

Sub Recherche(c As Range)
racine = ThisWorkbook.Path
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine, c
End Sub
Sub Lit_dossier(ByRef dossier, c As Range)
For Each d In dossier.SubFolders
Lit_dossier d, c
Next
For Each f In dossier.Files
If f.Name = c.Value & ".htm" Then
c.Offset(, 1) = dossier.Path
Exit For
End If
Next
End Sub

2. Dans le code de la feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 And Target.Value <> "" Then
Application.EnableEvents = False
Recherche Target
Application.EnableEvents = True
End If
End Sub

Si tu veux que la macro se déclenche quand tu remplis une cellule de la
colonne B, remplace :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
par :
Private Sub Worksheet_Change(ByVal Target As Range)
Cordialement.
Daniel
"AB" a écrit dans le message de news:
%
Bonjour à tous,
Le code ci-après m'a été fourni par Daniel.C, à qui je tiens à redire ma
gratitude.
Il lit les données en colonne B, va chercher sur mon disque le fichier
dont le nom figure en colonne B, et écrit en colonne C le chemin complet
d'accès à ce fichier.
Il fait ça pour tout le classeur, qui comporte 22 feuilles. Ca prend donc
un certain temps.
Chaque fois que j'ajoute une ligne, je relance la procédure.
Je voudrais que l'action d'aller chercher le chemin, et de l'inscrire en
colonne C ne concerne désormais que la cellule active.
Ce code étant pour moi totalement incompréhensible, merci à ceux qui
pourront m'aider.
AB

Voici le code :

Public TabloD() As String
Public TabloF() As String

Sub Recherche()
ReDim TabloD(0)
ReDim TabloF(0)

racine = ThisWorkbook.Path
'Set fso = New Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine
For Each c In Range("B1", Range("B100").End(xlUp))
For i = 0 To UBound(TabloF) - 1
If UCase(c.Value & ".htm") = UCase(TabloF(i)) Then
c.Offset(, 1) = TabloD(i)
End If
Next i
Next c
End Sub
Sub Lit_dossier(ByRef dossier)
For Each d In dossier.SubFolders
Lit_dossier d
Next
For Each f In dossier.Files
If Right(f.Name, 4) = ".htm" Then
TabloD(UBound(TabloD)) = dossier.Path
TabloF(UBound(TabloF)) = f.Name
ReDim Preserve TabloD(UBound(TabloD) + 1)
ReDim Preserve TabloF(UBound(TabloF) + 1)
End If
Next
Var = UBound(TabloD)
End Sub




Avatar
Daniel.C
Si tu ajoutes beaucoup de cellules, il est peut-être possible d'optimiser la
recherche.
Daniel
"Daniel.C" a écrit dans le message de news:

Bonjour.
la macro se déclenchera si tu cliques sur une cellule de la colonne B pour
la sélectionner.
1. Dans un module :

Sub Recherche(c As Range)
racine = ThisWorkbook.Path
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine, c
End Sub
Sub Lit_dossier(ByRef dossier, c As Range)
For Each d In dossier.SubFolders
Lit_dossier d, c
Next
For Each f In dossier.Files
If f.Name = c.Value & ".htm" Then
c.Offset(, 1) = dossier.Path
Exit For
End If
Next
End Sub

2. Dans le code de la feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 And Target.Value <> "" Then
Application.EnableEvents = False
Recherche Target
Application.EnableEvents = True
End If
End Sub

Si tu veux que la macro se déclenche quand tu remplis une cellule de la
colonne B, remplace :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
par :
Private Sub Worksheet_Change(ByVal Target As Range)
Cordialement.
Daniel
"AB" a écrit dans le message de news:
%
Bonjour à tous,
Le code ci-après m'a été fourni par Daniel.C, à qui je tiens à redire ma
gratitude.
Il lit les données en colonne B, va chercher sur mon disque le fichier
dont le nom figure en colonne B, et écrit en colonne C le chemin complet
d'accès à ce fichier.
Il fait ça pour tout le classeur, qui comporte 22 feuilles. Ca prend donc
un certain temps.
Chaque fois que j'ajoute une ligne, je relance la procédure.
Je voudrais que l'action d'aller chercher le chemin, et de l'inscrire en
colonne C ne concerne désormais que la cellule active.
Ce code étant pour moi totalement incompréhensible, merci à ceux qui
pourront m'aider.
AB

Voici le code :

Public TabloD() As String
Public TabloF() As String

Sub Recherche()
ReDim TabloD(0)
ReDim TabloF(0)

racine = ThisWorkbook.Path
'Set fso = New Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine
For Each c In Range("B1", Range("B100").End(xlUp))
For i = 0 To UBound(TabloF) - 1
If UCase(c.Value & ".htm") = UCase(TabloF(i)) Then
c.Offset(, 1) = TabloD(i)
End If
Next i
Next c
End Sub
Sub Lit_dossier(ByRef dossier)
For Each d In dossier.SubFolders
Lit_dossier d
Next
For Each f In dossier.Files
If Right(f.Name, 4) = ".htm" Then
TabloD(UBound(TabloD)) = dossier.Path
TabloF(UBound(TabloF)) = f.Name
ReDim Preserve TabloD(UBound(TabloD) + 1)
ReDim Preserve TabloF(UBound(TabloF) + 1)
End If
Next
Var = UBound(TabloD)
End Sub








Avatar
AB
Merci Daniel. Pas le temps de tester : je dois m'absenter. je te tiens au
courant.
André

"Daniel.C" a écrit dans le message de news:
%23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible d'optimiser
la recherche.
Daniel
"Daniel.C" a écrit dans le message de news:

Bonjour.
la macro se déclenchera si tu cliques sur une cellule de la colonne B
pour la sélectionner.
1. Dans un module :

Sub Recherche(c As Range)
racine = ThisWorkbook.Path
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine, c
End Sub
Sub Lit_dossier(ByRef dossier, c As Range)
For Each d In dossier.SubFolders
Lit_dossier d, c
Next
For Each f In dossier.Files
If f.Name = c.Value & ".htm" Then
c.Offset(, 1) = dossier.Path
Exit For
End If
Next
End Sub

2. Dans le code de la feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 And Target.Value <> "" Then
Application.EnableEvents = False
Recherche Target
Application.EnableEvents = True
End If
End Sub

Si tu veux que la macro se déclenche quand tu remplis une cellule de la
colonne B, remplace :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
par :
Private Sub Worksheet_Change(ByVal Target As Range)
Cordialement.
Daniel
"AB" a écrit dans le message de news:
%
Bonjour à tous,
Le code ci-après m'a été fourni par Daniel.C, à qui je tiens à redire ma
gratitude.
Il lit les données en colonne B, va chercher sur mon disque le fichier
dont le nom figure en colonne B, et écrit en colonne C le chemin complet
d'accès à ce fichier.
Il fait ça pour tout le classeur, qui comporte 22 feuilles. Ca prend
donc un certain temps.
Chaque fois que j'ajoute une ligne, je relance la procédure.
Je voudrais que l'action d'aller chercher le chemin, et de l'inscrire en
colonne C ne concerne désormais que la cellule active.
Ce code étant pour moi totalement incompréhensible, merci à ceux qui
pourront m'aider.
AB

Voici le code :

Public TabloD() As String
Public TabloF() As String

Sub Recherche()
ReDim TabloD(0)
ReDim TabloF(0)

racine = ThisWorkbook.Path
'Set fso = New Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine
For Each c In Range("B1", Range("B100").End(xlUp))
For i = 0 To UBound(TabloF) - 1
If UCase(c.Value & ".htm") = UCase(TabloF(i)) Then
c.Offset(, 1) = TabloD(i)
End If
Next i
Next c
End Sub
Sub Lit_dossier(ByRef dossier)
For Each d In dossier.SubFolders
Lit_dossier d
Next
For Each f In dossier.Files
If Right(f.Name, 4) = ".htm" Then
TabloD(UBound(TabloD)) = dossier.Path
TabloF(UBound(TabloF)) = f.Name
ReDim Preserve TabloD(UBound(TabloD) + 1)
ReDim Preserve TabloF(UBound(TabloF) + 1)
End If
Next
Var = UBound(TabloD)
End Sub












Avatar
AB
Bonjour Daniel,
J'ai testé, mais rien ne se passe...
En fait, je ne cherche pas à déclencher la macro sitôt que je sélectionne
une cellule en B, ou que je tape quelque chose dedans.
Je peux très bien appuyer sur un bouton pour lancer la recherche du chemin
(ce que je fais actuellement, mais ça me balaie toutes les cellules).
Je voudrais juste rechercher le chemin complet de la cellule active lorsque
je déclanche la macro.
Ton avis ?
André


"AB" a écrit dans le message de news:
eTUW6$
Merci Daniel. Pas le temps de tester : je dois m'absenter. je te tiens au
courant.
André

"Daniel.C" a écrit dans le message de news:
%23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible d'optimiser
la recherche.
Daniel
"Daniel.C" a écrit dans le message de news:

Bonjour.
la macro se déclenchera si tu cliques sur une cellule de la colonne B
pour la sélectionner.
1. Dans un module :

Sub Recherche(c As Range)
racine = ThisWorkbook.Path
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine, c
End Sub
Sub Lit_dossier(ByRef dossier, c As Range)
For Each d In dossier.SubFolders
Lit_dossier d, c
Next
For Each f In dossier.Files
If f.Name = c.Value & ".htm" Then
c.Offset(, 1) = dossier.Path
Exit For
End If
Next
End Sub

2. Dans le code de la feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 And Target.Value <> "" Then
Application.EnableEvents = False
Recherche Target
Application.EnableEvents = True
End If
End Sub

Si tu veux que la macro se déclenche quand tu remplis une cellule de la
colonne B, remplace :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
par :
Private Sub Worksheet_Change(ByVal Target As Range)
Cordialement.
Daniel
"AB" a écrit dans le message de news:
%
Bonjour à tous,
Le code ci-après m'a été fourni par Daniel.C, à qui je tiens à redire
ma gratitude.
Il lit les données en colonne B, va chercher sur mon disque le fichier
dont le nom figure en colonne B, et écrit en colonne C le chemin
complet d'accès à ce fichier.
Il fait ça pour tout le classeur, qui comporte 22 feuilles. Ca prend
donc un certain temps.
Chaque fois que j'ajoute une ligne, je relance la procédure.
Je voudrais que l'action d'aller chercher le chemin, et de l'inscrire
en colonne C ne concerne désormais que la cellule active.
Ce code étant pour moi totalement incompréhensible, merci à ceux qui
pourront m'aider.
AB

Voici le code :

Public TabloD() As String
Public TabloF() As String

Sub Recherche()
ReDim TabloD(0)
ReDim TabloF(0)

racine = ThisWorkbook.Path
'Set fso = New Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine
For Each c In Range("B1", Range("B100").End(xlUp))
For i = 0 To UBound(TabloF) - 1
If UCase(c.Value & ".htm") = UCase(TabloF(i)) Then
c.Offset(, 1) = TabloD(i)
End If
Next i
Next c
End Sub
Sub Lit_dossier(ByRef dossier)
For Each d In dossier.SubFolders
Lit_dossier d
Next
For Each f In dossier.Files
If Right(f.Name, 4) = ".htm" Then
TabloD(UBound(TabloD)) = dossier.Path
TabloF(UBound(TabloF)) = f.Name
ReDim Preserve TabloD(UBound(TabloD) + 1)
ReDim Preserve TabloF(UBound(TabloF) + 1)
End If
Next
Var = UBound(TabloD)
End Sub
















Avatar
Daniel.C
C'est ce que j'ai cru avooir fait; la macro doit se déclencher si tu cliques
sur une cellule renseignée de la colonne B.
Je vérifie cette après-midi.
Daniel
"AB" a écrit dans le message de news:
%
Bonjour Daniel,
J'ai testé, mais rien ne se passe...
En fait, je ne cherche pas à déclencher la macro sitôt que je sélectionne
une cellule en B, ou que je tape quelque chose dedans.
Je peux très bien appuyer sur un bouton pour lancer la recherche du chemin
(ce que je fais actuellement, mais ça me balaie toutes les cellules).
Je voudrais juste rechercher le chemin complet de la cellule active
lorsque je déclanche la macro.
Ton avis ?
André


"AB" a écrit dans le message de news:
eTUW6$
Merci Daniel. Pas le temps de tester : je dois m'absenter. je te tiens au
courant.
André

"Daniel.C" a écrit dans le message de news:
%23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible
d'optimiser la recherche.
Daniel
"Daniel.C" a écrit dans le message de news:

Bonjour.
la macro se déclenchera si tu cliques sur une cellule de la colonne B
pour la sélectionner.
1. Dans un module :

Sub Recherche(c As Range)
racine = ThisWorkbook.Path
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine, c
End Sub
Sub Lit_dossier(ByRef dossier, c As Range)
For Each d In dossier.SubFolders
Lit_dossier d, c
Next
For Each f In dossier.Files
If f.Name = c.Value & ".htm" Then
c.Offset(, 1) = dossier.Path
Exit For
End If
Next
End Sub

2. Dans le code de la feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 And Target.Value <> "" Then
Application.EnableEvents = False
Recherche Target
Application.EnableEvents = True
End If
End Sub

Si tu veux que la macro se déclenche quand tu remplis une cellule de la
colonne B, remplace :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
par :
Private Sub Worksheet_Change(ByVal Target As Range)
Cordialement.
Daniel
"AB" a écrit dans le message de news:
%
Bonjour à tous,
Le code ci-après m'a été fourni par Daniel.C, à qui je tiens à redire
ma gratitude.
Il lit les données en colonne B, va chercher sur mon disque le fichier
dont le nom figure en colonne B, et écrit en colonne C le chemin
complet d'accès à ce fichier.
Il fait ça pour tout le classeur, qui comporte 22 feuilles. Ca prend
donc un certain temps.
Chaque fois que j'ajoute une ligne, je relance la procédure.
Je voudrais que l'action d'aller chercher le chemin, et de l'inscrire
en colonne C ne concerne désormais que la cellule active.
Ce code étant pour moi totalement incompréhensible, merci à ceux qui
pourront m'aider.
AB

Voici le code :

Public TabloD() As String
Public TabloF() As String

Sub Recherche()
ReDim TabloD(0)
ReDim TabloF(0)

racine = ThisWorkbook.Path
'Set fso = New Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine
For Each c In Range("B1", Range("B100").End(xlUp))
For i = 0 To UBound(TabloF) - 1
If UCase(c.Value & ".htm") = UCase(TabloF(i)) Then
c.Offset(, 1) = TabloD(i)
End If
Next i
Next c
End Sub
Sub Lit_dossier(ByRef dossier)
For Each d In dossier.SubFolders
Lit_dossier d
Next
For Each f In dossier.Files
If Right(f.Name, 4) = ".htm" Then
TabloD(UBound(TabloD)) = dossier.Path
TabloF(UBound(TabloF)) = f.Name
ReDim Preserve TabloD(UBound(TabloD) + 1)
ReDim Preserve TabloF(UBound(TabloF) + 1)
End If
Next
Var = UBound(TabloD)
End Sub




















Avatar
Daniel.C
Regarde le classeur joint.
Entre le nom d'un fichier en colonne B et le chemin apparaitra en colonne C
(à condition qu'il soit dans un sous dossier du dossier dans lequel se
trouve le classeur de la macro).
http://cjoint.com/?czk0fOYCZg
Daniel
"AB" a écrit dans le message de news:
%
Bonjour Daniel,
J'ai testé, mais rien ne se passe...
En fait, je ne cherche pas à déclencher la macro sitôt que je sélectionne
une cellule en B, ou que je tape quelque chose dedans.
Je peux très bien appuyer sur un bouton pour lancer la recherche du chemin
(ce que je fais actuellement, mais ça me balaie toutes les cellules).
Je voudrais juste rechercher le chemin complet de la cellule active
lorsque je déclanche la macro.
Ton avis ?
André


"AB" a écrit dans le message de news:
eTUW6$
Merci Daniel. Pas le temps de tester : je dois m'absenter. je te tiens au
courant.
André

"Daniel.C" a écrit dans le message de news:
%23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible
d'optimiser la recherche.
Daniel
"Daniel.C" a écrit dans le message de news:

Bonjour.
la macro se déclenchera si tu cliques sur une cellule de la colonne B
pour la sélectionner.
1. Dans un module :

Sub Recherche(c As Range)
racine = ThisWorkbook.Path
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine, c
End Sub
Sub Lit_dossier(ByRef dossier, c As Range)
For Each d In dossier.SubFolders
Lit_dossier d, c
Next
For Each f In dossier.Files
If f.Name = c.Value & ".htm" Then
c.Offset(, 1) = dossier.Path
Exit For
End If
Next
End Sub

2. Dans le code de la feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 And Target.Value <> "" Then
Application.EnableEvents = False
Recherche Target
Application.EnableEvents = True
End If
End Sub

Si tu veux que la macro se déclenche quand tu remplis une cellule de la
colonne B, remplace :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
par :
Private Sub Worksheet_Change(ByVal Target As Range)
Cordialement.
Daniel
"AB" a écrit dans le message de news:
%
Bonjour à tous,
Le code ci-après m'a été fourni par Daniel.C, à qui je tiens à redire
ma gratitude.
Il lit les données en colonne B, va chercher sur mon disque le fichier
dont le nom figure en colonne B, et écrit en colonne C le chemin
complet d'accès à ce fichier.
Il fait ça pour tout le classeur, qui comporte 22 feuilles. Ca prend
donc un certain temps.
Chaque fois que j'ajoute une ligne, je relance la procédure.
Je voudrais que l'action d'aller chercher le chemin, et de l'inscrire
en colonne C ne concerne désormais que la cellule active.
Ce code étant pour moi totalement incompréhensible, merci à ceux qui
pourront m'aider.
AB

Voici le code :

Public TabloD() As String
Public TabloF() As String

Sub Recherche()
ReDim TabloD(0)
ReDim TabloF(0)

racine = ThisWorkbook.Path
'Set fso = New Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine
For Each c In Range("B1", Range("B100").End(xlUp))
For i = 0 To UBound(TabloF) - 1
If UCase(c.Value & ".htm") = UCase(TabloF(i)) Then
c.Offset(, 1) = TabloD(i)
End If
Next i
Next c
End Sub
Sub Lit_dossier(ByRef dossier)
For Each d In dossier.SubFolders
Lit_dossier d
Next
For Each f In dossier.Files
If Right(f.Name, 4) = ".htm" Then
TabloD(UBound(TabloD)) = dossier.Path
TabloF(UBound(TabloF)) = f.Name
ReDim Preserve TabloD(UBound(TabloD) + 1)
ReDim Preserve TabloF(UBound(TabloF) + 1)
End If
Next
Var = UBound(TabloD)
End Sub




















Avatar
AB
OK Daniel, ça marche. Désolé : je n'avais pas recopié le code dans la
feuille.
Sur ce point, et si je n'abuse pas de ta disponibilité, y a-t-il un moyen de
faire en sorte que ce code fonctionne pour toutes les feuilles du classeur
(il y en a 22) sans avoir à le recopier dans chaque feuille ?
André

"Daniel.C" a écrit dans le message de news:

Regarde le classeur joint.
Entre le nom d'un fichier en colonne B et le chemin apparaitra en colonne
C (à condition qu'il soit dans un sous dossier du dossier dans lequel se
trouve le classeur de la macro).
http://cjoint.com/?czk0fOYCZg
Daniel
"AB" a écrit dans le message de news:
%
Bonjour Daniel,
J'ai testé, mais rien ne se passe...
En fait, je ne cherche pas à déclencher la macro sitôt que je sélectionne
une cellule en B, ou que je tape quelque chose dedans.
Je peux très bien appuyer sur un bouton pour lancer la recherche du
chemin (ce que je fais actuellement, mais ça me balaie toutes les
cellules).
Je voudrais juste rechercher le chemin complet de la cellule active
lorsque je déclanche la macro.
Ton avis ?
André


"AB" a écrit dans le message de news:
eTUW6$
Merci Daniel. Pas le temps de tester : je dois m'absenter. je te tiens
au courant.
André

"Daniel.C" a écrit dans le message de news:
%23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible
d'optimiser la recherche.
Daniel
"Daniel.C" a écrit dans le message de news:

Bonjour.
la macro se déclenchera si tu cliques sur une cellule de la colonne B
pour la sélectionner.
1. Dans un module :

Sub Recherche(c As Range)
racine = ThisWorkbook.Path
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine, c
End Sub
Sub Lit_dossier(ByRef dossier, c As Range)
For Each d In dossier.SubFolders
Lit_dossier d, c
Next
For Each f In dossier.Files
If f.Name = c.Value & ".htm" Then
c.Offset(, 1) = dossier.Path
Exit For
End If
Next
End Sub

2. Dans le code de la feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 And Target.Value <> "" Then
Application.EnableEvents = False
Recherche Target
Application.EnableEvents = True
End If
End Sub

Si tu veux que la macro se déclenche quand tu remplis une cellule de
la colonne B, remplace :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
par :
Private Sub Worksheet_Change(ByVal Target As Range)
Cordialement.
Daniel
"AB" a écrit dans le message de news:
%
Bonjour à tous,
Le code ci-après m'a été fourni par Daniel.C, à qui je tiens à redire
ma gratitude.
Il lit les données en colonne B, va chercher sur mon disque le
fichier dont le nom figure en colonne B, et écrit en colonne C le
chemin complet d'accès à ce fichier.
Il fait ça pour tout le classeur, qui comporte 22 feuilles. Ca prend
donc un certain temps.
Chaque fois que j'ajoute une ligne, je relance la procédure.
Je voudrais que l'action d'aller chercher le chemin, et de l'inscrire
en colonne C ne concerne désormais que la cellule active.
Ce code étant pour moi totalement incompréhensible, merci à ceux qui
pourront m'aider.
AB

Voici le code :

Public TabloD() As String
Public TabloF() As String

Sub Recherche()
ReDim TabloD(0)
ReDim TabloF(0)

racine = ThisWorkbook.Path
'Set fso = New Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine
For Each c In Range("B1", Range("B100").End(xlUp))
For i = 0 To UBound(TabloF) - 1
If UCase(c.Value & ".htm") = UCase(TabloF(i)) Then
c.Offset(, 1) = TabloD(i)
End If
Next i
Next c
End Sub
Sub Lit_dossier(ByRef dossier)
For Each d In dossier.SubFolders
Lit_dossier d
Next
For Each f In dossier.Files
If Right(f.Name, 4) = ".htm" Then
TabloD(UBound(TabloD)) = dossier.Path
TabloF(UBound(TabloF)) = f.Name
ReDim Preserve TabloD(UBound(TabloD) + 1)
ReDim Preserve TabloF(UBound(TabloF) + 1)
End If
Next
Var = UBound(TabloD)
End Sub
























Avatar
Daniel.C
Dans "ThisWorkbook", mets :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Column = 2 And Target.Value <> "" Then
Application.EnableEvents = False
Recherche Target
Application.EnableEvents = True
End If
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
As Range)
If Target.Column = 2 And Target.Value <> "" Then
Application.EnableEvents = False
Recherche Target
Application.EnableEvents = True
End If
End Sub

Daniel
"AB" a écrit dans le message de news:

OK Daniel, ça marche. Désolé : je n'avais pas recopié le code dans la
feuille.
Sur ce point, et si je n'abuse pas de ta disponibilité, y a-t-il un moyen
de
faire en sorte que ce code fonctionne pour toutes les feuilles du classeur
(il y en a 22) sans avoir à le recopier dans chaque feuille ?
André

"Daniel.C" a écrit dans le message de news:

Regarde le classeur joint.
Entre le nom d'un fichier en colonne B et le chemin apparaitra en colonne
C (à condition qu'il soit dans un sous dossier du dossier dans lequel se
trouve le classeur de la macro).
http://cjoint.com/?czk0fOYCZg
Daniel
"AB" a écrit dans le message de news:
%
Bonjour Daniel,
J'ai testé, mais rien ne se passe...
En fait, je ne cherche pas à déclencher la macro sitôt que je
sélectionne
une cellule en B, ou que je tape quelque chose dedans.
Je peux très bien appuyer sur un bouton pour lancer la recherche du
chemin (ce que je fais actuellement, mais ça me balaie toutes les
cellules).
Je voudrais juste rechercher le chemin complet de la cellule active
lorsque je déclanche la macro.
Ton avis ?
André


"AB" a écrit dans le message de news:
eTUW6$
Merci Daniel. Pas le temps de tester : je dois m'absenter. je te tiens
au courant.
André

"Daniel.C" a écrit dans le message de news:
%23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible
d'optimiser la recherche.
Daniel
"Daniel.C" a écrit dans le message de news:

Bonjour.
la macro se déclenchera si tu cliques sur une cellule de la colonne B
pour la sélectionner.
1. Dans un module :

Sub Recherche(c As Range)
racine = ThisWorkbook.Path
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine, c
End Sub
Sub Lit_dossier(ByRef dossier, c As Range)
For Each d In dossier.SubFolders
Lit_dossier d, c
Next
For Each f In dossier.Files
If f.Name = c.Value & ".htm" Then
c.Offset(, 1) = dossier.Path
Exit For
End If
Next
End Sub

2. Dans le code de la feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 And Target.Value <> "" Then
Application.EnableEvents = False
Recherche Target
Application.EnableEvents = True
End If
End Sub

Si tu veux que la macro se déclenche quand tu remplis une cellule de
la colonne B, remplace :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
par :
Private Sub Worksheet_Change(ByVal Target As Range)
Cordialement.
Daniel
"AB" a écrit dans le message de news:
%
Bonjour à tous,
Le code ci-après m'a été fourni par Daniel.C, à qui je tiens à
redire
ma gratitude.
Il lit les données en colonne B, va chercher sur mon disque le
fichier dont le nom figure en colonne B, et écrit en colonne C le
chemin complet d'accès à ce fichier.
Il fait ça pour tout le classeur, qui comporte 22 feuilles. Ca prend
donc un certain temps.
Chaque fois que j'ajoute une ligne, je relance la procédure.
Je voudrais que l'action d'aller chercher le chemin, et de
l'inscrire
en colonne C ne concerne désormais que la cellule active.
Ce code étant pour moi totalement incompréhensible, merci à ceux qui
pourront m'aider.
AB

Voici le code :

Public TabloD() As String
Public TabloF() As String

Sub Recherche()
ReDim TabloD(0)
ReDim TabloF(0)

racine = ThisWorkbook.Path
'Set fso = New Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine
For Each c In Range("B1", Range("B100").End(xlUp))
For i = 0 To UBound(TabloF) - 1
If UCase(c.Value & ".htm") = UCase(TabloF(i)) Then
c.Offset(, 1) = TabloD(i)
End If
Next i
Next c
End Sub
Sub Lit_dossier(ByRef dossier)
For Each d In dossier.SubFolders
Lit_dossier d
Next
For Each f In dossier.Files
If Right(f.Name, 4) = ".htm" Then
TabloD(UBound(TabloD)) = dossier.Path
TabloF(UBound(TabloF)) = f.Name
ReDim Preserve TabloD(UBound(TabloD) + 1)
ReDim Preserve TabloF(UBound(TabloF) + 1)
End If
Next
Var = UBound(TabloD)
End Sub





























Avatar
AB
Excellent !
Merci infiniment.
André

"Daniel.C" a écrit dans le message de news:

Dans "ThisWorkbook", mets :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
If Target.Column = 2 And Target.Value <> "" Then
Application.EnableEvents = False
Recherche Target
Application.EnableEvents = True
End If
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
As Range)
If Target.Column = 2 And Target.Value <> "" Then
Application.EnableEvents = False
Recherche Target
Application.EnableEvents = True
End If
End Sub

Daniel
"AB" a écrit dans le message de news:

OK Daniel, ça marche. Désolé : je n'avais pas recopié le code dans la
feuille.
Sur ce point, et si je n'abuse pas de ta disponibilité, y a-t-il un moyen
de
faire en sorte que ce code fonctionne pour toutes les feuilles du
classeur
(il y en a 22) sans avoir à le recopier dans chaque feuille ?
André

"Daniel.C" a écrit dans le message de news:

Regarde le classeur joint.
Entre le nom d'un fichier en colonne B et le chemin apparaitra en
colonne
C (à condition qu'il soit dans un sous dossier du dossier dans lequel
se
trouve le classeur de la macro).
http://cjoint.com/?czk0fOYCZg
Daniel
"AB" a écrit dans le message de news:
%
Bonjour Daniel,
J'ai testé, mais rien ne se passe...
En fait, je ne cherche pas à déclencher la macro sitôt que je
sélectionne
une cellule en B, ou que je tape quelque chose dedans.
Je peux très bien appuyer sur un bouton pour lancer la recherche du
chemin (ce que je fais actuellement, mais ça me balaie toutes les
cellules).
Je voudrais juste rechercher le chemin complet de la cellule active
lorsque je déclanche la macro.
Ton avis ?
André


"AB" a écrit dans le message de news:
eTUW6$
Merci Daniel. Pas le temps de tester : je dois m'absenter. je te tiens
au courant.
André

"Daniel.C" a écrit dans le message de news:
%23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible
d'optimiser la recherche.
Daniel
"Daniel.C" a écrit dans le message de news:

Bonjour.
la macro se déclenchera si tu cliques sur une cellule de la colonne
B
pour la sélectionner.
1. Dans un module :

Sub Recherche(c As Range)
racine = ThisWorkbook.Path
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine, c
End Sub
Sub Lit_dossier(ByRef dossier, c As Range)
For Each d In dossier.SubFolders
Lit_dossier d, c
Next
For Each f In dossier.Files
If f.Name = c.Value & ".htm" Then
c.Offset(, 1) = dossier.Path
Exit For
End If
Next
End Sub

2. Dans le code de la feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 And Target.Value <> "" Then
Application.EnableEvents = False
Recherche Target
Application.EnableEvents = True
End If
End Sub

Si tu veux que la macro se déclenche quand tu remplis une cellule de
la colonne B, remplace :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
par :
Private Sub Worksheet_Change(ByVal Target As Range)
Cordialement.
Daniel
"AB" a écrit dans le message de news:
%
Bonjour à tous,
Le code ci-après m'a été fourni par Daniel.C, à qui je tiens à
redire
ma gratitude.
Il lit les données en colonne B, va chercher sur mon disque le
fichier dont le nom figure en colonne B, et écrit en colonne C le
chemin complet d'accès à ce fichier.
Il fait ça pour tout le classeur, qui comporte 22 feuilles. Ca
prend
donc un certain temps.
Chaque fois que j'ajoute une ligne, je relance la procédure.
Je voudrais que l'action d'aller chercher le chemin, et de
l'inscrire
en colonne C ne concerne désormais que la cellule active.
Ce code étant pour moi totalement incompréhensible, merci à ceux
qui
pourront m'aider.
AB

Voici le code :

Public TabloD() As String
Public TabloF() As String

Sub Recherche()
ReDim TabloD(0)
ReDim TabloF(0)

racine = ThisWorkbook.Path
'Set fso = New Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier_racine = fso.getfolder(racine)
Lit_dossier dossier_racine
For Each c In Range("B1", Range("B100").End(xlUp))
For i = 0 To UBound(TabloF) - 1
If UCase(c.Value & ".htm") = UCase(TabloF(i)) Then
c.Offset(, 1) = TabloD(i)
End If
Next i
Next c
End Sub
Sub Lit_dossier(ByRef dossier)
For Each d In dossier.SubFolders
Lit_dossier d
Next
For Each f In dossier.Files
If Right(f.Name, 4) = ".htm" Then
TabloD(UBound(TabloD)) = dossier.Path
TabloF(UBound(TabloF)) = f.Name
ReDim Preserve TabloD(UBound(TabloD) + 1)
ReDim Preserve TabloF(UBound(TabloF) + 1)
End If
Next
Var = UBound(TabloD)
End Sub