Bonjour
Après deux jours de galère, je me décide à venir sur le site car j'ai bon espoir qu'une bonne âme acceptera de me filer un coup de mains ! En effet, complètement autodidacte sur le sujet et n'ayant pas fait de macro depuis 3 ans, je m'y remet et c'est compliqué pour moi ! J'ai parcouru le forum en amont de mon message et j'ai vu des post sur ce sujet et j'ai bien essayé d'adapter le code à mon besoin mais soit ça ne fait pas complètement ce que je veux, soit ça bug !
Je sais que pour un expert VBA ce sera de la rigolade mais moi j'en chie ! Ca m'intéresse et j'ai envie de comprendre et d'avancer dans mon cheminement mais seule c'est pas évident ! Besoin d'expertise pour comprendre où le bas blesse !
Voilà, j'ai un fichier Excel avec plusieurs feuilles, dont deux sur lesquelles je souhaite agir.
La 1ère se nomme "Plan documentaire", la seconde se nomme "Archives". Les deux comportent un tableau de même structure.
Je souhaite simplement créer une macro que j'affecterai à un bouton pour permettre aux utilisateurs d'archiver dans le tableau de l'onglet "Archives" toutes les lignes présentant le critère "Archivé" en colonne I du tableau de l'onglet "Plan documentaire". Les lignes ainsi copiées dans l'onglet "Archives" devront être supprimées du tableau de l'onglet "Plan documentaire".
Avec un message box indiquant si c'est possible le nombre de lignes archivées.
Idéalement j'aimerai avoir la possibilité d'un deuxième bouton macro sur la feuille "Archives" pour restaurer une ligne particulière (archivée par erreur par exemple) vers le tableau d'origine sur la feuille "Plan documentaire" !
Mes difficultés aujourd'hui avec les différents codes testés
- soit ça ne colle pas les lignes au bon endroit (en dessous de mon tableau existant et pas dedans.
- soit ne copie que la ligne de titre mais pas les lignes contenant le critère "Archivés"
- soit copie bien mais affiche l'erreur VALEUR car les lignes copiées comportent des formules
- soit il ne supprime pas les lignes dans l'onglet source
Bref, je me sens nulle en écrivant tout cela !
Voici le dernier bout de code utilisé et le fichier en pièce jointe :
Copie de FO_Référentiel Documentation_20220523_v3.xlsm
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 Sub Transfert() Dim LastLig As Long Dim cDest As Range Application.ScreenUpdating = False With ThisWorkbook 'cDest: La celllule de destination: première cellule vide de la colonne A de Archives With .Worksheets("Archives") Set cDest = .Cells(.Rows.Count, "A").End(xlUp)(2) End With With .Worksheets("Plan documentaire") 'Enlève l'éventuel filtre automatique .AutoFilterMode = False 'LastLig, ligne de la dernière cellule remplie de colonne A de Plan documentaire LastLig = .Cells(.Rows.Count, "I").End(xlUp).Row 'On fait un filtre automatique sur la colonne I de Plan documentaire avec comme critère "Archivé" .Range("I11:I" & LastLig).AutoFilter field:=1, Criteria1:="Archivé" 'Si au moins une ligne résultat du filtre (en plus de la ligne 1 des titres) If .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then With .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).EntireRow 'On copie toutes les lignes visibles vers cDest (sauf la ligne des titres) .Copy cDest 'on supprime toutes les lignes visibles (sauf la ligne des titres) .Delete End With End If 'on vide notre variable cDest Set cDest = Nothing 'On enlève le filtre automatique .AutoFilterMode = False End With End With End Sub







Répondre avec citation





Partager