Trasfert de données

Bonjour,

Je suis nouvellement inscrite. J'ai un dossier client qui comprend des données tel que le numéro de dossier, date de naissance, date d'ouverture, le professionnel chargé du dossier et l'état du dossier. Dans la colonne état du dossier, j'ai 5 cas de figures: fermé, attente, ouvert, problème et transfert. Je dois trouver une solution VBA pour qui me permettra que les dossiers dont le statut est en attente, ou ouvert doivent être transférés automatiquement à un nouvel onglet. Merci d'avance de l'aide que vous allez m'apporter.

Bonjour,

Postes un fichier test avec l'état initial et l'état final afin qu'on puisse t'aider plus facilement !

Bonjour,

Ci-inclus le fichier sur lequel je suis supposée travailler.

Merci de votre aide.

Bonjour,

Voici une piste, je suis parti du principe que les deux feuilles existent dans le classeur (Attente et Ouvert). La procédure utilise les copies des résultats de filtrage :

Sub Filtre()

    Dim Plage As Range

    'défini la plage à filtrer sur toutes les cellules utilisées depuis A9
    Set Plage = DefPlage(Worksheets("Dossier"), 9, 1)

    If Plage Is Nothing Then Exit Sub

    With Plage

        'filtre su le 13 ème champ
        .AutoFilter 13, "attente"
        Worksheets("Dossier").AutoFilter.Range.EntireRow.Copy Worksheets("Attente").Range("A9")
        .AutoFilter

        'idem...
        .AutoFilter 13, "ouvert"
        Worksheets("Dossier").AutoFilter.Range.EntireRow.Copy Worksheets("Ouvert").Range("A9")
        .AutoFilter

    End With

End Sub

Function DefPlage(Fe As Worksheet, Optional L As Long = 1, Optional C As Long = 1) As Range

    On Error GoTo Fin

    With Fe

        Set DefPlage = .Range(.Cells(L, C), _
                       .Cells(.Cells.Find("*", .[A1], -4123, , _
                       1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
                       2, 2).Column))

    End With

    Exit Function

Fin:

    Set DefPlage = Nothing

End Function

Bonjour,

Cela ne fonctionne pas. Quand je voulais enregistrer le code VBA que tu m'as envoyé, j'ai eu ce message d'erreur (voir la pièce jointe).

Merci de m'expliquer la raison de blocage.

Bonjour le forum,

une petite copie d'écran pour vous éviter de télécharger le fichier Word :

screen

@louga : bizarre : ton fichier est un classeur modèle .xltm et pas un classeur .xlsm

dhany

Bonjour,

Bon, alors essais de cette façon (filtrage spécifique directement sur le tableau) :

Sub Test()

    Dim Tbl As ListObject

    Set Tbl = Worksheets("Dossier").ListObjects("Tableau2")

    Tbl.Range.AutoFilter 13, "attente"
    Worksheets("Dossier").AutoFilter.Range.EntireRow.Copy Worksheets("Attente").Range("A9")
    Tbl.Range.AutoFilter 13

    Tbl.Range.AutoFilter 13, "ouvert"
    Worksheets("Dossier").AutoFilter.Range.EntireRow.Copy Worksheets("Ouvert").Range("A9")
    Tbl.Range.AutoFilter 13

End Sub

Petite précision, il y a une faute de frappe sur les mots Attente dans ta feuille dossier "attemte" au lieu de "attente"

Bonjour Theze,

on s'est croisés ; j'ai fait un ajout à mon post précédent au sujet du type du fichier : un .xltm

(j'ai trouvé ça bizarre, mais c'est p't'être normal ?)

dhany

Bonjour dhany,

c'est vrai, je n'avais pas remarqué le nom du fichier dans la barre de titre mais ce n'est pas ça qui fait planter mon premier code, c'est le fait que ce soit un "ListObject" car comme louga a tiré des formules jusqu'à la ligne 145, il y a trop de ligne vide dans la colonne M. Si on supprime toutes les lignes inutiles du tableau, le premier code fonctionne

ok, merci beaucoup pour toutes tes infos !

dhany

Bonjour,

J'ai essayé, mais cela ne change rien.

Je suis sure et certaine qu'il y a une étape que je ne respecte pas vu que je ne suis une conaisseuse.

Est-ce que c'est possible de me retourner le fichier, s'il vous plait avec le code VBA étant donné que cela a marché pour vous.

Merci

Bonjour,

Alors bizarrement, ce matin ça fonctionne une fois sur deux ???

Dans ce cas, on va procéder autrement, teste ce code :

Sub Filtrer()

    Dim Tbl As ListObject
    Dim I As Long
    Dim J As Long
    Dim K As Long

    Set Tbl = Worksheets("Dossier").ListObjects("Tableau2")

    J = 10
    K = 10

    For I = 1 To Tbl.DataBodyRange.Rows.Count

        If Tbl.DataBodyRange(I, 13).Value = "attente" Then

            With Worksheets("Attente")

                .Range(.Cells(J, 1), .Cells(J, 13)).Value = Tbl.DataBodyRange(I, 13).EntireRow.Value
                J = J + 1

            End With

        End If

        If Tbl.DataBodyRange(I, 13).Value = "ouvert" Then

            With Worksheets("Ouvert")

                .Range(.Cells(K, 1), .Cells(K, 13)).Value = Tbl.DataBodyRange(I, 13).EntireRow.Value
                K = K + 1

            End With

        End If

    Next I

End Sub

Bonjour,

Cela ne marche pas.

Est-ce que c'est possible de me retourner le classeur étant donné que cela a fonctionné pour toi. Comme je te l'ai signalé, je ne suis pas une professionnelle VBA.

Merci.

Est-ce que c'est possible de me montrer comment tu as fait, étape par étape, s'il vous plait. Merci

Bonjour louga, Theze,

J'ai téléchargé le fichier de ton message du 27 juin à 02:29.

Sur les 3 premières feuilles de calcul, j'ai fait de nombreuses modifications :

1) amélioration de la ligne des entêtes

2) largeur modifiée pour certaines colonnes

3) suppression de 3 valeurs inutiles :

feuille "Dossier", cellule N10 : Attente (que fait donc là ce mot hors tableau et isolé ?)

feuille "Attente", cellule M10 : Ouvert

feuille "Ouvert", cellule M10 : Ouvert

4) pas étonnant qu'ça fonctionne pas si tu saisis "attemte" au lieu de "attente" ! j'ai mis une validation de données ➯ désormais, les seules valeurs acceptées sont "attente" ; "fermé" ; "ouvert" (sans les guillemets) ; pour le fun, regarde ce qui se passe quand tu saisis : attemte ; note que tu peux aussi appuyer sur les touches Alt ↓ puis choisir un des 3 items de la liste ; mais là, j'sais pas pourquoi les caractères sont minuscules ! d'habitude ça m'le fait pas, et c'est resté pareil avec des essais de zooms de la feuille plus gros ; p't'être que Theze aura une idée là-dessus ? (j'ai remis le zoom initial : 60 %)


Regarde d'abord que sur les 2 feuilles "Attente" et "Ouvert" le tableau est vide ; lance la macro Filtrer, puis va vérifier les résultats.


Code VBA : je l'ai écrit en m'inspirant très fortement de celui du post de Theze d'hier à 06:44 (très nombreuses modifs) :

@Theze : ton code VBA était très bon ! bravo !!! je l'ai juste adapté « à ma sauce » (dont optimisations)


Si besoin, tu peux demander une adaptation.

Merci de me dire si ça te convient.

dhany

Bonjour,

Une autre proposition à étudier !…

Cdlt.

Bonjour,

Je tiens d'anbord à vous remercier de m'avoir proposé deux solutions aussi efficaces l'une que l'autre.

Dans le fichier sur lequel vous avez mis le formulaire Filtrer et Raz. est-ce que c'est possible de me montrer les étapes, s.v.p.

Merci d'avoir pris le temps pour m'aider à trouver ces deux solutions.

Cordialelment,

Bonjour Louga,

Voir commentaires dans le fichier joint.

A te relire pour un complément d'informations.

Cdlt.

Bonjour,

Afin de rendre le classeur plus efficace, je dois ajouter un onglet pour les dossiers fermé. J'ai aussi ajouté et supprimé quelque colonnes selon les besoins. Par contre, j'étais incapable de le faire sur VBA.

Merci d'adapter les formules selon les nouveaux besoins.

Cordialement,

Bonjour,

La mise à jour demandée.

Bonne journée.

Cdlt.

Rechercher des sujets similaires à "trasfert donnees"