macro deplacement de lignes d'une feuille a l'autre...

fiona31

XLDnaute Nouveau
Bonjour à tous,

Bonjour à tous,

Je me permets de poster ici car après maintes recherches je n'arrive pas à résoudre mon problème.

J'ai 3 feuilles de calcul. Je souhaiterai:

• Déplacer des lignes d'une feuille ("Clients") a une autre ("dossier clos") sous condition (Paiement="OUI") (copier + supprimer la ligne dans la feuille source)
• Faire en sorte que lors d'une mise à jour suivante le déplacement de la ligne se fasse à la suite des lignes précédemment copiées
• Faire un filtre sur la seconde feuille en fonction des dates de facturation
• Copier des lignes de la feuille ("Clients") sur une feuille (dossiers transmis) sous condition (Observation=Dossier transmis) sans supprimer la ligne source
• Cerise sur mon gâteau si je comprendre comment est faite la liste sur les tableaux de l'onglet "tableau de bord"…alors là je vous serez extrêmement reconnaissante !

Pour l'instant j'ai une macro qui me copie la ligne d'une feuille à l'autre mais je n'arrive pas à le faire à la suite des insertions précédentes.

J'espère être clair, sinon n'hésitez pas à me le dire…

Merci d'avance pour votre aide.
 

Fichiers joints

Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : macro deplacement de lignes d'une feuille a l'autre...

Bonjour fiona31,

Testez la macro suivante pour déplacer les lignes 'payée ' vers la feuille 'Dossiers clos' puis trier les lignes de la feuille 'Dossiers clos' par date de facturation.

Code:
Sub Deplacer_paiement()

Dim Lig As Long, Col As String
Dim NbrLig As Long, NumLig As Long
Dim xRg As Range
  
Sheets("Dossiers clos").Activate
Col = "G"
NumLig = Cells(Rows.Count, 2).End(xlUp).Row
If NumLig < 7 Then NumLig = 6
With Sheets("Clients")
    NbrLig = .Cells(.Rows.Count, Col).End(xlUp).Row
    For Lig = 7 To NbrLig
        If .Cells(Lig, Col).Value = "OUI" Then
            NumLig = NumLig + 1
            .Cells(Lig, Col).EntireRow.Copy Destination:=Sheets("Dossiers clos").Cells(NumLig, 1).EntireRow
        End If
    Next
    NbrLig = .Cells(.Rows.Count, Col).End(xlUp).Row
    For Lig = NbrLig To 7 Step -1
        If .Cells(Lig, Col).Value = "OUI" Then
            .Cells(Lig, Col).EntireRow.Delete
        End If
    Next
End With
Set xRg = Range(Cells(7, "B"), Cells(NumLig, "H"))
xRg.Sort key1:=xRg(1, 2), order1:=xlAscending, Header:=xlNo, _
            key2:=xRg(1, 1), order2:=xlAscending
End Sub
 

fiona31

XLDnaute Nouveau
Re : macro deplacement de lignes d'une feuille a l'autre...

Merci Mapomme pour votre réponse aussi rapide...

j'ai testé votre macro et j'ai un message d'erreur a la fin de la macro:

"xRg.Sort key1:=xRg(1, 2), order1:=xlAscending, Header:=xlNo, _
key2:=xRg(1, 1), order2:=xlAscending"

pourriez vous m'expliquez cette ligne, svp....

merci pour votre aide

Fiona
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : macro deplacement de lignes d'une feuille a l'autre...

Bonjour Fiona31,
et j'ai un message d'erreur a la fin de la macro
Peut se produire si aucun enregistrement à déplacer et aucun enregistrement sur la feuille des dossiers clos. corrigé dans la version jointe.

"xRg.Sort key1:=xRg(1, 2), order1:=xlAscending, Header:=xlNo, _
key2:=xRg(1, 1), order2:=xlAscending"

pourriez vous m'expliquez cette ligne, svp....
Trie la zone xRg avec comme premier critère xRg(1, 2,) du plus petit au plus grand (xlAscending) et avec, comme deuxième critère xRg(1, 1), du plus petit au plus grand (xlAscending), et en indiquant que la zone n'a pas d'en-tête de colonne (Header:=xlNo) puisque le tri commence à la ligne 7.
xRg(1, 2) désigne l'élément de la zone xRg correspondant à la 1ière ligne et 2ième colonne (colonne des dates de facturation)
xRg(1, 1) désigne l'élément de la zone xRg correspondant à la 1ière ligne et 1ière colonne (colonne des noms de client)
 

Fichiers joints

fiona31

XLDnaute Nouveau
Re : macro deplacement de lignes d'une feuille a l'autre...

ça fonctionne....c'est vraiment génial! j'en suis ravie... Merci beaucoup Mapomme aussi pour vos explications!

cependant comment faire en sorte que dans un même temps on puisse mettre a jours le dossier "dossiers transmis"? faut il copier certaines ligne de la macro comme cela:

Sheets("Dossier transmis").Activate
Col = "H"
NumLig = Cells(Rows.Count, 2).End(xlUp).Row
If NumLig < 7 Then NumLig = 6
With Sheets("Clients")
NbrLig = .Cells(.Rows.Count, Col).End(xlUp).Row
For Lig = 7 To NbrLig
If .Cells(Lig, Col).Value = "Dossier transmis" Then
NumLig = NumLig + 1
.Cells(Lig, Col).EntireRow.Copy Destination:=Sheets("Dossiers transmis").Cells(NumLig, 1).EntireRow
End If
Next
NbrLig = .Cells(.Rows.Count, Col).End(xlUp).Row
For Lig = NbrLig To 7 Step -1
If .Cells(Lig, Col).Value = "OUI" Then
.Cells(Lig, Col).EntireRow.Delete
End If
Next
End With
Set xRg = Range(Cells(7, "B"), Cells(NumLig, "H"))
xRg.Sort key1:=xRg(1, 2), order1:=xlAscending, Header:=xlNo, _
key2:=xRg(1, 1), order2:=xlAscending


....
encore des questions:

Comment fait on pour les lancer en même temps dans une seule mise a jour?
si les dates sur la feuille "Clients" ne sont pas filtrer ... comment fait on pour les filtrer (classer par date de facturation) aussi a la fin du programme de la macro?

question subsidiaire: savez vous comment on fait pour mettre en place une liste déroulante sur quelques lignes comme sur la feuille "tableau de bord"?

merci pour votre temps, c'est vraiment très sympa d'avoir des personnes qui s'entraident de la sorte...merci merci beaucoup!
 

Fichiers joints

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : macro deplacement de lignes d'une feuille a l'autre...

Bonsoir fiona31,

Comme vous ne voulez pas déplacer les dossiers transmis mais simplement les copier la macro est différente. En effet si on fait une 2ième mise à jour, on recopiera les anciens dossiers déjà copiés anisi que les nouveaux. Il faut donc vider 'Dossiers transmis' à chaque mise à jour pour ne pas avoir de doublons. La macro est donc légèrement différente de la 1ière (remise à zéro à chaque fois et on ne détruit pas les lignes dans 'Clients' une fois les enregistrements copiés dans 'dossiers transmis' selon votre demande).

  1. J'ai ôté le tri dans chacune des macros et fait une procédure à part ayant comme paramètre le nom de la feuille à trier.
  2. J'ai changé la colonne pour chercher la dernière ligne (on prend désormais la colonne B = nom des clients)
  3. Une procédure lance toute les autres.
    Sub ToutFaire()
    Deplacer_paiement
    Copier_transmis
    Trier "Clients"
    Trier "dossiers clos"
    Trier "dossiers transmis"
    End Sub
  4. Les trois feuilles ont leur en-têtes à la même position.
  5. Des commentaires ont été insérés dans les codes.
Les codes sont dans le module ayant pour nom: CopierDeplacerTrier

Et maintenant dodo. Bonne nuit:)
 

Fichiers joints

Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : macro deplacement de lignes d'une feuille a l'autre...

(re)Bonsoir,
J'avais oublié:
question subsidiaire: savez vous comment on fait pour mettre en place une liste déroulante sur quelques lignes comme sur la feuille "tableau de bord"?
Voir le fichier joint qui fait défiler une fable de La Fontaine (avec des explications)
Et maintenant c'est décidé, au dodo! Bonne nuit :)
 

Fichiers joints

Dernière édition:

fiona31

XLDnaute Nouveau
Re : macro deplacement de lignes d'une feuille a l'autre...

Merci pour votre réponse aussi rapide....effectivement tout fonctionne très bien.

Si on part du principe qu'il peut y avoir une mauvaise saisie. je m’explique si par exemple la personne qui gere le fichier met dans la colonne paiement de la feuille "clients" oui et dans la colonne observation de cette même feuille Dossier transmis... ce qui est normalement impossible dans mon cas.

Il va donc y avoir une erreur car dans la feuille "dossiers clos" on va se retrouver avec un dossier transmis dans la feuille "Dossiers clos" et impossibilité pour la macro de checker ce dossier pour vérifier les erreurs de saisies et de corriger lors de la mise a jour.

Ma question ici:

  • Comment peut on faire?


si les lignes ou il y a 'dossier transmis' dans la feuille "clients" peuvent être supprimées une fois copiées dans la feuille "Dossiers transmis" est-ce alors la même macro que celle de Deplacer_paiement()?

et si par exemple on saisie "dossier transmis" ou "dossiers transmis" a la place de "Dossier transmis" seuls les ligne avec "Dossier transmis" seront transféré vers la feuille "Dossiers transmis", Non? comment peut on faire pour éviter cela avec une macro? même si je suppose qu'on peut créer un menu déroulant pour empêcher toutes mauvaises saisie...

et pour ma question subsidiaire....hi hi hi...trop complexe?

Merci a tous pour votre aide et surtout a Mapomme qui n'a pas hésité a se dévouer pour m'aider...

Fiona
 

fiona31

XLDnaute Nouveau
Re : macro deplacement de lignes d'une feuille a l'autre...

houps...j'avais pas vu merci encore Mapomme pour la question subsidiaire Ouiiii c'est ca oula la quelle mauvaise langue je fais....hi hi hi...
 

fiona31

XLDnaute Nouveau
Re : macro deplacement de lignes d'une feuille a l'autre...

après avoir regarder votre fichier joint ... je me demander ou mettre la fable de la fontaine....

donc la question est la suivante: après avoir créée la barre de défilement comment on fait pour l'associer au texte de la fable ou a plusieurs lignes d'une feuille? :rolleyes:

Merci Merci Mapomme

et tres Bonne nuit...
 
Dernière édition:

fiona31

XLDnaute Nouveau
Re : macro deplacement de lignes d'une feuille a l'autre...

alors....je rectifie message envoyé en même temps..très bonne explication merci prof Mapomme... ca fait bizarre a dire "prof Mapomme" hi hi hi
 
Dernière édition:

Discussions similaires


Haut Bas