Déplacer des lignes dans Excel en fonction de cases non vides

Bonjour,

J'avais déjà posté un sujet il y a quelques jours sur le sujet, malheureusement je n'arrive pas à "maitriser" suffisamment le code pour pouvoir m'en servir dans un nouvel Excel. Je souhaite que lorsque je remplis une case au sein d'une colonne dans mon Excel (ici par exemple la colonne "TRF ENVOYE AU CLIENT"), la ligne soit transférée dans l'onglet "T - attente client".

Dans mon précédent fichier, on m'avait conseillé le code suivant mais j'ai du mal à le décortiquer (avec mes compréhensions en vert):

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim iRow%, iCol%, iOK%
'
If Not Intersect(Target, Union(Columns("N"), Columns("R"))) Is Nothing Then = Lettre de colonne
Application.EnableEvents = False
iRow = Target.Row
iCol = Cells(1, Columns.Count).End(xlToLeft).Column
If Target.Column = 14 And Target <> "" Then iOK = 1 = Numéro de colonne + condition case remplie
If Target.Column = 17 And IsDate(Target) Then iOK = 2 = Numéro de colonne + condition date renseignée
If iOK > 0 Then
With Worksheets(IIf(iOK = 1, "Dossiers en attente", "Dossiers activés")) = Si condition 1, bascule dans l'onglet "Dossier en attente", si condition 2, bascule dans l'onglet "dossiers activés"
.Range("A" & .Range("A" & Rows.Count).End(xlUp).Row + 1).Resize(1, iCol).Value = Range("A" & iRow).Resize(1, iCol).Value
End With
Rows(iRow).Delete shift:=xlUp
End If
Application.EnableEvents = True
End If
'
End Sub

J'ai donc essayé d'obtenir une "nouvelle" formule en changeant les champs qui apparaissent en vert mais cela ne donne rien dans mon nouveau fichier. Quels sont les paramètres qu'il me reste à ajuster pour pouvoir réutiliser la formule dans mon fichier ?

Merci d'avance de votre aide et belle journée,

Lucile

Salut Lucile,

désolé, c'est vrai que je mets rarement des commentaires dans le code.
Expose TOUS les cas où tu as besoin de déplacer une ligne, feuille par feuille (départ-arrivée) et, moi ou un autre, nous te ferons un code avec explications.


A+

Bonsoir,

Merci beaucoup de ta réponse ! Je détaille donc ci-dessous, mais désolée cela risque d'être un peu long.

Dans mon premier fichier il y a trois "facteurs" :

  • Dans l'onglet "Dossiers en cours de traitement":
    • Lorsque la colonne "N" est remplie, je souhaite que la ligne bascule dans l'onglet "Dossiers en attente"
    • Lorsque la colonne "U" est remplie (date), je souhaite que la ligne bascule dans l'onglet "Dossiers activés"
  • Dans l'onglet "Dossiers en attente", lorsque la colonne "S" est remplie (date), je souhaite que la ligne bascule dans l'onglet "Dossiers en cours de traitement".

Dans mon second fichier il y a quatre "facteurs" :

  • Dans l'onglet "T - demandes reçues", lorsque la colonne "F" est remplie (date), je souhaite que la ligne bascule dans l'onglet "T - attente client"
  • Dans l'onglet "T - attente client", lorsque la colonne "J" est remplie (date), je souhaite que la ligne bascule dans l'onglet "T - dossiers traités"
  • Dans l'onglet "SELARL - demandes reçues", lorsque la colonne "F" est remplie (date), je souhaite que la ligne bascule dans l'onglet "SELARL - attente client"
  • Dans l'onglet "SELARL - attente client", lorsque la colonne "G" est remplie (date), je souhaite que la ligne bascule dans l'onglet "SELARL - dossiers traités"

A chaque fois que la ligne bascule dans un autre onglet, elle est supprimée de son onglet préalable.

Voilà j'espère que c'est clair et merci d'avance !

Bonne soirée,

Lucile

Salut Lucile,

tes fichiers de retour...
Pour effectuer des tests valables, n'oublie pas ABSOLUMENT de compléter la cellule en [A:A] sur laquelle se base le calcul de ligne-cible pour la copie d'une ligne d'une feuille à l'autre... chose que je ne me suis pas amusé à faire !
Teste surtout le fichier "Fichier_dossiers_reçus", vrai sac de noeuds où les en-tête de colonnes ont un malin plaisir à ne pas correspondre d'une feuille à l'autre.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'
Dim iRow%, iOK%
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
iRow = Target.Row
Select Case Sh.Name
    Case "Dossiers en cours de traitement"
        If Not Intersect(Target, Sh.Columns("N")) Is Nothing Then If Sh.Range("N" & iRow).Value <> "" Then iOK = 1
        If Not Intersect(Target, Sh.Columns("U")) Is Nothing Then If IsDate(Sh.Range("U" & iRow).Value) Then iOK = 2
    Case "Dossiers en attente"
        If Not Intersect(Target, Sh.Columns("S")) Is Nothing Then If IsDate(Sh.Range("S" & iRow).Value) Then iOK = 3
End Select
'
If iOK > 0 Then
    Sh.Columns.Hidden = False
    Sh.Columns.AutoFit
    With Worksheets(Choose(iOK, "Dossiers en attente", "Dossiers activés", "Dossiers en cours de traitement"))
        .Columns.Hidden = False
        .Columns.AutoFit
        Select Case iOK
            Case 1
                .Range("A" & .Range("A" & Rows.Count).End(xlUp).Row + 1).Resize(1, 14).FormulaLocal = Sh.Range("A" & iRow).Resize(1, 14).FormulaLocal
                .Range("P" & .Range("A" & Rows.Count).End(xlUp).Row).Resize(1, 4).FormulaLocal = Sh.Range("O" & iRow).Resize(1, 4).FormulaLocal
            Case 2
                .Range("A" & .Range("A" & Rows.Count).End(xlUp).Row + 1).Resize(1, 14).FormulaLocal = Sh.Range("A" & iRow).Resize(1, 14).FormulaLocal
                .Range("O" & .Range("A" & Rows.Count).End(xlUp).Row).Resize(1, 3).FormulaLocal = Sh.Range("S" & iRow).Resize(1, 3).FormulaLocal
            Case 3
                .Range("A" & .Range("A" & Rows.Count).End(xlUp).Row + 1).Resize(1, 14).FormulaLocal = Sh.Range("A" & iRow).Resize(1, 14).FormulaLocal
                .Range("O" & .Range("A" & Rows.Count).End(xlUp).Row).Resize(1, 4).FormulaLocal = Sh.Range("P" & iRow).Resize(1, 4).FormulaLocal
        End Select
    End With
    Sh.Rows(iRow).Delete shift:=xlUp
End If
'
Application.EnableEvents = True
'
End Sub

À part ça, les codes sont fort semblables.


A+

Bonjour,

Pour le fichier de transfert, ca marche sauf sur les SELARL, j'ai l'impression que c'est parce qu'il manque un espace dans le titre de l'onglet dans la formule, mais même lorsque je le modifie ca ne marche pas...

Pour le fichier des dossiers reçu, ca marche à la perfection sauf que.... C'est moi qui m'étais plantée en te ré-envoyant le fichier : les noms de colonne sont bien les mêmes dans dans mon "dossiers activés" source. Du coup avec ton nouveau code, cela fait tout planter

Petite question d'ailleurs : la dernière fois tu avais utilisé une macro dans la feuille et ce coup ci sur l'ensemble du fichier : est-ce-que ca change quelque chose ?

Dans tout les cas merci beaucoup de ton aide !

Lucile

Salut Lucile,

j'avais oublié d'enlever les macros situées dans les modules des feuilles.
J'ai utilisé 'ThisWorkbook' pour ne pas copier dix fois quasi la même chose...


A+

Re-bonjour,

Merci pour ces fichiers ! Cependant je ne sais pas si c'est un problème de version ou autre, mais aucune des macros ne semble fonctionner sur mon poste. Aurais-je une manipulation à faire avant ?

Merci,

Lucile

Bonjour et bonnes fêtes !

J'ai tenté d'ouvrir à nouveau les fichiers mais même sur une autre version cela ne fonctionne pas. Pourriez-vous m'aider à trouver l'origine du problème ?

Merci :)

Lucile

Salut Lucile,

ce sont les mêmes fichiers que je t'avais envoyés ?


A+

Oui, ceux de ton message du 16/12 à 8h32

Bonjour,

à lire j'ai l'impression que tu peux simplifier considérablement le fonctionnement.
Si tu ajoutes une colonne avec une simple formule indiquant l'état, il te suffit de filtrer dessus pour retrouver l'équivalent de tes 3-4 feuilles.
Plus besoin de faire valser les lignes avec les risques inhérents.
eric

Bonjour Eric,

Malheureusement, ce n'est pas ce que souhaite mon client. Cela s'explique notamment parce qu'il s'agit d'un fichier partagé sur lequel il est difficile d'avoir des utilisations parallèle avec les filtres. Par ailleurs, le nombre de ligne est très importants, d'où la nécessité de l'onglet "dossiers activés" qui permet de conserver les archives sans alourdir la vision sur les autres onglets.

Merci cependant de ta suggestion !

Bonne journée,

Lucile

Salut Lucile,
Salut Eriiic,

je les ai rechargés sur un Excel 2013, pas de souci...
J'imagine que les macros sont activées, bien sûr...
Cela étant, manque-t-il quelque chose du fait que ce sont des fichiers partagés, comme je le lis. Je 'y connais rien dans ce domaine des fichiers partagés...

Déso, je ne vois pas comment t'aider...

Merci beaucoup ta réponse m'a permis de comprendre la difficulté !

Pour information si quelqu'un rencontre le même problème, il faut d'abord enregistrer le fichier dans un format classique pour pouvoir activer les macros, avant de l'enregistrer en format partagé. Si on enregistre directement en format partagé, l'activation ne fonctionne plus correctement derrière. En tout cas c'était le souci sur mon poste, mais je ne saurais pas expliquer le pourquoi du comment

Merci beaucoup à tous de votre aide !!

Belle journée et bonnes fêtes

Rechercher des sujets similaires à "deplacer lignes fonction cases vides"