XL 2016 création d'une macro

danval

XLDnaute Junior
Bonjour à tous

j'ai des onglets nommés avec des données dedans.

dans la colonne "N" de chaque onglet je retrouve des noms qui correspondent à des noms d'onglets.

je veux pouvoir, en appuyant sur un bouton, que les lignes se déplacent (donc suppression de celle-ci après déplacement et remonter les autres pour ne pas avoir de lignes vident) dans l'onglet correspondant au nom en "H" et ceci pour tous les onglets sauf celui nommé "BASE".
mes tableaux de chaque onglets sont identique en terme de colonnes (même noms même formatage).
les données des tableaux commencent tous à la ligne 3.

c'est une sorte de tri.

merci pour votre aide.

PS : j'ai le fichier suivant que j'avais trouvé sur le net mais trois problèmes:
1 - il fait le travail que sur un onglet alors qu'il faut qu'il analyse tout les onglets.
2 - avant chaque déplacement il efface l'onglet de destination alors que moi il faut que les données reste dedans.
3 - il ne supprime pas la ligne dans l'onglet source
 

Pièces jointes

  • changement d'onglet.xlsm
    21.3 KB · Affichages: 4

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Danval, Paf, bonjour le forum,

C'est normal que ça ne fonctionne pas pour le second choix. Dans la colonne H il y a des lignes avec Déja présent et l'onglet se nomme Déjà présents. Comme on renvoie les données dans l'onglet en comparant avec la colonne H ça ne pouvait pas fonctionner.
Le code modifié :

VB:
Sub Séparer()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TC() As Variant 'déclare la variable TC (Tableau des Choix)
Dim PL As Range 'déclare la variable PL (PLage)
Dim PLV As Range 'déclare la variable PLV (PLage Visible)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim I As Integer 'déclare la variable I (Incrément)

Set OS = Worksheets("Base") 'définit l'onglet source OS
Set PL = OS.Range("A1").CurrentRegion 'définit la plage PL
Set PLV = PL.Offset(1, 0).Resize(PL.Rows.Count - 1, PL.Columns.Count) 'définit la plage PLV
TC = Array("A sortir", "Déjà présents") 'définit le tableau des choix TC
For I = 0 To UBound(TC) 'boucle sur tous les choix du tableau TC
    PL.AutoFilter Field:=8, Criteria1:=TC(I) 'filtre la colonne 8 de la plage PL avec le choix de la boucle comme critère
    Set OD = Worksheets(TC(I)) 'définit l'onglet de destination OD
    Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
    PLV.SpecialCells(xlCellTypeVisible).Copy DEST 'copie les cellules visibles de la plage PLV et les colle dans DEST
Next I 'prochaon choix de la boucle
OS.Range("A1").CurrentRegion.Offset(1, 0).Clear 'efface les données de l'onglet source OS
MsgBox "Travail terminé." 'message
End Sub

je pense que tu devrait utiliser une liste de validation de données avec les deux choix dans la colonne H pour éviter les erreurs...

Le fichier :
 

Pièces jointes

  • Danval_ED_v01.xlsm
    22 KB · Affichages: 3

danval

XLDnaute Junior
Bonjour,

Merci pour ce code qui fonctionne très bien mais il y a quelque erreurs de compréhension :

j'ai modifié le fichier car je me suis trompé sur les noms de feuilles.

pour info le fichier va servir à l'évolution d'un travail par le passage dans différents postes.
les postes sont les nom des feuilles
quand je voudrais basculer un travail d'un poste à un autre je change la valeur dans la colonne "H" et je clic sur le bouton pour faire changer la ligne de feuille. je dois pouvoir faire des changements dans différentes feuilles et lancer la macro à la fin.

1 - la feuille "infos" est celle qu'il ne faut pas toucher car elle contient mais tableaux donc ne pas l'analyser dans la macro.
2 - il faudrait que la macro s'applique avec sur toute les feuilles c'est à dire de prendre comme base chaque feuille les unes après les autres et appliquer la macro.
en effet il se peut qu'une ligne dans l'onglet "A sortir" passe dans l'état "Déjà présents" donc il faut que l'onglet "Déjà présents" soit analysé pour changer la ligne de feuille.
3 - pour la suppression des lignes déplacée il faut le faire au fur et à mesure:
- on change une ligne de feuille.
- on supprime la ligne de la feuille d'origine.
- on décale le reste des ligne d'une ligne vers le haut.
comme cela une ligne qui en "H" porte le nom de la feuille ou elle se trouve reste dedans
si une ligne dont la valeur dans "H" ne correspond pas à un nom de feuille ne bouge pas

à l'avance merci pour ton travail qui de plus est très bien commenté cela va me permettre d'avancer dans ma compréhension du VBA
 

Pièces jointes

  • Danval_ED_v01.xlsm
    21.7 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
312 202
Messages
2 086 180
Membres
103 152
dernier inscrit
Karibu