Créer VBA excel couper coller dans une autre feuille

Sybille - 21 sept. 2024 à 15:48
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 - 21 sept. 2024 à 16:03

Bonjour,

Je crée un fichier excel de prêt de matériel. 

J'ai déjà bien avancé, à mon tout petit niveau, mais je bloque à présent.

J'ai une feuille "Prêts en cours" avec 6colonnes. La dernière est l'état du prêt (En cours, Rendu, Retard).

Je voudrais que quand je sélectionne la case "rendu" dans ma ligne de prêt, cette ligne soit coupée et collée dans la feuille suivante "Archive"

Quelqu'un peut-il m'aider ? 

Merci d'avance.

Sybille.
Windows / Edge 128.0.0.0

A voir également:

2 réponses

Bruno83200_6929 Messages postés 282 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 23 octobre 2024 57
21 sept. 2024 à 15:56

Bonjour,

Tu peux utiliser une macro VBA.

Appuie sur Alt + F11 pour ouvrir l'éditeur VBA.


Dans l'éditeur VBA, fais un clic droit sur le nom de ton classeur dans le panneau de gauche et choisis Insérer > Module.

Ajouter le code VBA suivant :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim wsSource As Worksheet
    Dim wsDest As Worksheet
    Dim lRow As Long
    
    ' Définir les feuilles source (Prêts en cours) et destination (Archive)
    Set wsSource = ThisWorkbook.Sheets("Prêts en cours")
    Set wsDest = ThisWorkbook.Sheets("Archive")
    
    ' Vérifier si la modification est dans la colonne 6 (État du prêt)
    If Not Intersect(Target, wsSource.Columns(6)) Is Nothing Then
        ' Si la cellule contient "rendu"
        If Target.Value = "rendu" Then
            ' Trouver la première ligne vide dans la feuille Archive
            lRow = wsDest.Cells(wsDest.Rows.Count, 1).End(xlUp).Row + 1
            
            ' Copier la ligne dans Archive
            wsSource.Rows(Target.Row).Copy Destination:=wsDest.Rows(lRow)
            
            ' Supprimer la ligne de la feuille Prêts en cours
            wsSource.Rows(Target.Row).Delete
        End If
    End If
End Sub

Appuie sur Ctrl + S pour enregistrer ton classeur en tant que fichier Excel prenant en charge les macros (extension .xlsm), puis ferme l'éditeur VBA.

Retourne dans ton fichier Excel et modifie l'état d'un prêt en le marquant comme "rendu". La ligne devrait automatiquement être déplacée vers la feuille "Archive".

Ce script détecte toute modification dans la colonne d'état (colonne 6 - si c'est une autre modifie) et déplace la ligne vers l'onglet "Archive" si l'état est changé en "rendu".


0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
21 sept. 2024 à 16:03

Bonjour,

je te conseille de créer un fichier exemple et le joindre à la discussion.

Un code VBA n'est pas un code à l'a peu près si on te fourni un code pour une page et une colonne bien précise mieux vaut travailler sur un fichier concret.


0