Couper/coller avec conditions

Bonjour à vous,

J'utilise régulièrement le forum lorsque j'ai des soucis avec excel. En général je parviens à me faire une solution qui me convienne après une recherche.

Dans le cas présent, j'ai tenter plusieurs codes différents en essayant de les adapter mais sans aucun succès

En gros j'ai un onglet qui reprend plusieurs liste déroulantes. je voudrais bien faire un bouton qui fait en sorte que lorsque j'ai le texte "classé" qui apparaît dans mon fichier sur la colonne E (état) la ligne se coupe et colle automatique dans la première ligne libre de l'onglet "dossier classés"

Quand je parle de texte "classé" c'est juste parce qu'il existe plusieurs choix possible dans la liste déroulante avec le mot classé et que toutes ces possibilités peuvent amener au couper/coller.

Je vous joins mon fichier en pièce jointe.

Si l'un d'entre vous pouvait m'aider ça serait top

merci d'avance en tout cas pour le temps pris à la lecture de ce post.

Bonjour,

Pour obtenir une action automatique lors d'un changement de valeur de cellule, il convient d'utiliser une procédure évènementielle de type Change qui se lancera automatiquement à la survenance de l'évènement.

Un conseil préalable : pour un bon fonctionnement avec des tableaux Excel, il est plus que souhaitable d'éviter de prédéfinir des tableaux de lignes vides ! A la création, une ligne se crée d'office, mais par la suite toute inscription sur la ligne suivante (la première au-dessous du tableau) produit l'intégration automatique de cette ligne dans le tableau et l'extension tout aussi automatique à cette ligne des formules ou listes déroulantes existant sur les précédentes.

Et cela évitera des surprises lors de l'exécution des macros !

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim LgnS As Range, TblC As Range, lnS%, lnC%, k%
    If Target.Count > 1 Or Target.Row < 5 Or Target.Column <> 5 Then Exit Sub
    If Target.Value = "Dossier classé" Then
        lnS = Target.Row - 4
        Set LgnS = Me.ListObjects(1).DataBodyRange.Rows(lnS)
        k = LgnS.Columns.Count
        With Worksheets("Dossier classés").ListObjects(1)
            If .Range.Cells(2, 1) <> "" Then
                Set TblC = .DataBodyRange: lnC = TblC.Rows.Count + 1
            Else
                Set TblC = .Range.Rows(2): lnC = 1
            End If
        End With
        TblC.Cells(lnC, 1).Resize(, k).Value = LgnS.Value
        LgnS.EntireRow.Delete
    End If
End Sub

Cette procédure prend place dans le module de la feuille "Suivi Dossier". Elle utilise les tableaux Excel pour identifier la ligne à transférer et la ligne à servir, et procède par affectation de valeurs (c'est à dire sans copier ni coller, ce qui est toujours plus rapide...). Les conditions utilisées pour la définition du tableau cible sont destinées à savoir si le tableau est vide pour servir dans ce cas la 1re ligne, sinon elle sert la ligne suivante (et la façon différente de définir le tableau vise à éviter une erreur éventuelle susceptible de se produire si le tableau est vide et n'a jamais eu de données affectées).

Si cette opération de transfert doit être utilisée à partir d'autres feuilles vers le classement, il y a lieu alors de ne pas multiplier les procédures sur chaque feuille, mais de la définir au niveau classeur pour toutes les feuilles concernées. Le code sera à réajuster dans ce cas, évidemment !

De même si d'autres transferts liés à d'autres mentions doivent être définis, c'est la même procédure au niveau classeur qui se chargera de les réaliser, en identifiant la source, et déterminant la cible.

Cordialement.

Un tout tout grand merci,

J'avoue que j'ai hérité du tableau et n'ai pas regardé spécifiquement à sa dimension.

En tout cas la macro fonctionne nickel même en y ajoutant une autre valeur qui permet le "classement".

Je prends bonne note de la méthode en tout cas et encore merci pour le temps passé dessus

Rechercher des sujets similaires à "couper coller conditions"