Amélioration d'un code VBA [Résolu/Fermé]

Signaler
Messages postés
64
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
8 février 2012
-
Messages postés
16491
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
21 juillet 2021
-
Bonjour à tous,
A vrai dire j'ai deux questions:

1/
J'utilise le code suivant:

Sub ExtractRefresh()
Dim ScanFic As Office.FileSearch
Dim NomFic As Variant
Dim Nbr As Long
Set ScanFic = Application.FileSearch
With ScanFic
.NewSearch
.LookIn = ActiveWorkbook.Path
.SearchSubFolders = True
.Filename = xls
.MatchTextExactly = True

Nbr = .Execute
For Each NomFic In .FoundFiles
If Right(NomFic, 13) = "resultats.xls" Then GoTo suite
Workbooks.Open Filename:=NomFic
With Workbooks("resultats.xls").Sheets("diagnostics")
.Range("D65536").End(xlUp).Offset(1, 0).Value = ActiveWorkbook.Sheets("Renseignements").Range("D17").Value
End With
ActiveWorkbook.Save
ActiveWorkbook.Close
suite:
Next
End With
End Sub


J'aimerais que lors du déroulement, si la cellule D17 de ma feuille "Renseignements" est vide, la valeur importée dans mon document soit 0 et non "" ce qui a pour effet de décaler toutes mes lignes.

2/
J'ai des noms de fichiers.xls dans la colonne A (qui sont tous dans un même répertoire nommé "Résultat"). Dans la colonne B, on trouve "OUI" ou "NON".
Je souhaiterais réaliser un code qui me permettrait, pour chaque fichier ayant la mention "OUI" devant, d'ouvrir ce dernier et d'imprimer la feuille "Facture" de ce dernier.

Merci d'avance à ceux qui prendront le temps de m'aider.

5 réponses

Messages postés
16491
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
21 juillet 2021
3 199
Bonjour
pour le 1:

le principe
Range("B1") = IIf(IsEmpty(Range("A1")), 0, Range("A1"))



Remarque: attention si tu bascules un jour sur XL>=2007, filesearch n'est + valable; voir:
https://silkyroad.developpez.com/vba/classefilesearch/
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
64
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
8 février 2012
6
Bonjour,
Et tout d'abord merci de ton aide et pour l'info sur "filesearch", je ne savais pas.
Je suis tout à fait d'accord avec le principe, mais je n'arrive pas à l'intégrer à ma ligne:

.Range("D65536").End(xlUp).Offset(1, 0).Value = ActiveWorkbook.Sheets("Renseignements").Range("D17").Value


J'ai toujours un message d'erreur m'indiquant qu'il veut une valeur.

Et pour ma question 2, as-tu une petite idée à me soumettre?
Messages postés
16491
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
21 juillet 2021
3 199
bonjour,

quel est le rapport entre question 1 et 2?
Messages postés
64
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
8 février 2012
6
Bonsoir,
Il n'y a pas vraiment de rapport, c'est juste que je travaille beaucoup avec le même classeur, et ce sont deux fonctions dont j'ai besoin, l'une pour extraire les numéros factures impayées, et l'autre pour éditer des relances.
Messages postés
16491
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
21 juillet 2021
3 199
Bonjour,

C'est bien ce que je craignais: dans le 2 tu dis que tout est dans le m^me dossier et dans le code du 1 tu cherches dans les sous dossiers:
.LookIn = ActiveWorkbook.Path
.SearchSubFolders = True

alors je perd confiance...

D'ailleurs, ce n'est pas un hasard si MS a supprimé "filesearch" particulièrement rigide et compliqué...