IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fonction Recherche et suppression de lignes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Par défaut
    Bonjour à touts et à toutes,

    j'ai la fonction suivante qui permet de retrouver et de supprimer des lignes.
    Cette fonction fait partie d'une macro qui permet de mettre un forme un fichier de données brutes suivant une certaine forme.

    voici le code de la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    'fonction retournant les cellules (de la plage passée en paramètre) dans lesquelles on trouve la valeur/formule passée en paramètre
    Private Function find_range(find_item As Variant, search_range As Range, Optional look_in As Variant, Optional look_at As Variant, Optional match_case As Boolean) As Range
        'si les arguments optionnels ne sont pas renseignés
        Dim c As Range
        If IsMissing(look_in) Then look_in = xlValues 'xlFormulas
        If IsMissing(look_at) Then look_at = xlPart   'xlWhole
        If IsMissing(match_case) Then match_case = False
        'corps de la fonction
        With search_range
            Set c = .Find(What:=find_item, LookIn:=look_in, LookAt:=look_at, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=match_case, SearchFormat:=False)
            If Not c Is Nothing Then
                Set find_range = c
                firstAddress = c.Address
                Do
                    Set find_range = Union(find_range, c)
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
        End With
    End Function

    et voici la boucle for qui appelle cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i_annee = annee_en_cours - 2001 To 5 Step -1
            find_range(2000 + i_annee, Columns(col_max - 7)).EntireRow.Delete
        Next

    Merci d'avance poour votre aide

    PS: le message d'erreur est Run-time erreur 91: Object Variable or With bolck variable not set.
    J'avais eu auparavant ce problème il y a un mois de cela, mais j'avai pu le résoudre en inversant le déroulement de la boucle qui était de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i_annee = 5 To annee_en_cours - 2001
          find_range(2000 + i_annee, Columns(col_max - 7)).EntireRow.Delete
    Next

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Bonjour

    une idée, si l'appel de ta fonction ne trouve rien elle renverra "Nothing"

    il faudrait ajouter une variable dans la routine qui appel et modifié comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim resultat As Range
     
     
    For i_annee = annee_en_cours - 2001 To 5 Step -1
            Set resultat = find_range(2000 + i_annee, Columns(col_max - 7))
            If Not resultat Is Nothing Then resultat.EntireRow.Delete
        Next

  3. #3
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Par défaut
    Bonjour zyhack,

    j'ai ajouté la variable dans la routine mais il n'y a pas eu de changement, j'ai toujours le même message d'erreur
    Run-time erreur 91: Object Variable or With bolck variable not set

  4. #4
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Par défaut
    Par contre j'ai oublié de préciser que cette macro marche, je l'ai lancé le 29 Mai et le 1er Juin sans aucun souci. Par contre quand je l'ai lancé le 3 Juin, je me retrouve avec le message d'erreur précédent.

    Je l'ai à nouveau éxécuté le 6 Juin et elle a fonctionné à nouveau.
    Au début je croyais que c'était par rapport à la date d'éxécution puisqu'en Mai j'ai rencontré le même soucis le 3 Mai. j'ai alors cru résoudre le problème en inversant le déroulement de la boucle, mais finalement rien n'y fait

Discussions similaires

  1. Recherche et suppression plusieurs lignes
    Par ponpon17430 dans le forum VBScript
    Réponses: 1
    Dernier message: 14/08/2012, 11h38
  2. [XL-2007] Fonction recherche et gel de ligne et colonne
    Par bedoch dans le forum Excel
    Réponses: 3
    Dernier message: 22/07/2010, 11h05
  3. Recherche de la dernière ligne en fonction d'un code en debut de colonne
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/08/2007, 17h01
  4. [IO]Recherche et suppression de lignes
    Par anthyme dans le forum Général Python
    Réponses: 9
    Dernier message: 20/04/2006, 18h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo