christophedb
XLDnaute Nouveau
Bonjour à tous les membres,
J'ai des petite notions et suis souvent aidé par l'éditeur de macro.
Pour le travail , j'ai +/- 300 lignes de données que je dois exploiter en fonction de divers critères.
Ma base de données comprend 2 feuilles :
BD1 est la base de données principale :
les lignes sont modifiables, filtrées et/ou supprimée,
de nouvelles lignes peuvent être ajoutées
a chaque ajout ou retrait(s) de la BD1, un numéro est attribué et recalculé de 01 à XX
(cette partie fonctionne).
Je cale sur un tri et un copié:coller que je dois appliquer
je dois pouvoir :
- 1.sélectionner des données affichées en fonction de 3 filtres dans la BD1
- 2.le(s) copier/coller vers un autre feuille BD2
- 3.remettre les filtres à 0 dans BD1 pour afficher toute ma base de donnée
- 4.supprimer la sélection active du "copier/coller" dans BD1
- 5.détecter dans BD1 sur une colonne la présence de cellule vide, sélectionner la (les) lignes vides,
- 6.supprimer ces lignes vides de la base de données.
- 7.enfin renuméroter BD1 de 1 à XX
Rem : j'ai commenté en fonction de mon interprétation du code
Un bonne âme pour m'expliquer mes erreurs et me corriger
Merci
lorsque je lance le prog : il m'indique l'erreur 1004 :
La méthode PasteSpeciale de la classe Range à échoué ... ??
ca me renvoie sur :
Selection.PasteSpecial Paste:=xlValues, Transpose:=False
J'ai des petite notions et suis souvent aidé par l'éditeur de macro.
Pour le travail , j'ai +/- 300 lignes de données que je dois exploiter en fonction de divers critères.
Ma base de données comprend 2 feuilles :
BD1 est la base de données principale :
les lignes sont modifiables, filtrées et/ou supprimée,
de nouvelles lignes peuvent être ajoutées
a chaque ajout ou retrait(s) de la BD1, un numéro est attribué et recalculé de 01 à XX
(cette partie fonctionne).
Je cale sur un tri et un copié:coller que je dois appliquer
je dois pouvoir :
- 1.sélectionner des données affichées en fonction de 3 filtres dans la BD1
- 2.le(s) copier/coller vers un autre feuille BD2
- 3.remettre les filtres à 0 dans BD1 pour afficher toute ma base de donnée
- 4.supprimer la sélection active du "copier/coller" dans BD1
- 5.détecter dans BD1 sur une colonne la présence de cellule vide, sélectionner la (les) lignes vides,
- 6.supprimer ces lignes vides de la base de données.
- 7.enfin renuméroter BD1 de 1 à XX
Rem : j'ai commenté en fonction de mon interprétation du code
Un bonne âme pour m'expliquer mes erreurs et me corriger
Merci
Code:
Sub Bouton2_Cliquer()
' fonction filtre
' autorise un tri sur des colonnes déterminées au préalable
' selection de l'onglet BD1
Sheets("BD1").Select
' Active le filtre désiré
' filtre sur colonnes K, critères modifiables
ActiveSheet.Range("$A$1:$R$300").AutoFilter Field:=11, Criteria1:= _
"critere 1"
ActiveSheet.Range("$A$1:$R$300").AutoFilter Field:=13, Criteria1:= _
"critère 2"
ActiveSheet.Range("$A$1:$R$300").AutoFilter Field:=17, Criteria1:= _
"critère 3"
' le tri effectué
' dans BD1, copier uniquement les valeurs affichée par les filtres
Sheets("BD1").Range("A2:R" & Range("A65536").End(xlUp).Row + 1).SpecialCells(xlVisible).Copy
' une foi copiée supprimer la selection
Selection.EntireRow.Delete
' selection onglet BD2
Sheets("BD2").Activate
' coller toutes les données dans l'onglet travail
' en vérifiant qu'il n'y ai deja pas des données inscrites
' eviter les cellules vides et ne pas écraser les données
' les inscrires à la suite ...
ActiveCell.SpecialCells(xlLastCell).Activate
Cells(ActiveCell.Row + 1, 1).Activate
Selection.PasteSpecial Paste:=xlValues, Transpose:=False
Application.CutCopyMode = False
' selection onglet BD1
' remettre les filtres initiaux
' selectionner toutes les cellules vides de la colonne A
Sheets("BD1").Select
Application.CutCopyMode = False
Selection.ClearContents
ActiveSheet.Range("$A$1:$R$300").AutoFilter Field:=17
ActiveSheet.Range("$A$1:$R$300").AutoFilter Field:=13
ActiveSheet.Range("$A$1:$R$300").AutoFilter Field:=11
Columns("A2:A" & Range("A65536").End(xlUp).Row + 1).Select
Selection.SpecialCells(xlCellTypeBlanks).Select
' pour effacer les lignes correpondantes
Selection.EntireRow.Delete
' renuméroter enfin ma première colonne de BD1 pour actualiser les données
With Sheets("BD1")
NUMDEM = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("A3:A4").AutoFill .Range("A3:A" & NUMDEM)
End With
End Sub
End Sub
lorsque je lance le prog : il m'indique l'erreur 1004 :
La méthode PasteSpeciale de la classe Range à échoué ... ??
ca me renvoie sur :
Selection.PasteSpecial Paste:=xlValues, Transpose:=False
Pièces jointes
Dernière édition: