Recherche d'une valeur dans un autre workbook

Bonjour,

je rencontre un problème tout mais j'ai beau chercher que ça soit sur internet ou en test je trouve pas.

J'ai 2 workbooks, et avec la fonction range.find je cherche si la valeur de la case d'un workbook se trouve dans une colonne du deuxième workbook et pour finir si oui je supprime la ligne.

J'ai une erreur sur le find de mon code ici :

For i = ws.UsedRange.Rows.count To 1 Step -1
        If Not (ws_cat.Range(col_1 & ":" & col_1 ).Find(ws.Range(col_2 & i).value, LookIn:=xlValues)) Is Nothing Then
            ws.Rows(i & ":" & i).EntireRow.delete xlShiftUp
        End If
next i 

ws est une worksheet du deuxième Excel, ws_cat est une worksheet du premier Excel les valeurs "col_1 , col_2 " sont des colonnes (calculées avant)

Exemple : si vous voulez tester, j'ai quelque chose qui ressemble légèrement à cela avant la boucle for posant problème

Public Const col_1 = "L"
Public Const col_2 = "AL"

Dim ws, ws_cat As Worksheet
Dim a As Variant
Dim date_time as Date
Dim wb As Workbook
Set ws_cat = ThisWorkbook.Worksheets(1)
a = Application.GetOpenFilename
    If VarType(a) = vbBoolean Then
        MsgBox "Opération annulée"
    Else
        date_time = FileDateTime(a)
        Set wb = Workbooks.Open(Filename:=a)
    End If
    For i = 1 To wb.Worksheets.count
        If wb.Worksheets(i).name = "test" Then
            Set ws = wb.Worksheets(i)
            Exit For
        End If
    Next i

Savez vous simplement d'ou vient mon problème ?

J'ai cru comprendre que lorsqu'on utilise Range.find Il faut enregistrer la cellule de départ pour faire une boucle jusqu'à retomber sur cette cellule sinon elle fait une boucle infini, mais j'ai essayé avec une condition de fin et le code ne se lance pas avant de rentrer dans une boucle infini donc l'erreur ne doit pas venir de la.

Merci pour toutes aides quelles qu'elles soient.

Bonjour,

as-tu deux fichiers excel simplifiés pour explorer ton sujet ?

Bonjour Steelson et merci encore à toi de m'aider une nouvelle fois, tu es super sympa.

Je joints 2 fichiers Excel qui ressemble au fonctionnement dans mon cas, je les ai simplifié pour vraiment ce centré sur mon problème qui est dans la boucle for de la maccro11 du fichier maccro.xlsb

il faut savoir que mon vrai jeux de données possède plus de 4000 lignes et mon cata déjà présent environ 1000. Si tu connais une meilleur façon de faire que la fonction find je suis tout aussi preneur. Mais je n'ai pas su comment faire une phase de nettoyage avant la copie de mes données mieux que ligne après ligne, en sachant que j'ai environ 10 vérifications à faire pour chaque ligne.

Merci de ton temps consacré à m'aider.

9maccro.xlsb (33.36 Ko)

Le find semble marcher ... mais en tous les cas il n'y a aucune correspondance entre les colonne D du fichier et la colonne B de l'autre fichier !

Pour tester mets a minima une même référence.

J'ai simplifié ici ton code pour tester en mettant deux debug.print

9maccro.xlsm (27.85 Ko)

La c'était normal j'avais mis n'importe quoi comme ref

Je suis d'accord avec toi ca marche sur le fichier de test mais je comprend vraiment pas pourquoi ca refuse sur le vrai fichier du coup ca me fait bien **** tout est presque identique du coup...

Tiens j'ai réussi à choper le message d'erreur lié à la ligne qui me pose problème.

capture

J'ai beau chercher l'erreur lié à ce numéro d'erreur je trouve pas mon plaisir. Sachant que je n'utilise pas de with dans cette partie, qu'il y a que le "not ... is Nothing" qui correspondrait mais marche ailleurs dans la même utilisation comme dans le fichier simplifié. Je deviens fou.

L'erreur viendrait de la partie :

(ws_cat.Range(cat_col_dtr & ":" & cat_col_dtr).Find(what:=ws.Range(fcs_col_dtr & i).value, LookIn:=xlValues))

Sachant que mes variable cat_col_dtr et fcs_col_dtr sont définis comme il faut et fixé sur ce que je veux par un petit traitement avant.

Pas d'idée ?

Edit:

Pour une raison inexplicable pour moi j'ai finis par trouver j'ai du faire en 2 temps, je m'explique:

dim b as range
Set b = ws_cat.Range(cat_col_dtr & ":" & cat_col_dtr).Find(what:=ws.Range(fcs_col_dtr & i).value, LookIn:=xlValues)
        If Not b Is Nothing Then
            ws.Rows(i & ":" & i).EntireRow.delete xlShiftUp
        End If

Si quelqu'un sait pourquoi je suis preneur ça m'évitera le sentiment d'avoir passé 2h de ma vie sur de la **** .

Je suppose que c'est le fait que b soit en range et force donc le retour de find dans le format de nothing avant de faire le test mais je trouve cela tordu sachant que ça marche nickel ailleurs.

Si ça peut aider quelqu'un.

La c'était normal j'avais mis n'importe quoi comme ref

merci d'éviter ce genre de situation à l'avenir
Rechercher des sujets similaires à "recherche valeur workbook"