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 !
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 SubCette 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