begin process at 2012 02 15 16:11:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Divers

 > 

Débutants

 > 

[VBA EXCEL] Comment supprimer les lignes dessous une valeur cherchée


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[VBA EXCEL] Comment supprimer les lignes dessous une valeur cherchée

vendredi 20 février 2009 à 16:31:37 | [VBA EXCEL] Comment supprimer les lignes dessous une valeur cherchée

Gorion87

Bonjour,

Je n'arrive pas à trouver le moyen de supprimer les 6 lignes suivantes quand la macro trouve la valeur "*Data*" dans une cellule. La ligne contenant "*Data*" se supprime bien mais je voudrais que les 6 suivantes se supprimes automatiquement.

Voici le code VBA :

For X = 2 To Range("A65536").End(xlUp).Row
If Range("A" & X) = "*Data*" Then Rows(X).Delete
Next X

Merci pour votre aide d'avance.
vendredi 20 février 2009 à 16:36:24 | Re : [VBA EXCEL] Comment supprimer les lignes dessous une valeur cherchée

Gorion87

Réponse acceptée !
PS : j'ai oublié, il faudrait que celà supprime également la ligne au-dessus de la cellule trouvée "*Data*"

Merci
vendredi 20 février 2009 à 22:30:47 | Re : [VBA EXCEL] Comment supprimer les lignes dessous une valeur cherchée

emarck

Réponse acceptée !

Salut Gorion87

Cette exemple de macro permet la suppression de ligne entière.
 Donc  si tu as des données par exemple sur la ligne A3, B3, C3 etc et que le *Data* se trouve en A3 
la ligne entière sera supprimé. 
 
 Sub Macro1()

Dim trouver As Boolean
'initialisation d'un variable pour nous indiquer quand *Data* est trouvé
trouver = False

' ta boucle for avec quelques ajouts... :o)
For X = 2 To Range("A65536").End(xlUp).Row
If Range("A" & X) = "*Data*" Then

'*data* a été trouvé donc ont passe la variable à vrai
trouver = True

'supprimer la valeur *Data*
Rows(X).Delete
'supprimer la cellule avant celle contenant *Data*
' sans modifier la valeur de X qui est la position originale ou se trouvait *Data*
Rows(X - 1).Delete
End If

' Si la variable trouver est à vrai
If trouver = True Then

'boucler 6 fois pour les 6 lignes suivant la ligne contenant *Data*
For I = 1 To 6
'Pour supprimer les 5 premières lignes  
If I <> 6 Then
Rows(X).Delete
Else
'si la boucle est rendu à 6 supprimer la valeur de la 6e lignes avant l'exécution 'de la macro...
Rows(X - 1).Delete
End If
Next I

End If

'une fois complété, remettre la variable trouver à faux afin de terminer la
'première boucle ou permettre de trouver une autre ligne contenant *Data*
trouver = False

Next X

End Sub

Comme vous pouvez le constater, je boucles 6 fois pour supprimer les 6 lignes. Les 5 premières lignes supprime toujours la même ligne et la 6e boucle tombe dans un else qui supprime la ligne avant la 5e...

À première vu, cela peut sembler illogique, mais en réalité c'est tout à fait cohérent. Le tout fonctionne, car Excel lorsque vous supprimer une ligne fait remonter d' une ligne les lignes suivante.

Donc si vous avez *Data* écrit à la ligne A3  et *Data2* à la ligne A4
et que vous désirez supprimer les deux lignes. Vous supprimerez 2 fois la ligne A3.

Une fois pour *Data* et une seconde fois pour *Data2*. Puisque suite à la suppression de *Data* , *Data2* sera remonté d'une ligne automatiquement pour être inscrit en ligne A3 au lieu de A4. 

Pour la suppression de la 6e ligne, je recule d'une ligne, car je sais que le fais de supprimer *Data* et la valeur de la ligne précédents, fait que mes valeurs des 6 prochaines lignes remonteront eux aussi d'une ligne.
 
Comme je ne peux modifier la position de ma variable dans mon premier For , car je ne serais plus positionné sur la ligne *Data* original, mais sur une ligne trop loin ou une ligne trop tard, je garde la même position et utilise l'automatisme de Excel à mon avantage. 

Je peu ainsi sans bougé de ligne supprimer les 5 valeurs  dans les 5 premières lignes à supprimer et comme chaque fois que je supprime une valeur celle en dessous d'elle remonte d'une ligne. Le même phénomène que A3 devenu A4 se produit.
 
Si nous ajoutons la suppression de la lignes au dessus de la valeur *data* ainsi que la ligne contenant *data* trouver par la boucle au début de la macro, nous arrivons avec une différence d'une ligne entre la position du premier For et celle au se trouve la valeur correspondant à la 6e ligne en dessous de  *data* avant l'exécution de la macro. Il faut donc reculer d'une ligne pour supprimer la bonne donnée.    

En espérant que mes explications vous seront utiles.

Bon code !
emarck

samedi 21 février 2009 à 00:15:49 | Re : [VBA EXCEL] Comment supprimer les lignes dessous une valeur cherchée

cnt

Réponse acceptée !
Salut gorion87
 Voici une solution en VBA Excel 2000

Sub Find_Sup_Plage()
    Dim Quoi As String, Ici As Range
   
    Quoi = "*Data*"
    Set Ici = Sheets(1).Range("a2", Range("a2").End(xlDown)).Find(Quoi)
    If Not Ici Is Nothing Then
        Sheets(1).Range(Ici.Offset(1, 0), Ici.Offset(6, 0)).Delete (xlShiftUp)  ' ou .Clear
        If Ici.Row > 1 Then
            Sheets(1).Range(Ici, Ici.Offset(-1, 0)).Delete (xlShiftUp)          ' ou .Clear
        End If
    End If
End Sub


Delete, supprime des lignes et remonter celles en dessous
Clear, efface le contenu

Bonne suite.
CNTJC
samedi 21 février 2009 à 12:20:46 | Re : [VBA EXCEL] Comment supprimer les lignes dessous une valeur cherchée

Gorion87

Réponse acceptée !
Bonjour,

Un grand merci à vous deux pour votre aide et surtout les explications qui m'ont permis de franchir une nouvelle étape dans la compréhension des macros....

Merci encore !!!


Cette discussion est classée dans : vba, valeur, data, lignes, supprimer


Répondre à ce message

Sujets en rapport avec ce message

Supprimer ligne selon valeur du ComboBox1 [ par avyrex1926 ] Re-bonjour tout le monde,Je cherche à supprimer des lignes selon un certain critère en vba excel.Voici ou je suis rendu avec le script:Dim Ligne As Lo Supprimer les lignes d'un tableau en fonction d'une valeur [ par sbkl ] Bonjour à tous,Je cherche à insérer dans un bouton d'une userform une fonctionnalité permettant de supprimer les lignes d'un tableau en fonction d'une Format de date VBA [ par jimy neutron ] Bonjour à tous, Pas trtès connaisseur en VBA, je vous expose mon petit problème. - MyDate est un string égal à la valeur d'un calendrier MSCAL soit je n'arrive pas à supprimer des lignes de ma bd avec recordset [ par beegeezzz ] Bonjour tout le monde,J'ai une base de données qui contient deux tables.Une table avec des noms de paramètes (météo, humeur...) et des valeurs de para VBA Bordures lignes & colonnes dans Listbox [ par punko ] Bonjour à tous, Voici ce que je cherche à faire. Dans un Userform, j'ai (entre autres) un ListBox 4 colonnes. Les lignes de cette ListBox se remplisse VBA / Copie insertion de ligne sous condition [ par Oldevi ] Bonjour a tous, J'ai un fichier excel avec 2 onglets, -pour toute valeur = VALEUR dans la colonne C de la feuille 1, je souhaite inserer une ligne det Supprimer un module en VBA [ par dedenet2 ] Bonsoir à tous ,Pour créer un module nommé "test" , j'écris ce code:       Dim f As VBComponent       Set f = ThisWorkbook.VBProject.VBComponents.Add( Problème de Suppression [ par Lacoste225 ] Bonjour à tous,J'ai un problème avec les suppressions de plusieurs lignes dans un datagridview. Je m'explique:En faisant un clique droit sur un datagr fonction si et boucle vBA [ par loulou411 ] Bonjour, <p class="MsoNormal" sty


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,324 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales