Résolu : Arrêt du code vba sur une feuille

Fave

XLDnaute Junior
Bonjour à toutes et tous,

J'ai un code VBA de recherche et d'extraction de données sur une feuille ( merci à tous ceux qui m'ont aidé...).

La recherche s'effectue sur toutes les feuilles en fonction de la valeur rentrée dans une cellule de la feuille contenant le code.

Ma cellule de mon critère de recherche est fusionnée (4 cellules pour 1).

Malheureusement, lorsque le critère de recherche est effacé, j'ai un message d'erreur me proposant d'utiliser le debbuggeur ou d'arrêter le code.

Je voulais savoir s'il existe un moyen de relancer le code automatiquement car, il me semble, qu'il s'arrête et je n'ai pas trouver d'autre solution que de fermer le fichier et de le réouvrir.

De plus, lorsque le critère recherché n'est pas trouvé, le code laisse les dernières données extraites en place.

Je voulais savoir s'il est possible de faire remettre à 0 les données (de les effacer, tout simplement) si la valeur n'est pas trouvée lors de la recherche ?

Merci d'avance pour votre aide...
 
Dernière édition:

Fave

XLDnaute Junior
Re : Arrêt du code vba sur une feuille

Effectivement, vu comme çà... lol

Le voici...

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim L As Long       ' numéro de ligne sur feuilles recherche
Dim LR As Long      ' numéro de ligne sur feuille recap
Dim F As Integer    ' numéro de feuille
    If Not Application.Intersect(Target, Range("C5")) Is Nothing Then
            Application.EnableEvents = False
            Application.ScreenUpdating = False
            'Efface zone résultat et mémorise le numéro de la première ligne de résultat
            Range("B37:F65536").ClearContents
            LR = 35
            'Charge les données dans le tableau à partir de toutes les feuilles
            For F = 1 To Sheets.Count   ' boucle sur les feuilles
                If Sheets(F).Name <> ActiveSheet.Name Then  ' feuille recap ?
                    With Sheets(F)                          ' feuille traitée
                    For L = 4 To .Cells(.Rows.Count, 2).End(xlUp).Row ' boucle lignes feuilles
                        If .Cells(L, 3).Value = Target.Value Then   'NUMERO DE COLLABORATEUR
                            LR = LR + 1                             ' ligne suivante
                            Cells(LR, 2).Value = .Cells(L, 2).Value ' documentation des colonnes
                            Cells(LR, 3).Value = .Cells(L, 5).Value
                            Cells(LR, 4).Value = .Cells(L, 6).Value
                            Cells(LR, 5).Value = .Cells(L, 11).Value
                            Cells(LR, 6).Value = .Cells(L, 12).Value
                        End If
                    Next L
                    End With
                End If
            Next F
            Application.EnableEvents = True
            Application.ScreenUpdating = True
    End If
End Sub
 

Fave

XLDnaute Junior
Re : Arrêt du code vba sur une feuille

Bonjour Pierrot93,

Merci pour ton aide précieuse.

Le code ne s'arrête plus avec la ligne rajoutée mais, pour autant, j'aimerai que, si la cellule est effacée ou que la valeur n'est pas trouvée, les valeurs trouvées précédemment soient effacées automatiquement...

Merci d'avance pour ton aide...
 

Legolas

XLDnaute Occasionnel
Re : Arrêt du code vba sur une feuille

Bonjour,

Essaie de rajouter sous le premier If

Code:
If Application.Intersect(Target, Range("E5")) = "" Then Exit Sub

A plus

EDIT : je suis trop lent ^^

Pour le second problème, il faut remonter la ligne en gras :
Code:
 If Not Application.Intersect(Target, Range("E5")) Is Nothing Then
       [B]Range("D26:H65536").ClearContents[/B] 
       If Application.CountA(Target) = 0 Then Exit Sub
 
Dernière édition:

Fave

XLDnaute Junior
Re : Arrêt du code vba sur une feuille

Bonjour Legolas,

Le rajout de cette ligne permet bien de supprimer les valeurs trouvées si la valeur cible n'existe pas. Mais, si la cellule est effacée, les valeurs trouvées précédemment restent quand même...

Une idée pour solutionner ce dernier point ?

Merci d'avance et merci aussi pour toute l'aide apportée...
 

Pierrot93

XLDnaute Barbatruc
Re : Arrêt du code vba sur une feuille

Re,

peut être comme ceci, si j'ai bien compris, pas sûr..
Code:
Option Explicit
'---------------------------------------------------------------------------------------
' Auteur    : myDearFriend!
' Date      : 03/05/2005
'---------------------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim L As Long       ' numèro de ligne sur feuilles recherche
Dim LR As Long      ' numèro de ligne sur feuille recap
Dim F As Integer    ' numèro de feuille
    If Not Application.Intersect(Target, Range("E5")) Is Nothing Then
            Application.EnableEvents = False
            Application.ScreenUpdating = False
            'Efface zone résultat et mémorise le numéro de la première ligne de résultat
            Range("D26:H65536").ClearContents
            If Application.CountA(Target) = 0 Then GoTo fin
            LR = 25
            'Charge les données dans le tableau à partir de toutes les feuilles
            For F = 1 To Sheets.Count   ' boucle sur les feuilles
                If Sheets(F).Name <> ActiveSheet.Name Then  ' feuille recap ?
                    With Sheets(F)                          ' feuille traitée
                    For L = 4 To .Cells(.Rows.Count, 2).End(xlUp).Row ' boucle lignes feuilles
                        If .Cells(L, 3).Value = Target.Value Then   'NUMERO DE COLLABORATEUR égal ?
                            LR = LR + 1                             ' ligne suivante
                            Cells(LR, 4).Value = .Cells(L, 2).Value ' documentation des colonnes
                            Cells(LR, 5).Value = .Cells(L, 5).Value
                            Cells(LR, 6).Value = .Cells(L, 6).Value
                            Cells(LR, 7).Value = .Cells(L, 11).Value
                            Cells(LR, 8).Value = .Cells(L, 12).Value
                        End If
                    Next L
                    End With
                End If
            Next F
fin:
            Application.EnableEvents = True
            Application.ScreenUpdating = True
    End If
End Sub
 

Discussions similaires

Réponses
9
Affichages
325
Réponses
2
Affichages
138

Statistiques des forums

Discussions
312 467
Messages
2 088 664
Membres
103 911
dernier inscrit
Titouano