Trie + cupp ligne VBA
Bonjour,
je préfère refaire un post car le trie était résolu.
j'avais un autre code qui supprime les lignes ou en colonne B était inscrit "Chambre d'accueil".
je souhaite que les deux codes puisse s'enchainer mais j'ai un bug sur la ligne surligné :
Option Explicit
Dim Lg&, c As Range, Cel
Dim firstAddress$
Sub TrieSup()
'
' Trie Macro
'
vfeuil = ActiveSheet.Name ' repère le nom de l'onglet
Range("B6:AH80").Select
ActiveWorkbook.Worksheets(vfeuil).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(vfeuil).Sort.SortFields.Add Key:=Range("B6:B80"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(vfeuil).Sort
.SetRange Range("B5:AH80")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("B6").Select
Lg = Range("b" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
' For Each Cel In Range("f1:f" & [f65000].End(xlUp).Row) 'mots à rechercher
For Each Cel In Array("Chambre d'accueil") 'mots à rechercher
With Range("b1:b" & Lg)
Set c = .Find(Cel, LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Range(c.Address).ClearContents
Set c = .FindNext(c)
If c Is Nothing Then Exit Do
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Next Cel
On Error Resume Next 'si pas de vides
Range("b1:b" & Lg).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
merci d'avance,
Francky
Bonjour Francky,
Le fait d'écrire Option Explicit en tête de module nécessite que tu déclares tes variables.
Or ici, vfeuil n'est pas déclaré...
bon en fait je vais présenter les choses autrement.
je vous met les deux code qui marche et je voudrais en faire qu'un, en sachant que le "trie" se fait avant le "supp"
voici pour le tri :
Option Explicit
Dim Lg&, c As Range, Cel
Dim firstAddress$
Sub Sup()
Lg = Range("b" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
' For Each Cel In Range("f1:f" & [f65000].End(xlUp).Row) 'mots à rechercher
For Each Cel In Array("Chambre d'accueil") 'mots à rechercher
With Range("b1:b" & Lg)
Set c = .Find(Cel, LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Range(c.Address).ClearContents
Set c = .FindNext(c)
If c Is Nothing Then Exit Do
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Next Cel
On Error Resume Next 'si pas de vides
Range("b1:b" & Lg).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
et voici pour la suppression de ligne :
Sub Trie()
'
' Trie Macro
'
vfeuil = ActiveSheet.Name ' repère le nom de l'onglet
Range("B6:AH80").Select
ActiveWorkbook.Worksheets(vfeuil).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(vfeuil).Sort.SortFields.Add Key:=Range("B6:B80"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(vfeuil).Sort
.SetRange Range("B5:AH80")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("B6").Select
End Sub
merci d'avance
Francky
bonjour vba news,
en effet, quand j'enlève la fonction explicite ça plante plus mais il m'a fait des choses bizarre, donc il vaut mieux déclarer Vfeuil, mais qu'elle est la ligne à rajouter ?
Francky
oups, désolé, vous aurez compris que j'ai inversé les codes
Déclare-le en String. Francky, je ne connais pas ton niveau de vba mais dans un programme, il est primordial de savoir comment déclarer les variables.Francky69100 a écrit :en effet, quand j'enlève la fonction explicite ça plante plus mais il m'a fait des choses bizarre, donc il vaut mieux déclarer Vfeuil, mais qu'elle est la ligne à rajouter ?
Francky
Merci de ta réponse vba news,
malheureusement je n'ai pas dû faire les choses comme il faut :
Option Explicit
Dim Lg&, c As Range, Cel
Dim firstAddress$
Dim maVariable As String
Sub TriSup()
maVariable = ("vfeuil")
vfeuil = ActiveSheet.Name ' repère le nom de l'onglet
Range("B6:AH80").Select
ActiveWorkbook.Worksheets(vfeuil).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(vfeuil).Sort.SortFields.Add Key:=Range("B6:B80"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(vfeuil).Sort
.SetRange Range("B5:AH80")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Lg = Range("b" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
' For Each Cel In Range("f1:f" & [f65000].End(xlUp).Row) 'mots à rechercher
For Each Cel In Array("Chambre d'accueil") 'mots à rechercher
With Range("b1:b" & Lg)
Set c = .Find(Cel, LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Range(c.Address).ClearContents
Set c = .FindNext(c)
If c Is Nothing Then Exit Do
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Next Cel
On Error Resume Next 'si pas de vides
Range("b1:b" & Lg).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
cordialement,
Francky
Re,
Non c'est la variable vfeuil que tu dois déclarer :
Dim vfeuil As String
De plus, si ces variables ne sont utilisées que par ta macro, il faut les déclarer dans la macro et non pas en dehors :
Option Explicit
Sub TriSup()
Dim Lg&, c As Range, Cel
Dim firstAddress$
Dim vfeuil As String
vfeuil = ActiveSheet.Name ' repère le nom de l'onglet
.
.
.
.
Bonjour vba-news,
merci beaucoup, et désolé si je n'avais pas tout compris pour la déclaration de la variable.
ça marche impeccable.
j'essaierai de mettre les déclarations dedans et en dehors pour voir si cela produit une différence.
bonne fin de dimanche,
Francky