Bonjour Thomas, CbernardT, le Forum
Pour Thomas, si tu dois ré-activer le Calsseur contenant la macro en cours d'éxécution ceci suffit :
ThisWorkbook.Sheets('Feuil1').Activate
Maintenant, l'idéal serait plutot d'en faire un Objet
Dim WSBase As Worksheet
Set WSBase = ThisWorkbook.Sheets('Feuil1')
WSBase.Range('A1') = 'TOTO'
Si ça peut t'aider car là tu pourras faire instance à WSBase, VBA saura de quel classeur et feuille il s'agit...
Sinon pour Bernard, j'ai juste survolé le code proposé, et trois trucs m'interpellent :
1) Val comme nom de Variable, autant que possible ne jamais donner un nom de variable existant en tant que Méthode ou Fontion dans VBA, En l'occurrence Val est une Fonction qui renvoie le nombre contenu dans une chaîne de caractère sous la forme d'une valeur numérique d'un type approprié. J'avais (je crois bien me souvenir) 'attrapé MichelXLD pour exactement la même Val !!!
2) Val As Object, en fait dans un .Find la variable retournée est certe un Object, mais un Object Range, donc on gagnera en précision en déclarant Val As Range, et vu que çà n'a rien à voir avec une 'Valeur', tant qu'à faire la nommer 'C' ou encore 'Cell'.
3) Dim Tableau() en Base Zéro, Base zéro est implicite par défaut si on indique rien, et par conséquent ton Tableau démarrera de 0,0 et pas de 1, tu as du le voir et c'est pour ceci cette gymnastique 'Tableau(0, X - 1)'...
En fait il suffit d'incrémenter ton 'X' en fin de traitement, et tu n'auras pas ce problème :
ReDim Preserve Tableau(3, X)
Tableau(0, X) = Workbooks(K).Name
Tableau(1, X) = Sheets(i).Name
Tableau(2, X) = 'Cellule ' & Val.Address
X = X + 1
C'est bien plus simple et lisible, chose très importante dans des applis entrecroisant plein de tableau, faut s'y retrouver d'un clin d'oeil.
Voilà juste des conseils basics pour avoir de bonnes habitudes de base, sans prétentention aucune.
Bon Dimanche
@+Thierry