XL 2019 Copier coller automatiquement des lignes sur Excel (VBA)

Lereq

XLDnaute Nouveau
Bonjour,

J'explique ma situation. J'ai une feuille Excel où il y'a différentes colonnes (6 au total). Chaque ligne correspond à un fournisseur. Chaque début de mois, je reçois des données de fournisseur. Je souhaiterai copier/coller automatiquement (via VBA?) les lignes d'un fournisseur dans ma 2ème feuille seulement si dans la colonne B le mot-clé "à migrer" est présent. Est-il possible de faire cela ? Merci par avance :)

PS : Ci-dessous seulement un exemple
 

Pièces jointes

  • Fournisseur VBA.xlsx
    11.2 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lereq,
Un essai en PJ avec :
VB:
Sub Migrer()
    Dim DL%, L%
    Application.ScreenUpdating = False
    With Sheets("Feuil2")
        DL = 1 + .Range("A65500").End(xlUp).Row
        For L = 2 To Range("A65500").End(xlUp).Row
            If Cells(L, "B") = "à migrer" Then
                .Range("A" & DL & ":E" & DL) = Range("A" & L & ":E" & L).Value
                .Range("B" & DL) = Date
                DL = DL + 1
            End If
        Next L
    End With
End Sub
En colonne B j'ai mis la date de migration plutôt que "à migrer"
 

Pièces jointes

  • Fournisseur VBA.xlsm
    18.3 KB · Affichages: 2

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans le fichier joint vous trouverez la macro ci-dessous.
Cliquez sur le bouton 'Migrer les migrants' et le tour est joué.
Vous ne dites pas que faire si le fournisseur existe déjà dans le tableau de destination ?
Vous ne dites pas non plus que faire des lignes d'origine. Faut-il les conserver ?

Si vous n'avez que quelques migrants, cette forme de transfert ira, par contre, en cas de foultitude de migrants, il faudra faire autrement....

VB:
Sub MigrationSansFrontiere()
    ' Variables listObjects (tableaux structurés)
    ' Source (TbMigrants) et Destination (TbAccueil)
    Dim TbMigrants As ListObject, TbAccueil As ListObject
    '
    ' Variable ligne de tabelau structuré, en cours de boucle
    Dim lrMigrant As ListRow
    '
    ' Initialisation des variables
    Set TbMigrants = ThisWorkbook.Sheets("Feuil1").ListObjects("T_Migrants")
    Set TbAccueil = ThisWorkbook.Sheets("Feuil2").ListObjects("T_Accueil")
    '
    ' Pour chaque ligne du tableau des fournisseurs à migrer
    For Each lrMigrant In TbMigrants.ListRows
        '
        ' Si sa colonne remplit à condition
        ' Alors on crée une nouvelle ligne dans le tableau d'accueil
        ' et on y copie les valeurs de la ligne migrée
        ' et on y remplace "à migrer" par la date du jour
        If lrMigrant.Range(1, 2) = "à migrer" Then
            With TbAccueil.ListRows.Add()
                .Range.Value = lrMigrant.Range.Value
                .Range(1, 2) = Date
            End With
        End If
    Next
End Sub

Cordialement

P.S. aux mauvais esprits : on parle bien de migration de lignes, pas d'autre chose :)

[Edition] Hello @sylvanu je vois qu'on a eu la même idée concernant la date de migration[/Edition]
 

Pièces jointes

  • Migration des fournisseurs.xlsm
    30.9 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re, Bonjour Hasco,
Une V2 avec la date en colonne A ce qui semble plus logique,
et une macro événementielle qui permet en cliquant dans une cellule de B d'inscrire "à migrer" si elle est vide ou l'effacer si elle contient "à migrer", avec :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 2 And Cells(Target.Row, "A") <> "" And Target.Count = 1 And Target.Row > 1 Then
        If Target = "" Then Target = "à migrer" Else Target = ""
        Cells(Target.Row, "A").Select
    End If
End Sub
 

Pièces jointes

  • Fournisseur VBA V2.xlsm
    20 KB · Affichages: 4

Lereq

XLDnaute Nouveau
Bonjour, merci beaucoup pour vos retour qui me sont utiles. Chaque fournisseur = une ligne dans le nouveau onglet Excel. Ainsi si le fournisseur à le même nom, il ne faut pas le recoller dans le nouveau onglet. Est-il possible de rajouter cela ? Merci beaucoup.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Un essai en PJ.
Mais cela veut dire qu'une fois un fournisseur écrit en Feuil2, jamais vous ne pourrez re migrer le même fournisseur, ni maintenant, ni jamais ?
Et vous n'avez pas répondu à la question de Hasco :
Vous ne dites pas non plus que faire des lignes d'origine. Faut-il les conserver ?
 

Pièces jointes

  • Fournisseur VBA V3.xlsm
    21.6 KB · Affichages: 1

Hasco

XLDnaute Barbatruc
Repose en paix
Chaque fournisseur = une ligne dans le nouveau onglet Excel. Ainsi si le fournisseur à le même nom, il ne faut pas le recoller dans le nouveau onglet.
Ce n'est pas clair tout ça.
On ne recrée pas de nouvelle ligne pour ce fournisseur.
Mais que fait-on des autres informations : Détail, Réglé, Mode de règlement ?
On remplace les valeurs existantes ou on laisse tomber ?

Si vous ne répondez pas clairement à ces questions, j'abandonne.
 

Lereq

XLDnaute Nouveau
Re,
Un essai en PJ.
Mais cela veut dire qu'une fois un fournisseur écrit en Feuil2, jamais vous ne pourrez re migrer le même fournisseur, ni maintenant, ni jamais ?
Et vous n'avez pas répondu à la question de Hasco :
Merci pour la PJ. Oui on migre seulement une fois le fournisseur. Concernant la question de Hasco, il faut conserver quand même garder les fournisseur dans la première feuille.
 

Lereq

XLDnaute Nouveau
Ce n'est pas clair tout ça.
On ne recrée pas de nouvelle ligne pour ce fournisseur.
Mais que fait-on des autres informations : Détail, Réglé, Mode de règlement ?
On remplace les valeurs existantes ou on laisse tomber ?

Si vous ne répondez pas clairement à ces questions, j'abandonne.
Tant que le fournisseur est présent dans la feuille 2, on ne créée pas de nouvelles lignes. Si certaines valeurs ont été changés (par exemple mode de règlement qui était "CB" devient "Prélèvement"), cela se met à jour automatiquement non ?

Merci !
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

cela se met à jour automatiquement non ?
Ben non justement, avec des fonctions oui mais pas avec vba il faut lui dire quoi faire ou quand le faire.

Dans le fichier ci-joint, dès que vous ferez un changement dans une cellule, le tableau de la feuille Feuil2 sera mis à jour, par l'évènement 'worksheet_change'. (Click droit sur le nom de la feuille puis 'Visualiser le code')

Cette méthode ne fonctionne que sur les changements d'une seule cellule, c'est pourquoi, si vous importez plusieurs lignes à la fois dans le tableau de la feuille Feuil1, j'ai laissé la macro de ce matin. Vous la lancerez après une mise à jour de votre tableau de fournisseurs.



Cordialement
 

Pièces jointes

  • Migration des fournisseurs.xlsm
    34.3 KB · Affichages: 9

Lereq

XLDnaute Nouveau
Re,


Ben non justement, avec des fonctions oui mais pas avec vba il faut lui dire quoi faire ou quand le faire.

Dans le fichier ci-joint, dès que vous ferez un changement dans une cellule, le tableau de la feuille Feuil2 sera mis à jour, par l'évènement 'worksheet_change'. (Click droit sur le nom de la feuille puis 'Visualiser le code')

Cette méthode ne fonctionne que sur les changements d'une seule cellule, c'est pourquoi, si vous importez plusieurs lignes à la fois dans le tableau de la feuille Feuil1, j'ai laissé la macro de ce matin. Vous la lancerez après une mise à jour de votre tableau de fournisseurs.



Cordialement
D'accord merci beaucoup Hasco et Sylvanu pour vos réponses. Tout fonctionne parfaitement. Cela va bcp m'aider.

Bonne journée et bon WE !
 

Discussions similaires