XL 2016 Transférer une ligne vers une autre feuille si...

Evictius

XLDnaute Nouveau
Bonjour à tous,

Je m'intéresse depuis quelques semaines aux fonctionnalités que proposent excel. Avec l'aide de précieuses informations que j'ai pu trouvées sur le forum, j'ai réussi à créer un fichier de suivi des CP qui manquait cruellement à mon entreprise.

Je travaille depuis quelques jours sur un fichier de suivi pour mon épouse.
Le fichier comporte 4 feuilles (stock1, stock2, stat et clos).
Il s'agit de dossiers pour lesquels on trouve (entre autres) une date d'ouverture et de clôture ainsi qu'une cellule "clos" avec une liste à 2 choix "oui" et "non". Chaque dossier correspond à une ligne.
Le but est de faire en sorte que lorsqu'une ligne (ou dossier) de la feuille stock 1 ou stock 2 est clos, il soit migré vers la feuille clos.

J'ai essayé une formule VBA avec un bouton à cliquer à la place de la liste déroulante. Cela fonctionne mais pour une seule ligne. Je ne sais donc pas quelle formule indiquée pour que cela s'adapte en fonction de la formule.

Je vous remercie par avance pour vos réponses.

Evictius
 

Oranger

XLDnaute Occasionnel
Bonjour,

Je te conseille de joindre un classeur exemple lors de tes demandes.

Voici ci-joint une proposition qui marche avec un bouton sur les onglets "Stock1" et "Stock2". lorsque l'utilisateur met une croix dans la colonne "Clos" la ligne est déplacée dans l'onglet "Clos"

Cdlt,

Oranger
 

Pièces jointes

  • Classeur_Evictius.xlsm
    20.5 KB · Affichages: 39

phlaurent55

Nous a quittés en 2020
Repose en paix
Bonjour à tous,

Voici ci-joint une proposition qui marche avec un bouton sur les onglets "Stock1" et "Stock2". lorsque l'utilisateur met une croix dans la colonne "Clos" la ligne est déplacée dans l'onglet "Clos"

Le même code ayant subi une cure d'amaigrissement
Code:
Sub test()
With Sheets("Stock1")
For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
  If UCase(.Cells(i, 4)) = "X" Then
  .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:=Sheets("Clos").Range("A" & Sheets("Clos").Range("A65535").End(xlUp).Row + 1)
  .Rows(i).Delete
  'on DEcrémente la variable puisque il y a une ligne de moins dans le tableau
  i = i - 1
  End If
Next i
End With

With Sheets("Stock2")
For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
  If UCase(.Cells(i, 4)) = "X" Then
  .Range(.Cells(i, 1), .Cells(i, 4)).Copy Destination:=Sheets("Clos").Range("A" & Sheets("Clos").Range("A65535").End(xlUp).Row + 1)
  .Rows(i).Delete
  'on DEcrémente la variable puisque il y a une ligne de moins dans le tableau
  i = i - 1
  End If
Next i
End With
End Sub

à+
Philippe
 
Dernière édition:

Si...

XLDnaute Barbatruc
Bonsoir

2 cas, avec des macros courtes selon que l'on veut travailler feuille par feuille ou les 2 en même temps.

Pour information : Option Compare Text, en tête de la fenêtre de codes, permet d'agir aussi bien sur la minuscule x que sur la majuscule X donc d'éviter des UCase(….).
 

Pièces jointes

  • CouperCopierLigne1.xlsm
    23.5 KB · Affichages: 26
  • CouperCopierLigne2.xlsm
    20.6 KB · Affichages: 26

Evictius

XLDnaute Nouveau
Merci à tous pour vos retours.

Entre la date de publication de mon post et la première réponse.
J'avais réussi à avancer quelque peu mais la ligne de "décrémentation" m'a beaucoup aidé.
Mon code était toutefois beaucoup moins élégant que les vôtres !

Depuis, j'ai du me pencher sur un autre problème puisque mon code doit être écrit en BASIC (mais j'essaye d'y arriver seul !)
 

Discussions similaires

Statistiques des forums

Discussions
312 192
Messages
2 086 054
Membres
103 110
dernier inscrit
Privé