Problème avec un code en Vba Excel

Hpotter

XLDnaute Junior
Bonjour à tous,

Le code ci-dessous me permet lorsque je tape une lettre dans la cellule "A2" de la feuille de rapatrier toutes les données se trouvant dans la feuille "Général" et qui correspondent à la lettre située dans "A2".

Cependant je rencontre un problème. En effet, lorsque le tableau de la feuille "Général" est vide et que je tape une lettre dans "A2", alors il me recopie systématiquement l'en-tête de la feuille.

Par exemple : je tape "P" en A2 de la feuille "P", si le tableau "Général" est vide
, alors il me recopie l'en-tête du tableau de la feuille "P".

Pouvez-vous m'aider à trouver la solution car je cherche depuis un bon moment sans succès.

Je vous en remercie par avance

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LastLig As Long, NewLig As Long, Nb As Long
If Target.Address = "$A$2" Then
   Union(Range("A4:H" & Rows.Count), Range("J4:K" & Rows.Count), Range("M4:M" & Rows.Count)).ClearContents
   If Target <> "" Then
      With Sheets("Général")
        .Range("A3").AutoFilter
         LastLig = .Cells(Rows.Count, "G").End(xlUp).Row
         With .Range("A3:N" & LastLig)
            .AutoFilter
            .AutoFilter field:=7, Criteria1:=Target
         End With
         Nb = .Range("A3:A" & LastLig).SpecialCells(xlCellTypeVisible).Count - 1
         If Nb > 0 Then
            Application.EnableEvents = False
            .Range("A4:F" & LastLig).SpecialCells(xlCellTypeVisible).Copy Range("A4")
            .Range("I4:J" & LastLig).SpecialCells(xlCellTypeVisible).Copy Range("G4")
            .Range("L4:M" & LastLig).SpecialCells(xlCellTypeVisible).Copy
            Range("J4").PasteSpecial xlPasteValues
            Application.CutCopyMode = False
            Application.EnableEvents = True
         End If
         .Range("A3").AutoFilter
        Range("A3").Select
      End With
      Range("A3").Select
    ActiveWorkbook.Worksheets("P").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("P").Sort.SortFields.Add Key:=Range("B4:B500" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("P").Sort
        .SetRange Range("A3:L500")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A3").Select

   End If
End If
AutoFitSheet
End Sub
 
G

Guest

Guest
Re : Problème avec un code en Vba Excel

Bonjour,

Dans ton code tu as une variable 'LastLig' qui te donnes le numéro de la dernière ligne du tableau de la feuille 'Géneral'. Il faut tester cette variable:

Code:
If LastLig < 4 Then Exit sub

A+
 
G

Guest

Guest
Re : Problème avec un code en Vba Excel

Re,

Oui autofilter est obligatoire pour extraire les lignes idoines.
Code:
 LastLig = .Cells(Rows.Count, "G").End(xlUp).Row
If LastLig < 4 then Exit Sub
.Range("A3").AutoFilter

A+
 
G

Guest

Guest
Re : Problème avec un code en Vba Excel

Re,

A tester,
Code:
 LastLig = .Cells(Rows.Count, "G").End(xlUp).Row
If LastLig < 4 then 
 if .Range("A3").AutoFilterMode then .Range("A3").AutoFilter
 Exit Sub
End if

Si cela ne va pas consulte l'aide VBA Excel sur filterMode et AutoFilterMode. Car sans fichier exemple, les situations étant unique, difficile de ne pas se planter.

A+
 

Discussions similaires

Réponses
7
Affichages
328

Statistiques des forums

Discussions
312 273
Messages
2 086 702
Membres
103 376
dernier inscrit
marionromeo