VBA macro recherche par ligne

MLT

XLDnaute Nouveau
Bonjour,

J'essaye de faire un code pour rechercher ligne par ligne, le mot "azerty", si le mot est présent alors je veux supprimer la ligne: voici mon code:

Code:
Sub supp_line()

If (InStr(1, Range("1:1").Select, azerty) <> 0) Then
Rows("1:1").Delete
End If
End Sub

le problème c'est que sa supprime la ligne dans tous les cas.

J'ai aussi fait ce code qui n'est pas fonctionnel:

Code:
ligne As Integer
pointeur As String
ligne = 1
While ligne < 100
pointeur = Range("1:1").Select

If (InStr(1, pointeur, "azerty") <> 0) Then Rows(ligne & ":" & ligne).Delete
ligne = ligne + 1
End If
Wend
 

Gorfael

XLDnaute Barbatruc
Re : VBA macro recherche par ligne

Salut MLT et le forum
Excel fait toujours ce que tu lui demande de faire, et quelques (rares) fois ce que tu veux

azerty => comme vraisemblablement tu n'obliges pas la déclaration de variables, Excel déclare une variable de nom azerty et de type Variant
"azerty" => texte

Une approche :
Code:
Sub supp_line()
Dim Cel As Range
Set Cel = Rows(1).Find("azerty")
If Not (Cel Is Nothing) Then Rows(1).Delete
End Sub
- Déclare Cel en tant que plage de cellules
- Remplir la plage avec la première cellule de la ligne 1 qui contient le texte "azerty"
- si Cel n'est plus nulle, effacer la lgne 1

A+
 

Staple1600

XLDnaute Barbatruc
Re : VBA macro recherche par ligne

Re, bonjour Gorfael

Un exemple ci-dessous pour être plus parlant
(à tester sur une feuille vierge)
VB:
Sub MacroTest()
' Macro enregistrée le 21/07/2012 par Staple1600
' les 4 lignes ci-dessous ne servent que pour l'exemple
Dim t
t = Split("ENTETE a b azerty c d azerty e f")
Range("A1").Resize(UBound(t) + 1) = Application.Transpose(t)
Range("A2:A9").AutoFill Destination:=Range("A2:A33"), Type:=xlFillDefault
'/////fin génération donnés de test
MsgBox "Filtrer les données?", vbOKOnly, "Exemple"
Range("A1").AutoFilter Field:=1, Criteria1:="azerty"
End Sub

EDITION: Bonjour FredOo
 
Dernière édition:

Fred0o

XLDnaute Barbatruc
Re : VBA macro recherche par ligne

Bonjour à tous,

Une autre méthode par VBA :
VB:
Sub supp_line()
    Set lc = Cells.Find(what:="azerty")
    If Not lc Is Nothing Then
        Rows(lc.Row).Delete
        Do
            Set lc = Cells.FindNext
            If Not lc Is Nothing Then Rows(lc.Row).Delete
        Loop Until lc Is Nothing
    End If
End Sub

A+
 

MLT

XLDnaute Nouveau
Re : VBA macro recherche par ligne

Merci beaucoup, c'est exactement se que je veux faire. J'ai juste rajouter une boucle pour trier plusieurs lignes en même temps.
Code:
Sub supp_line()
Dim Cel As Range
Dim ligne As Integer
ligne = 1
While (ligne < 50)
Set Cel = Rows(ligne).Find("azerty")
If Not (Cel Is Nothing) Then Rows(ligne).Delete
ligne = ligne + 1
Wend
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : VBA macro recherche par ligne

Re

MLT
Tu as essayé la méthode avec AutoFilter au moins?
Ne serait-ce que par courtoisie ...

PS: L'avantage de l'AutoFilter, c'est qu'il évite de boucler, et est quasi-instantané.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : VBA macro recherche par ligne

Re

Merci d'avoir testé
Cela correspond mieux à ton souhait ?
Code:
Sub MacroTestFinal()
Dim pf As Range
Application.ScreenUpdating = False
Range("A1").AutoFilter Field:=1, Criteria1:="azerty"
Set pf = Range("_FilterDataBase")
pf.Offset(1, 0).Resize(pf.Rows.Count - 1).SpecialCells(12).EntireRow.Delete
With ActiveSheet
.ShowAllData: .AutoFilterMode = False
End With
End Sub
 
Dernière édition:

MLT

XLDnaute Nouveau
Re : VBA macro recherche par ligne

Merci pour ce code.

maintenant j'essaie de faire une fonction d'import de fichier texte, puis de copier ce contenu dans un onglet dont le nom est par exemple "azerty".

Le code d'import est:
Code:
Sub choisir_fichier()
FichierChoisi = Application.GetOpenFilename("Fichiers Txt,*.txt")
  If Not FichierChoisi = False Then
    FichierActuel = ThisWorkbook.Name
    Workbooks.OpenText Filename:=FichierChoisi, DataType:=xlDelimited, Tab:=True
    Selection.CurrentRegion.Copy
    Windows(FichierActuel).Activate
    Range("A1").Select
   
    ActiveSheet.Paste
    '--- 1ere ligne en gras
    Range("A1", [A1].End(xlToRight)).Font.Bold = True
    '--- cadre
    [A1].CurrentRegion.BorderAround Weight:=xlThin
   End If
End Sub

Le problème c'est que je sais pas trop où indiquer l'endroit de copy. J'ai essayé de mettre sheet("azerty").paste à la place de ActiveSheet.paste mais celà ne fonctionne pas. :mad:
 

Staple1600

XLDnaute Barbatruc
Re : VBA macro recherche par ligne

Bonjour

Pendant que le four mitonne...

EDITION: Cela semble être OK ainsi, je te laisse tester chez toi ;)
Bon appétit.
VB:
Sub choisir_fichier()
Dim WBK As Workbook, FichierChoisi ' déclaratons
Set WBK = ThisWorkbook
FichierChoisi = Application.GetOpenFilename("Fichiers Txt,*.txt")
Application.ScreenUpdating = False
  If Not FichierChoisi = False Then
    Workbooks.OpenText Filename:=FichierChoisi, DataType:=xlDelimited, Tab:=True
    ActiveWorkbook.Sheets(1).Copy WBK.Sheets(1) ' on copie tout dans le classeur stockant la macro
   End If
With WBK.Sheets(1)
    '--- 1ere ligne en gras
   .Range("A1", [A1].End(xlToRight)).Font.Bold = True
    '--- cadre
    .[A1].CurrentRegion.BorderAround Weight:=xlThin
End With
End Sub

Peux-tu joindre les fichiers exemple qu'on puisse tester ?
(Fichiers anonymisés bien sur ;) : un exemple de fichier texte et le fichier Excel avec le code VBA que tu utilises actuellement)
 
Dernière édition:

MLT

XLDnaute Nouveau
Re : VBA macro recherche par ligne

Ok

Donc je vais expliquer en détail se que je veux faire j'ai un fichier texte comme ceci ( voir pièces jointes) et je veux l'importer dans un onglet qui aura pour nom une date qui sera indiqué dans une cellule.

Comme je suis débutant en VBA, je fait les fonctions une par une. Je fait donc mes essaie sur un classeur neutre.

Ensuite quand le fichier texte sera importé je le traiterai pour une mise en forme spécifique.

PS: Pour faire passer le .txt j'ai changé l'extension, donc avant de l'utiliser il faut changer l'extension en le renommant.
 

Pièces jointes

  • mesure.xls
    30.7 KB · Affichages: 98
  • mesure.xls
    30.7 KB · Affichages: 115
  • mesure.xls
    30.7 KB · Affichages: 126

Staple1600

XLDnaute Barbatruc
Re : VBA macro recherche par ligne

Re

Tu as tester le code VBA (issu du tien) de mon message précédent ?

Car en attendant que tu joignes des fichiers exemples (merci de l'avoir fait), j'ai fais un petit fichier texte séparé par des tabulations et le code VBA précédemment posté fonctionne sur mon PC.
 

Statistiques des forums

Discussions
312 102
Messages
2 085 304
Membres
102 857
dernier inscrit
Nony1931