Copier une ligne dans une autre feuille en fonction d'un mot clé

Bonjour,

Je fais appel à vous car je ne trouve pas de solution à mon problème ...

J'ai une première feuille global ou je mets toutes les personnes avec qui j'ai RDV.

Ensuite j'ai créer 3 autres feuilles.

Je voudrais que, selon le mot dans la dernière colonne de la première feuille, la ligne entière soit envoyé dans la feuille correspondante au nom de la feuille ou elle doit aller.

J'espère être assez clair ....

Merci à vous

Bonjour et bienvenue sur le forum

Un essai à tester. Te convient-il ?

Bye !

Bonjour,

Sub RépartirDonnées()
    Dim aa, tbo, tft(), n%, i%, f%, ln%
    ReDim tft(2 To Worksheets.Count)
    For i = 2 To Worksheets.Count
        With Worksheets(i)
            n = InStr(1, .Name, " - ") - 1
            tft(i) = Left(.Name, n)
        End With
    Next i
    With ActiveSheet
        n = .Cells(.Rows.Count, 10).End(xlUp).Row
        tbo = .Range("J3:J" & n).Value
        aa = .Range("B3:I" & n).Value
        For i = 1 To UBound(tbo)
            For n = 2 To UBound(tft)
                If tbo(i, 1) = tft(n) Then tbo(i, 1) = n: Exit For
            Next n
        Next i
    End With
    Erase tft: n = 0
    For f = 2 To Worksheets.Count
        For i = 1 To UBound(tbo)
            If tbo(i, 1) = f Then
                ReDim Preserve tft(n)
                tft(n) = WorksheetFunction.Index(aa, i, 0)
                n = n + 1
            End If
        Next i
        With Worksheets(f)
            ln = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            If ln < 3 Then ln = 3
            .Cells(ln, 1).Resize(n, 8).Value = WorksheetFunction.Transpose( _
             WorksheetFunction.Transpose(tft))
        End With
        Erase tft: n = 0
    Next f
    MsgBox "Répartition réalisée.", vbInformation, "Confirmation"
End Sub

C'était en principe une réponse plutôt rapide à faire ! Mais c'était sans compter avec quelques particularités qu'il a fallu contourner !

  • une colonne parasite intercalée dans les lignes à transférer ! celle-là je l'ai déplacée en A car elle ne m'aurait pas permis de coder comme j'entendais le faire... (mais les autres particularités il a fallu les contourner dans le code qui aurait été plus simple sans cela)
  • des noms de feuilles non correspondants à ceux indiqués dans la dernière colonne
  • un nom (Rappel t) doté en outre d'une espace en trop avant tiret (que j'ai supprimée, mais il a fallu chercher l'erreur)
  • une colonne sans libellé d'en-tête.
Prends-en note pour tes prochaines réalisations...

La macro est conçue pour ajouter les lignes à des données déjà existantes dans la feuille. Tu n'avais pas précisé ce point, j'ai donc opté pour un ajout de données (si ce n'était pas le cas, il faudrait introduire l'effacement des feuilles cibles avant d'insérer les données). L'option ajout supposerait un fonctionnement consistant à transférer les lignes de la première feuille sur leur feuille destinataire, puis à effacer cette première feuille, un nouveau lot saisi ensuite pouvant faire l'objet d'un nouvel ajout, etc.. Je n'ai cependant pas pris la liberté d'introduire l'effacement en fin, tu pourras facilement le faire...

J'ai ajouté un message de confirmation de l'opération à la fin pour que tu ne soies pas déstabilisé de ne rien voir bouger !

On travaille avec des tableaux : on extrait en tableau la plage de lignes à transférer (col. B à I), par ailleurs la plage-colonne indiquant les destinations (J). On extrait dans un tableau temporaire les noms de feuilles (en réduisant leur libellé à la partie figurant en destination).

Une première phase consiste à remplacer les noms de feuilles dans le tableau destination par leur index, en utilisant le tableau noms où elle figure dans l'ordre.

La phase principale consiste à faire une boucle sur les feuilles cibles, en répétant pour chacune : parcours du tableau destination, si correspondance index de feuille, on prélève la ligne qu'on affecte à un tableau résultat (incrémenté au fur et à mesure), puis on affecte ce tableau à la plage destination après l'avoir délimitée.

Cordialement.

Bonjour TOMATO KEPCHUP, le forum,

t'aurais pas fait une faute d'orthographe dans ton pseudo ?

screen

dhany

Pour saluer le fil en passant

Oui MFerrand, on peut aussi remplacer cette ligne :

.Cells(ln, 1).Resize(n, 8).Value = WorksheetFunction.Transpose( _
             WorksheetFunction.Transpose(tft))

par celle ci :

 .Cells(ln, 1).Resize(n, 8).Value = WorksheetFunction.Index(tft, 0, 0)

comme la syntaxe employée juste avant.

klin89

Salut Klin89 !

Si je ne confonds pas, c'est sous ta plume que j'ai vu des prélèvements de fractions de ligne avec Index en utilisant un tableau... dont je me suis dit qu'il faudrait que je fasse quelques tests pour enrichir mon utilisation d'Index (à laquelle je suis venu depuis peu, et qui me semble faire partie des quelques fonctions Excel susceptibles d'offrir des compléments enrichissants à VBA).

Bonjour,

Tout d'abord merci de vous être penché sur mon problème.

@gmb vous avez juste copier coller les infos ou je n'ai pas bien vu ?

En fait, je voudrais qu'en fonction de la case "tableau" de la feuille "R0 attribué", la colonne soit copier automatiquement dans le tableau qui fait référence à cette case et au nom du tableau associé.

@MFerrand je vous avoue ne pas tout comprendre, le langage utilisé est un peu trop complexe pour moi ... et dans le modele que vous m'avez fait tout n'est pas rapporté automatiquement.. est ce normal ?

@dhany tomato ketchup étant toujours utilisé pour les pseudos, j'ai changé la lettre

dans le modele que vous m'avez fait tout n'est pas rapporté automatiquement

(à préciser)

Bonjour à tous

@gmb vous avez juste copier coller les infos ou je n'ai pas bien vu ?

???

Ce que j'ai fait : une macro événementielle attachée à la feuille VBA "This workbook" qui chaque fois que l'on active une feuille regarde si cette feuiile a un nom tel que l'une des valeurs de la colonne J du tableau "RO attribué" et le cas échéant, cette macro y reporte les lignes concernées.

Mais j''ai aussi changé le nom des feuilles pour qu'ils ne bégaient pas !

J'ai vraisemblablement eu tort…

MFERRAND arrive au même résultat sans toucher à ces noms. Très fort !

Bye !

Messieurs,

Je dois être tellement nul que je n'y arrive pas.

Quand je rentre une nouvelle colonne avec les infos du client, pourquoi ne va t'elle pas directement dans le tableau concerné ?

Quand je rentre une nouvelle colonne avec les infos du client, pourquoi ne va t'elle pas directement dans le tableau concerné ?

Que faut-il comprendre par là ?

Nous avons un tableau de saisie de 10 colonnes, on doit transférer des lignes allant de la 2e à la 9e colonnes (soit 8) sur la feuille indiquée dans la 10e.

Si cela se produit c'est que le programme répond aux spécifications. S'il fait autre chose c'est qu'il y a erreur quelque part !

Bonjour à tous

Bonjour MFerrand

J'avoue ne pas comprendre non plus ce qu'attend TOMATO...

Bye !

Possible de vous passer un coup de fil messieurs ?

Possible de vous passer un coup de fil messieurs ?

Non, désolé, pas avec moi.

Bye !

Pourquoi ?

C’est juste pour que ce soit plus clair par téléphone...

Tu peux facilement t'expliquer ici !

Bonjour à tous

"Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément."

Nicolas Boileau

Bye !

Ta citation est aussi valable au téléphone ahah

Sur les fichiers que vous m'avez envoyé, les clients déjà existant ne sont pas renvoyés dans les tableaux correspondants. ex : mme dopa n'est pas dans le tableau "business en cours"

Sur les fichiers que vous m'avez envoyé, les clients déjà existant ne sont pas renvoyés dans les tableaux correspondants.

Regarde mieux ! Et vérifie !

Bonjour à tous,

si ça peut aider, voilà ce qu'on peut voir dans le fichier "Business Tomato Kepchup v1.xlsm" :

screen

peut-être que Heinz parle du second fichier "tomatokepchup_Business Tomato Kepchup" ?

dhany

Rechercher des sujets similaires à "copier ligne feuille fonction mot cle"