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 :

Rechercher etSupprimer des lignes (problèmes dans une boucle) [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Rechercher etSupprimer des lignes (problèmes dans une boucle)
    Bonjour les amis,

    J'ai un petit souci avec une macro Excel bloque lorsqu'elle arrive à la boucle for suivante:

    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
    Cette macro permet normalement de mettre en forme un fichier contenant des données en les mettant en forme dans des tableaux suivant certains critères.
    Au départ, le fichier contient une seule feuille et suite à l'éxécution de la macro celui-ci contient 9 feuilles.
    En éxécutant la macro pas à pas, le problème vient en effet de cette boucle for qui fait appel à la fonction suivante:

    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
    21
     
    '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
    Cette fonction permet en fait de supprimer les lignes representants les années non voulues (2004 jusqu'à 2010).
    En mettant la boucle for en commentaire, la macro s'éxécute correctement sauf que les lignes avec les années non-voulues s'affichent.

    PS: le message d'erreur est Run-time erreur 91: Object Variable or With bolck variable not set.

    Merci d'avance pour toute aide éventuelle.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Points : 617
    Points
    617
    Par défaut
    salut

    il te sera je pense facile de comprendre que lorsque tu supprimes des lignes dans le sens de la première vers la dernière, tu te retrouves à vouloir supprimer des lignes qui n'existent plus, puisque supprimées.
    Fais donc l'inverse, de la dernière en remontant (step -1) vers la première et tu éviteras ce piège habituel.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Merci pour ta réponse babaothe, mais plus concrètement comment puis-je m'y prendre pour supprimer les lignes de la dernière à la première ?
    Que dois-je changer dans mon code ??

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 75
    Points : 90
    Points
    90
    Par défaut
    Si tu parcours tes lignes dans l'ordre croissant, quand tu en supprime une, tu garder le même numéro de ligne (ne pas l'incrémenter).

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut gabi75 et le forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    '    For i_annee = 5 To annee_en_cours - 2001[/COLOR]
    '        find_range(2000 + i_annee, Columns(col_max - 7)).EntireRow.Delete
    Ce type de supression au travers d'une boucle provoque souvent des erreurs qui sont éliminées en inevrsant le déroulement de la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    '    For i_annee = annee_en_cours - 2001 to 5 step -1
    '        find_range(2000 + i_annee, Columns(col_max - 7)).EntireRow.Delete
    Mais avec aussi peu de données pour travailler, difficile d'être sûr de ce que tu veux : aucune référence à la function dont tu donnes le code !!!
    A+

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Désolai pour le manque de données mais l'essentiel est que sa marche,
    merci à vous les amis.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/02/2013, 09h34
  2. [BASH] Problème dans une boucle IF
    Par coincoin22 dans le forum Linux
    Réponses: 3
    Dernier message: 16/08/2007, 09h34
  3. [Débutant] Problème dans une boucle Matlab
    Par RaphTIM dans le forum MATLAB
    Réponses: 3
    Dernier message: 05/06/2007, 18h51
  4. Réponses: 5
    Dernier message: 30/05/2007, 18h08
  5. Problème dans une boucle
    Par Pitou5464 dans le forum Access
    Réponses: 5
    Dernier message: 11/08/2006, 14h51

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