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

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

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.

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

Rechercher des sujets similaires à "trie cupp ligne vba"