Excel vba

Résolu
lex -  
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un souci sous VBA qui est le suivant :
Je travaille sur 2 feuilles ! La 1ere feuille est une base de donnée, et la deuxieme feuille sera une extraction de cette base qui est faite par la macro!!

On rentre dans une case de la feuille2 [exemple : cells(1,1)] une valeur. Cette valeur est alors cherchée dans la colonne A de la 1ere feuille, et copier toutes les lignes comportant cette valeur dans la feuille 2.
On peut passer par les filtres mais le but de la macro et d'automatiser la fonction.

Pour copier les lignes j'ai trouvé un bout de programme sous le net pour copier les cellules :
'
Sub ess()

Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long

Sheets("feuil2").Activate ' feuille de destination

Col = "a" ' colonne données non vides à tester'
NumLig = 2
With Sheets("feuil1") ' feuille source'
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 3 To NbrLig
If .Cells(Lig, Col).Value <> "" Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
Sheets("feuil2").Cells(NumLig, 1).Insert Shift:=xlDown
End If
Next
End With

End Sub

Merci pour votre aide
Alex

3 réponses

gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
bonjour,

En modifiant ta macro ainsi cela devrait faire ce que tu veux
Sub ess()

Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long

Sheets("feuil2").Activate ' feuille de destination

Col = "A" ' colonne données non vides à tester'
NumLig = 2
' effacement précédente copie
Rows(NumLig).Resize(Cells.SpecialCells(xlCellTypeLastCell).Row).Delete
With Sheets("feuil1") ' feuille source'
    NbrLig = .Cells(65536, Col).End(xlUp).Row
    For Lig = 3 To NbrLig
        If .Cells(Lig, Col).Value = Cells(1, 1).Value Then
            NumLig = NumLig + 1
            .Cells(Lig, Col).EntireRow.Copy Destination:=Cells(NumLig, 1)
        End If
    Next Lig
End With
End Sub

Lorsque tu écris .Cells tu es dans la feuille définie par with
Lorsque tu écris Cells tu es dans la feuille définie par activate
0
alex_az Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
Merci, c'est exactement ce que je voulais.

J'aurais une autre question enfin deux même :

-Quand je copie les lignes de la feuil1 vers la feuil2, la macro peut-elle supprimer certaines colonnes? (ex col D et H)

- Enfin, je dois faire une mise en page qui reprend la variable présente dans la cells(1,1), celà est - il possible? ou bien doit-on obligatoirement l'a rentrer manuellement?

Merci d'avance,
Alex
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
bonjour

-Quand je copie les lignes de la feuil1 vers la feuil2, la macro peut-elle supprimer certaines colonnes? (ex col D et H)

Il faut remplacer cette ligne :
            .Cells(Lig, Col).EntireRow.Copy Destination:=Cells(NumLig, 1)

par
            .Cells(Lig, Col).resize(1, 3).Copy Destination:=Cells(NumLig, 1)  ' colonnes A:C
            .Cells(Lig, 5).resize(1, 3).Copy Destination:=Cells(NumLig, 4)    ' colonnes E:G
            .Cells(Lig, 9).resize(1, 245).Copy Destination:=Cells(NumLig, 7)

en remplaçant 245 par ton nombre de colonnes utilisées entre I et la fin à droite.

- Enfin, je dois faire une mise en page qui reprend la variable présente dans la cells(1,1), celà est - il possible? ou bien doit-on obligatoirement l'a rentrer manuellement?

Je ne comprends pas ta question : où veux-tu mettre A1 car il est déjà présent sur toute la colonne A ?
0