Formule VBA Cells.find

Formule VBA Cells.find - VB/VBA/VBS - Programmation

Marsh Posté le 08-04-2010 à 17:01:56    

Bonjour  
 
Je suis plus que novice sur vba, je souhaiterais pour un tableau de données supprimer toutes les lignes qui ne contiennent pas dans la colonne B "bureau".
 
J'ai une formule que j'utilisais auparavant qui supprime une ligne si elle contient "bureau" :
 

Code :
  1. Sub suppressionligne()
  2. Do
  3.     If Cells.Find(What:="bureau" ) Is Nothing Then
  4.        Exit Do
  5.     Else
  6.        Cells.Find(What:="bureau" ).Activate
  7.        Selection.EntireRow.Delete
  8.     End If
  9. Loop
  10. End Sub


 
Je pensais qu'en remplaçant = par <> le formule fonctionnerait mais non, quelqu'un aurait-il une solution ?
 
Merci

Reply

Marsh Posté le 08-04-2010 à 17:01:56   

Reply

Marsh Posté le 08-04-2010 à 17:27:14    

bonjour,
pour delete ce serait mieux comme ça :
 
Sub test()
i = ActiveSheet.Cells(65535, 2).End(xlUp).Row
For k = i To 1 Step -1
If Not ActiveSheet.Cells(k, 2) = "bureau" Then Rows(k).Delete
Next
End Sub
 
A+

Reply

Marsh Posté le 08-04-2010 à 17:51:22    

Bonjour galopin01,  
 
Heu ça a supprimer toutes mes données.

Reply

Marsh Posté le 08-04-2010 à 18:47:07    

Ben c'est bien ce que tu as demandé, ça supprime toutes les lignes qui n'ont pas le mot "bureau" dans la colonne B ?

Reply

Marsh Posté le 08-04-2010 à 18:52:17    

Ah oui... je vois : YAPA que le mot "bureau"...  
On peut savoir ce qu'il y a quand il y a bureau  
Toute une phrase et ce mot placé aléatoirement.
ou quelque chose comme Bureau A, Bureau B, Bureau 21...  ??
Sinon je vais essayer de te bricoler un truc sur la base de Find...

Reply

Marsh Posté le 08-04-2010 à 19:20:01    

Re...
Cette macro détecte le mot bureau dans une phrase ou dans n'importe quelle chaine de caractère :
 
Sub test()
i = ActiveSheet.Cells(65535, 2).End(xlUp).Row
For k = i To 1 Step -1
If Not InStr(1, ActiveSheet.Cells(k, 2), "bureau", 1) > 0 Then Rows(k).Delete
Next
End Sub
 
Attention la macro fait la différence entre "bureau" et "Bureau" ou bUreau :  
avec le 1 tous les bureaux avec ou sans majuscule sont conservés.
Si on remplace le 1 par 0 seuls les "bureau" sans majuscules sont conservés.
 
ça me semble sinon difficile, du moins inapproprié d'utiliser Find dans ce cas.
A+

Reply

Marsh Posté le 09-04-2010 à 09:02:17    

Bonjour Galopin01,
 
Merci beaucoup ça fonctionne nickel !!!
 
J'aurais besoin d'une précision si tu veux bien. J'espère qu'un jour a force de travailler dessus je serai capable de faire cela tout seul comme un grand.
 
Peux tu m'expliquer ta macro ? Car j'aimerais savoir comment je peux le faire sur une autre colonne, et j'aimerais commencer ce travail à partir de la ligne 13 car au dessus il y a des titres que je souhaiterais conserver.
 
En tout merci beaucoup pour ce que tu as fait !

Reply

Marsh Posté le 09-04-2010 à 09:51:33    

bonjour,
Sub test()  
i = ActiveSheet.Cells(65535, 2).End(xlUp).Row  
For k = i To 1 Step -1  
If Not InStr(1, ActiveSheet.Cells(k, 2), "bureau", 1) > 0 Then Rows(k).Delete  
Next  
End Sub  
 
Les (2) déterminent la colonne de travail :
Pour la colonne C mettre 3...
 
Pour commencer à la ligne 13 mettre :
For k = i To 13 Step -1  
 
Commentaires :
Sub test()  
'Détermination de la dernière ligne de la colonne B (2)
i = ActiveSheet.Cells(65535, 2).End(xlUp).Row  
'La dernière ligne étant i...
'Pour chaque ligne de la dernière (i) à la ligne 13
For k = i To 13 Step -1  
'Si on ne trouve pas le String dans la colonne 2 on supprime la ligne
If Not InStr(1, ActiveSheet.Cells(k, 2), "bureau", 1) > 0 Then Rows(k).Delete  
Next  
End Sub
 
L'astuce étant de remonter de la dernière ligne à la première car quand tu remontes tu t'en fout de supprimer une ligne : les lignes suivantes qui "remontent" lors de la suppression ont déjà été traitées.
On peut aussi y arriver en allant de la première ligne à la dernière ligne, mais c'est plus difficile car lors de la suppression de la ligne en cours, la ligne suivante devient la ligne à cours et du coup il faut réévaluer la ligne en cours et c'est une histoire à  :pt1cable:  
 
A+
 

Reply

Marsh Posté le 09-04-2010 à 10:44:05    

C'est beaucoup plus clair, merci beaucoup galopin01

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed