Bonjour à tous,
j'ai parcouru la recherche (ici et ailleurs sur le web), sans trouver de solution (simple) à mon problème.
Pour éclaircir les raisons d’utiliser cette méthode plutôt qu'une autre, je vais vous expliquer comment fonctionne le fichier dans lequel je dois importer des données.
Il s'agit d'un fichier, identique sur le fond, mais pas sur la forme.
Il exporte uniquement des données réelles, et lorsqu'un un résultat devrait être 0, il n'affiche tout simplement pas la ligne concernée.
J'utilise donc la fonction "Selection.Find", afin de récupérer la donnée que si la cellule est présente.
Cependant, lorsque c'est absent, il me prend du coup une cellule qui ne correspond pas.
J'aimerais, lorsque le résultat de la recherche est "null", que cela saute à la prochaine étape.
J'ai bien vu des solutions à ça, mais j'ai des dizaines de recherche de ce type, et cela me semblera trop complexe à mettre en oeuvre (je suis débutant VBA quasi autodidacte depuis une formation sur les bases de la programmation VBA via Excel).
Voici donc un exemple du code qui me pose problème :
Dans cet exemple, si la cellule devant contenir "En cours Dysfonctionnement SC" n'est pas trouvée, cela me copie le contenu la cellule B40 à la place, alors que j'aimerais que ça passe à la recherche suivante.
Merci de votre aide
PS : je n'ai pas mis le code complet car il y a plus de 500 lignes mais le reste est quasi identique ou alors ne pose aucun soucis
j'ai parcouru la recherche (ici et ailleurs sur le web), sans trouver de solution (simple) à mon problème.
Pour éclaircir les raisons d’utiliser cette méthode plutôt qu'une autre, je vais vous expliquer comment fonctionne le fichier dans lequel je dois importer des données.
Il s'agit d'un fichier, identique sur le fond, mais pas sur la forme.
Il exporte uniquement des données réelles, et lorsqu'un un résultat devrait être 0, il n'affiche tout simplement pas la ligne concernée.
J'utilise donc la fonction "Selection.Find", afin de récupérer la donnée que si la cellule est présente.
Cependant, lorsque c'est absent, il me prend du coup une cellule qui ne correspond pas.
J'aimerais, lorsque le résultat de la recherche est "null", que cela saute à la prochaine étape.
J'ai bien vu des solutions à ça, mais j'ai des dizaines de recherche de ce type, et cela me semblera trop complexe à mettre en oeuvre (je suis débutant VBA quasi autodidacte depuis une formation sur les bases de la programmation VBA via Excel).
Voici donc un exemple du code qui me pose problème :
Code:
Sub ImportDonnéesHLC()
'
' ImportDonnéesHLC Macro
' Importe les données du fichier HLC NIVEAU 2 du lundi (il faut choisir le fichier à ouvrir)
'
Dim pathFichier As String, NomFichierHLC As String, tmpStr() As String
Dim leClasseur As Workbook
Dim NumSem As String
Suppression du rafraichissement de l'ecran
Application.ScreenUpdating = False
' Récupérer le fichier ReportingHLC à ouvrir (path complet)
pathFichier = Application.GetOpenFilename("Fichier excel,*.xls", , "Sélection du fichier Activite FIT du lundi de la semaine suivante")
' Ouvrir le fichier ReportingHLC
Set leClasseur = Application.Workbooks.Open(pathFichier)
' Récupérer le nom du fichier ReportingHLC
tmpStr = Split(pathFichier, "\")
NomFichierHLC = tmpStr(UBound(tmpStr))
' Demande du nom du fichier mensuel
NumSem = InputBox("Entrez le numéro de semaine à traiter, sous le format nombre uniquement", "Numéro de semaine")
On Error Resume Next
' Lancement de la procédure d'importation des données
''' Focus sur les "En cours" '''
' En cours Dysfonctionnement SC
Windows(NomFichierHLC).Activate
Rows("40:65").Select
Selection.Find(What:="En cours Dysfonctionnement SC", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Range("A1").Copy
Windows("Matrice Weekly ITS Fixe 2013.xlsm").Activate
Range("E136").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' En cours Expertise N2 FIT
Windows(NomFichierHLC).Activate
Rows("40:65").Select
Selection.Find(What:="En cours Expertise N2 FIT", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Range("A1").Copy
Windows("Matrice Weekly ITS Fixe 2013.xlsm").Activate
Range("E137").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Réactivation du rafraichissement de l'ecran
Application.ScreenUpdating = True
End Sub
Dans cet exemple, si la cellule devant contenir "En cours Dysfonctionnement SC" n'est pas trouvée, cela me copie le contenu la cellule B40 à la place, alors que j'aimerais que ça passe à la recherche suivante.
Merci de votre aide
PS : je n'ai pas mis le code complet car il y a plus de 500 lignes mais le reste est quasi identique ou alors ne pose aucun soucis
Dernière édition: