mouvement de ligne conditionnel

vevzz

XLDnaute Nouveau
Bonjour le forum

alors, j' ai un fichier dans lequel je recense toutes les personne qui me contact dans le cadre de mon boulot.
Ce fichier contient deux feuilles nommées "Contact" et "Dossier". Dans la première je rentre toutes les personnes qui me contact, dans une colonne (E) j'entre l’état de leur dossier c'est a dire "en cours" "suspendu" "hors cadre" et "Traité".
Des que l’état du dossier devient "Traité" la ligne passe dans la feuille "Dossier". Si pour X ou Y raison l’état du dossier change alors la ligne disparait de "Dossier". De plus, quelle que soit la ligne de départ dans la feuille "Contact" les lignes se suivent dans "Dossier", mais dans le même ordre que dans la feuille d'origine. A ce niveau les transferts d'une feuille à l'autre se font très bien, mais dans ma feuille "Dossier" je complète les informations sur chaque personne. il y a donc plus de colonnes et c'est justement le problème.

Par exemple dans le fichier joint, les dossiers de Mr TITI et Mr Rogne sont "Traité". Dans la feuille "Dossier" j'ai ajouté les informations complémentaires. Mais quand le dossier de Mr BON devient "Traité" il s’intercale entre les deux précédent dans la feuille "Dossier" mais les informations complémentaires ne bougent pas, du coup les compléments concernant Mr TITI se retrouvent face à Mr BON, C'est ballot.
Ma question est donc : Est il possible de décaler les informations complémentaires en même temps que les personnes qu'elles concernent dans la feuille "Dossier" ? Oui oui, c'est plus clair avec le fichier joint, enfin j’espère.

Dans l'espoir de trouver un "Excelator" (ou un "Excelatrice" ça sonnait juste moins bien) qui pourra m'éclairer.
Merci beaucoup, ne serait-ce que pour l'effort de compréhension. ;-)
 

Pièces jointes

  • exemple2.xlsm
    86.9 KB · Affichages: 59
  • exemple2.xlsm
    86.9 KB · Affichages: 59
  • exemple2.xlsm
    86.9 KB · Affichages: 59

pedrag31

XLDnaute Occasionnel
Re : mouvement de ligne conditionnel

Bonjour Vevzz, Bonjour le forum,

Vive le Comminges, ça m'a fait sourire de voir toutes ces localités de par chez nous ;)

Je comprends que tes copies d'informations dans la feuille "dossier" se font avec des formules... Est-ce qu'on peut envisager de faire la copie avec une macro sur l'évènement "Worksheet_Change" ? Ce sera plus facile à coder je pense mais il faudra activer les macros pour l'utiliser...

En attendant ta réponse...

Bonne journée :)
 

vevzz

XLDnaute Nouveau
Re : mouvement de ligne conditionnel

Bonjour Pedrag31 et merci pour la réactivité.

Pas de soucis pour les macros, elles sont déjà activées pour plusieurs éléments du fichier. Concernant le tri, j avais essayer la macro suivante qui ne fonctionne pas très bien (Message d'erreur quand je rentre une nouvelle ligne dans "Contact")

Dans feuille "Contact":

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Intersect(Target, Columns(5)).Value = "Traité" Then
DlgnT = Sheets("Dossier").Cells(Rows.Count, 2).End(xlUp).Row
Target.EntireRow.Copy Destination:=Sheets("Dossier").Cells(DlgnT + 1, 1)
End If
End If
End Sub

Dans feuille "Dossier":

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Intersect(Target, Columns(5)).Value <> "Traité" And _
Intersect(Target, Columns(5)).Value <> "" Then
DlgnP = Sheets("Contact").Cells(Rows.Count, 2).End(xlUp).Row
Target.EntireRow.Delete
End If
End If
End Sub

Et voila encore merci. C'est marrant de discutée via le forum alors que si ça trouve on est a 100 m.
 

vevzz

XLDnaute Nouveau
Re : mouvement de ligne conditionnel

Bonjour Pedrag31 et merci pour la réactivité.

Pas de soucis pour les macros, elles sont déjà activées pour plusieurs éléments du fichier. Concernant le tri, j avais essayer la macro suivante qui ne fonctionne pas très bien (Message d'erreur quand je rentre une nouvelle ligne dans "Contact")

Dans feuille "Contact":

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Intersect(Target, Columns(5)).Value = "Traité" Then
DlgnT = Sheets("Dossier").Cells(Rows.Count, 2).End(xlUp).Row
Target.EntireRow.Copy Destination:=Sheets("Dossier").Cells(DlgnT + 1, 1)
End If
End If
End Sub

Dans feuille "Dossier":

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Intersect(Target, Columns(5)).Value <> "Traité" And _
Intersect(Target, Columns(5)).Value <> "" Then
DlgnP = Sheets("Contact").Cells(Rows.Count, 2).End(xlUp).Row
Target.EntireRow.Delete
End If
End If
End Sub

Et voila encore merci. C'est marrant de discutée via le forum alors que si ça trouve on est a 100 m.
 

pedrag31

XLDnaute Occasionnel
Re : mouvement de ligne conditionnel

Re,

Essayes ceci dans la feuille "CONTACT" et vide ta feuille "DOSSIER" de son code Worksheet_Change
Un peu lent aux tests, il faut que je creuse un peu pour améliorer tout ça... Je crois que c'est peut être l'évènement SelectionChange qui vient interférer avec le code...

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False

'ici on teste si la cellule qui change est unique, en colonne E et de valeur non vide
If Target.Count = 1 And Target.Column = 5 And Target.Value <> "" Then
   
    'ici on vide la liste existante de la feuille "Dossier"
    Worksheets("Dossier").Range("A6:AZ" & Worksheets("Dossier").[A6].End(xlDown).Row).Clear
    
    'ici on fait une boucle sur les lignes de la feuille Contact pour copier dans l'ordre les lignes "traitées"
    ligne = 6
    For Each cell In Worksheets("Contact").Range("E6:E" & Worksheets("Dossier").[E6].End(xlDown).Row)
        If cell.Value = "Traité" Then
            Worksheets("Contact").Rows(cell.Row).Copy Worksheets("Dossier").Range("A" & ligne)
            ligne = ligne + 1
        End If
    Next cell

End If

Application.ScreenUpdating = True
End Sub

Bonne journée :)
 

pedrag31

XLDnaute Occasionnel
Re : mouvement de ligne conditionnel

Re,

Avec grand plaisir!

J'ai analysé un peu ce qui se passait, il s'avère que j'ai fait une bêtise dans mon code et donc la macro bouclait très longtemps... Utilise ce code corrigé plutôt qui est très rapide pour le coup :cool::

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False

'ici on teste si la cellule qui change est unique, en colonne E et de valeur "Traité"
If Target.Count = 1 And Target.Column = 5 And Target.Value <> "" Then
    
    'ici on vide la liste existante de la feuille "Dossier"
    Worksheets("Dossier").Range("A6:AZ" & Worksheets("Dossier").[A6].End(xlDown).Row).Clear
    
    'ici on fait une boucle sur les lignes de la feuille Contact pour copier dans l'ordre les lignes "traitées"
    ligne = 6
    For Each cell In Worksheets("Contact").Range("E6:E" & Worksheets("Contact").[E6].End(xlDown).Row)
        If cell.Value = "Traité" Then
            Worksheets("Contact").Rows(cell.Row).Copy Worksheets("Dossier").Range("A" & ligne)
            ligne = ligne + 1
        End If
        Application.StatusBar = "cellule : " & cell.Row & " - ligne= " & ligne
    Next cell

End If

Application.ScreenUpdating = True
End Sub

Toutefois, ce code n'inclut pas la réciproque, c'est à dire que si tu changes le statut dans l'onglet "dossier", le ligne ne sera pas modifiée dans l'onglet "contact"... Est-ce que c'est important?

Bonne journée :)
 

Pièces jointes

  • exemple2.xlsm
    45.5 KB · Affichages: 53
  • exemple2.xlsm
    45.5 KB · Affichages: 55
  • exemple2.xlsm
    45.5 KB · Affichages: 56

vevzz

XLDnaute Nouveau
Re : mouvement de ligne conditionnel

Re-bonjour, merci d'avoir testé.
Finalement j'ai pris du boulot à la maison et j'ai testé aussi.
Je rencontre quelques problèmes, en premier, l’intégralité de mes lignes "Contact" se copient ce qui ne se faisait pas avec la formule, par exemples les colonnes "demande de la personne" et "commentaires" ne se retrouvent pas dans "Dossier", mais en même temps je ne l'avais pas dis, t'aurais pu deviné ;-).
De plus, je ne comprend pas pourquoi mais certaine lignes deviennent plus épaisses dans "Dossier" 33.75 au lieu de 11.25.
Et surtout, les informations complémentaires que je ne remplis que dans "Dossier" ne suivent pas le mouvement.

En fait, avec la formule je copie les colonnes de A à AG (sauf P) qui vont se coller dans la feuille "Dossier" à leur place respective, sous condition que l'état du dossier (colonne E) soit "Traité". Ce qui marche pas trop mal avec la formule en fait.
Ensuite, et c'est la mon problème, quand une personne est dans "Dossier" je complète les informations sur elle dans les colonne P et AH:AZ ("Dossier"). Ce sont ces infos qui ne suivent pas le mouvement.
Par exemple si j'ai deux personnes, Mr A et Mme B, qui me contact. Je les enregistre dans ma feuille "Contact" (fastoche). Mme B est une rapide et je traite son cas en premier, son état passe donc à "Traité" et elle se trouve propulser sur la première ligne de ma feuille "Dossier" (la première ligne active étant la 6, logique). Je complète donc les infos la concernant à la suite de celles importées de "Contact", donc en ligne 6 de AH à AZ dans "Dossier"
Et ... tout a coup, Mr A se réveil, du coup je traite son dossier. C'est la que ça plante, Mr A passe dans "Dossier" mais il prend la place de Mme B en ligne 6, elle se retrouve donc en ligne 7, mais pas les infos complémentaires qui du coup restent à leur place et se retrouve face a Mr A. Pas bon, pas bon.

C'est le code (ou la formule) qui permet ceci que je ne trouve pas. Mais évidement je ne vais pas faire le difficile, s'il faut effacer la formule pour la remplacer par un code VBA qui fait tout, c'est parfait. Je suis ouvert à tout, que ça marche ou pas d'ailleurs, au moins j’apprends (d'ailleurs, géniaux les commentaires en vert)
J’espère m’être mieux expliquer désolé.

Merci encore pour tous tes efforts.
A au fait, peu importe la réciproque.
:D
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 182
dernier inscrit
moutassim.amine