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

  • Initiateur de la discussion Initiateur de la discussion Fave
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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:
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
 
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...
 
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:
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...
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour