Déplacer ligne dans un tableau SI

Bonjour,

J'ai un tableau avec une liste de personnes qui occupe un chambre, je souhaiterais que lorsque on indique un numéro de chambre, dans la colonne Changement de chambre, on puisse à l'aide du bouton "Valider les Changements de chambre" déplacer la ou les lignes dans la ou les chambres correspondantes, mais il faut faire attention que la chambre est libre ou alors que l'on a inversion de chambre.

Je met en pièce jointe le classeur, ce sera plus facile à comprendre.

24ucc.xlsm (39.45 Ko)

Je vous remercie pour votre aide

Je me permet de faire remonter mon sujet ne trouvant toujours pas de solution à mon problème.

Je vous remercie par avance toute aide étant la bienvenue

Bonjour

Difficile de faire quelque chose sur un document protégé...

Bye !

Effectivement, j'avais oublié de dire que le code de déverrouillage est dans le VBA, toute mes confuses

Private Sub Workbook_Open()
Sheets("Service").Protect UserInterfaceOnly:=True, Password:="23400"
End Sub

Merci de vous intéresser à mon problème.

cordialement,

Un essai à tester. Te convient-il ?

Bye !

12ucc.xlsm (45.12 Ko)

Bonjour,

Merci gmb, je me suis certainement mal exprimé, mais l'idée est là, en effet le but est qu'une personne par ex :

Mr Dupond est en chambre 306, mais va dans la chambre 303 du coup on déplace les valeurs de B32 à N32 vers B28 à N28, la chambre ne bouge pas c'est la personne qui change de chambre.

je te remercie encore d'avoir pris le temps de regarder mon problème.

Bonjour

Nouvelle version.

Bye !

18ucc-v1.xlsm (44.92 Ko)

Bonjour on s'en approche grandement et je vous en remercie, néanmoins si je souhaite permuter Mme Arnaud dans la chambre 304 F avec Madame Dupond dans la chambre 306, les deux lignes disparaissent, l'idéal serait que dans cette situation Mme Arnaud passe en 306 et Mme Dupond en 304 F.

Merci encore

Bonjour à tous

C'est une approche tordue : inverse les numéros de chambre puis retrie tes chambres dans l'ordre... (on peut utiliser manuellement une liste personnalisée ou via VBA Un CustomOrder pour ce faire)

Je suis d'accord avec ça, mais l'objectif est que ce tableau soit verrouillé, je sais pertinemment que les infirmières n'ont pas vraiment le temps de faire ça, et que du coup c'est source d'erreur, il ne faudrait pas qu'elles puissent par inattention mettre deux chambres 303 par exemple, ou supprimer un patient ...

en fait l'idée est que l'infirmière demande un changement de chambre en renseignant la case changement de chambre, et c'est le service administratif qui vérifie et valide ce changement.

RE

Ce que j'ai conseillé en VBA. Voir aussi le sremarques sur la feuille Util.

N.B. : j'ai mis ton code en commentaires. Tu peux rétablir Workbook (je n'ai pas détaillé) mais je te conseille de voir autrement Worksheet_Change de Service car plage limitée et non basée sur le listobject et réction permanent inappropriée...

Sub CHGT()

    Dim changement As Range, NewChambre As Range, Permut As String, Ordre, C_O As String
    Set changement = Range("Tableau13[Changement de Chambre]").Find(What:="*", LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)
    If changement Is Nothing Then Exit Sub
    Permut = changement.Offset(0, -8).Text
    Set NewChambre = Range("Tableau13[Chambre]").Find(What:=changement.Value, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    NewChambre.Value = Permut
    Set NewChambre = Range("Tableau13[Chambre]").Find(What:=Permut, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    NewChambre.Value = changement.Value
    With Worksheets("Util").ListObjects("Ordre").DataBodyRange
        ReDim Ordre(.Cells.Count, 1)
        Ordre = .Cells.Value
    End With
    For I = 1 To UBound(Ordre)
        C_O = C_O & """" & Ordre(I, 1) & """" & IIf(I < UBound(Ordre), ";", "")
    Next I
    changement.ClearContents
    With Worksheets("Service").ListObjects("Tableau13").Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("Tableau13[Chambre]"), SortOn:=xlSortOnValues, _
            Order:=xlAscending, CustomOrder:=(C_O), DataOption:=xlSortNormal
        .MatchCase = False
        .Header = xlYes
        .Orientation = xlTopToBottom
        .Apply
        .SortFields.Clear
    End With
End Sub
11chambres.xlsm (47.63 Ko)

Bonjour,

effectivement c'est pas mal du tout, le seul problème et je ne comprend pas pourquoi, parfois la permutation à bien lieu, et parfois non, je n'arrive pas non plus à basculer quelqu'un dans une chambre vide, comme si il fallait nécessairement qu'il y ait inversion. Mais sinon l'approche est très bien.

Merci

Bonjour

Arf j'avais fait une petit modif de dernière minute et pas bien recontrôler. Ceci devrait être OK

Sub CHGT()

    Dim changement As Range, NewChambre As Range, OldChambre As Range, Permut As String, Ordre, C_O As String
    Set changement = Range("Tableau13[Changement de Chambre]").Find(What:="*", LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)
    If changement Is Nothing Then Exit Sub
    Permut = changement.Offset(0, -8).Text
    Set NewChambre = Range("Tableau13[Chambre]").Find(What:=changement.Value, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    Set OldChambre = Range("Tableau13[Chambre]").Find(What:=Permut, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    NewChambre.Value = Permut
    OldChambre.Value = changement.Value
    With Worksheets("Util").ListObjects("Ordre").DataBodyRange
        ReDim Ordre(.Cells.Count, 1)
        Ordre = .Cells.Value
    End With
    For I = 1 To UBound(Ordre)
        C_O = C_O & """" & Ordre(I, 1) & """" & IIf(I < UBound(Ordre), ";", "")
    Next I
    changement.ClearContents
    With Worksheets("Service").ListObjects("Tableau13").Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("Tableau13[Chambre]"), SortOn:=xlSortOnValues, _
            Order:=xlAscending, CustomOrder:=(C_O), DataOption:=xlSortNormal
        .MatchCase = False
        .Header = xlYes
        .Orientation = xlTopToBottom
        .Apply
        .SortFields.Clear
    End With
End Sub

Bonjour,

ça fonctionne bien comme ça, merci encore.

Rechercher des sujets similaires à "deplacer ligne tableau"