limiter l'action d'une macro à une cellule

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #5240341
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" %
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




Daniel.C
Le #5240321
Si tu ajoutes beaucoup de cellules, il est peut-être possible d'optimiser la
recherche.
Daniel
"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" %
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








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

"Daniel.C" %23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible d'optimiser
la recherche.
Daniel
"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" %
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












AB
Le #5173111
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" eTUW6$
Merci Daniel. Pas le temps de tester : je dois m'absenter. je te tiens au
courant.
André

"Daniel.C" %23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible d'optimiser
la recherche.
Daniel
"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" %
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
















Daniel.C
Le #5173061
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" %
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" eTUW6$
Merci Daniel. Pas le temps de tester : je dois m'absenter. je te tiens au
courant.
André

"Daniel.C" %23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible
d'optimiser la recherche.
Daniel
"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" %
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




















Daniel.C
Le #5171361
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" %
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" eTUW6$
Merci Daniel. Pas le temps de tester : je dois m'absenter. je te tiens au
courant.
André

"Daniel.C" %23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible
d'optimiser la recherche.
Daniel
"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" %
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




















AB
Le #5171311
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"
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" %
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" eTUW6$
Merci Daniel. Pas le temps de tester : je dois m'absenter. je te tiens
au courant.
André

"Daniel.C" %23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible
d'optimiser la recherche.
Daniel
"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" %
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
























Daniel.C
Le #5171221
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"
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"
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" %
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" eTUW6$
Merci Daniel. Pas le temps de tester : je dois m'absenter. je te tiens
au courant.
André

"Daniel.C" %23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible
d'optimiser la recherche.
Daniel
"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" %
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





























AB
Le #5239261
Excellent !
Merci infiniment.
André

"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"
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"
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" %
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" eTUW6$
Merci Daniel. Pas le temps de tester : je dois m'absenter. je te tiens
au courant.
André

"Daniel.C" %23%
Si tu ajoutes beaucoup de cellules, il est peut-être possible
d'optimiser la recherche.
Daniel
"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" %
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

































Publicité
Poster une réponse
Anonyme