Problème avec VBA de recherche

Bonjour le Forum,

Il y a plusieurs jours, j'avais posté une demande concernant la façon de figer une valeur à la place d'une formule recherchée par VBA.

J'ai après de multiples manipulation, (pour un novice comme moi), trouvé ce qu'il manquait à mon code pour réaliser cette opération.

Je reviens vers vous pour un autre soucis. Lors de la suppression de lignes dans ma feuille, la macro tourne et bloque le fichier tant qu'elle n'a pas fait le tour du nombre de lignes supprimées.

Y aurait il une solution pour résoudre ce problème ?

Je joins le code et le fichier exemple.

Merci pour votre aide et très bonne journée.

Code utilisé.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Kase As Range

If Not Application.Intersect(Target, Range("A2:A200")) Is Nothing Then

If Target.Count > 1 Then

For Each Kase In Target

Worksheet_Change Kase

Next Kase

Exit Sub

End If

Target.Offset(0, 1).Formula = "=VLOOKUP(A2:A200,Feuil1!A1:B7,2,0)"

Target.Offset(0, 1).Formula = Target.Offset(0, 1).Value 'on fige la valeur dans la cellule

If Not IsEmpty(Target.Value) Then 'on verifie que la cellule n'est pas vide de données

Else

Target.Offset(0, 1).ClearContents 'on efface la formule

End If

End If

End Sub

Bonjour

dans le fichier, quelle est l'utilité de cette partie de code ??

For Each Kase In Target
 Worksheet_Change Kase
 Next Kase

Ce que je comprends, c'est que vous voulez mettre une valeur en colonne B lorsqu'il y a une valeur en colonne A et si vous enlevez cette valeur, vous voulez supprimer les données de la ligne ?

Crdlt

Bonjour,

Je ne note pas de blocage mais un test sur un petit échantillon n'est peut-être pas significatif à cet égard.

Je me demandais si tu avais choisi cette méthode pour réaliser un exercice.

Car VBA te permet de mener cette action plus directement (et peut-être plus rapidement).

Je suis un peu réservé sur la récursivité (qui semble cependant ne pas poser de problème particulier).

Je mettrais tout de même un :

Application.EnableEvents = False

avant For Each Kase...

et : Application.EnableEvents = True

entre les deux End If.

Cordialement

Ferrand

Bonjour MFerrand et Dan.

Je vous remercie pour le suivi de mon problème.

En fait ce fichier est bien un fichier test, en vue d’intégrer ce code à un fichier utilisé par tous mes collègues, ce fichier étant partagé.

Mon souci au départ était que certains de mes collègues effaçaient les formules de recherche et donc faisaient perdre certaines données utilisées par d’autres.

Je me suis donc orienté vers une macro de recherche afin de pallier à ce problème.

Mes collègues préparent des lignes pour leur journée avec leurs initiales et en fin de journée, toutes les lignes non remplis sont supprimées. Voila ou se situe le problème que j’évoquais tout à l’heure.

Quand on fait le test dans le fichier joins de supprimer une vingtaine de ligne, on voit que le fichier tourne et ce case par case. Voilà donc pourquoi je demandais s’il était possible que cette action ne se fasse pas ou soit beaucoup plus rapide. Car si l’on supprime 100 lignes, cela prend un temps fou avant de s’arrêter.

Merci encore pour votre aide.

Re

Remplacer tout le code par ceci :

Dim ok As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If ok = True Then Exit Sub
If Not Application.Intersect(Target, Range("A2:A200")) Is Nothing Then
    ok = True
    If Target <> "" Then
        Target.Offset(0, 1).Formula = "=VLOOKUP(A2:A200,Feuil1!A1:B7,2,0)"
        Target.Offset(0, 1).Formula = Target.Offset(0, 1).Value   'on fige la valeur dans la cellule

    Else: Target.EntireRow.Delete
    End If
End If
ok = False
End Sub

Dès qu'une donnée est supprimée en colonne A, la ligne sera supprimée

On aurait pu faire la recherche sans formule dans la feuille 1 également. Mais bon cela fonctionne également comme ceci

Cordialement

Dan,

Je viens de faire le test et je reçois le message d'erreur suivant lorsque je supprime les lignes de 20 à 50 pourtant vierges.

Erreur d'exécution '13':

Incompatibilité de type

Lors du débogage cette erreur se place sur "If Target <> "" Then"

re

Mets cette instruction If Target.Count > 1 Then Exit Sub juste après If ok = True Then Exit Sub

Crdlt

Merci Dan,

Cela fonctionne, mais sans vouloir abusé que faudrait-il faire pour que la ligne ne soit pas supprimée si l'on efface une donnée dans la colonne A.

Merci

Dan,

Ma demande ci-dessus se justifie du fait qu'en cas de suppression de données dans la colonne a, toutes les autres informations de la ligne vont disparaître.

Encore merci de ton attention.

Dan,

Je ne Je ne t’embête plus avec mes demandes ci-dessus, j'ai bloqué la ligne " 'Else: Target.EntireRow.Delete" et cela fonctionne.

Un tout grand merci encore pour ton aide aussi rapide et excellente journée.

Inguyone

Dim ok As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)

If ok = True Then Exit Sub

If Target.Count > 1 Then Exit Sub

If Not Application.Intersect(Target, Range("A2:A200")) Is Nothing Then

ok = True

If Target <> "" Then

Target.Offset(0, 1).Formula = "=VLOOKUP(A2:A200,Feuil1!A1:B7,2,0)"

Target.Offset(0, 1).Formula = Target.Offset(0, 1).Value 'on fige la valeur dans la cellule

'Else: Target.EntireRow.Delete

End If

End If

ok = False

End Sub

Rechercher des sujets similaires à "probleme vba recherche"