Transfert de données

Bjr à tous,

Je voudrais savoir comment transférer, de façon quasi-automatique des données d'une feuille

dans une autre feuille du même classeur.

En effet, dans un classeur excel, j'ai 2 feuilles: une dans laquelle j'ai l'ensemble des factures fournisseurs

transmise au service trésorerie pour règlement. Et l'autre, dans laquelle je fais le récap des factures réglées.

Une fois que j'ai la liste des factures qui ont été réglées par la tréso, je coupe et je colle les lignes contenant ces facture

dans la 2è feuille.

Je souhaiterais savoir comment le faire par une macro, ou autre moyen sur excel.

Merci à vous!

Je dirais que tu as le choix du process :

  • le plus old school = avec un TCD appliqué sur ta BDD, avec comme premiere ligne "réglé ou pas", quand tu cliques sur le total qui t'interesse, toutes les colonnes des lignes correspondant sont récupérées dans un nouvel onglet. Par contre autant le TCD est Dynamique par définition, autant l'export sera a refaire a chaque Mise a jour ;
  • le plus simple si tu veux directement utiliser une table d'un autre classeur ou d'une autre source : avec Power query en important la BDD dans Query et en filtrant sur les factures réglées;
  • le plus dangereux : via macro. et comme j'ai horreur de ca surtout quand il y a d'autres solutions, je suis bien incapable de donner la procedure

Bonsoir Kouadio

Une idée

Les 2 feuilles doivent avoir la même structure.

On double clique en colonne A sur la ligne dont la facture a été réglée.

Elle est transférée en Feuil2 et supprimée en Feuil1.

Macro à copier dans Feuil1

Dim WsC As Worksheet
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Set WsC = Sheets("Feuil2")
  If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then
    Dim derligne%, ligne%
    derligne = WsC.Range("A" & Rows.Count).End(xlUp).Row + 1
    ligne = Target.Row
        Range("A" & ligne).EntireRow.Copy
        With WsC
          .Range("A" & derligne).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End With
        Application.CutCopyMode = False
        MsgBox ("cette facture est transférée en Feuil2 ")
        Rows(ligne).Delete
  End If
End Sub

cdt

Henri

Merci à tous pour vos propositions de solution.

J'essaie et je vous ferai un retour.

bonjour

une contribution sans vba , qui se met à jour au fil des saisies

6kouadio.xlsx (13.24 Ko)

cordialement

Merci AFEH,

Ta macro fonctionne.

Toutefois, est ce qu'il y aurait la possibilité d'insérer un code d'annulation,

au cas où je double clique sur la mauvaise ligne.

Merci.

Bonsoir Kouadio,

Voici un 1er exemple (on considère que la date du règlement est en colonne C)

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Set WsC = Sheets("Feuil2")
  If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then
    Dim derligne%, ligne%
    derligne = WsC.Range("A" & Rows.Count).End(xlUp).Row + 1
    ligne = Target.Row
        If Range("C" & ligne) = "" Then ' à adapter en fonction de la colonne qui correspond à la date du règlement
             MsgBox ("Cette facture n'est pas réglée, transfert annulé!")
                Exit Sub
        Else
            Range("A" & ligne).EntireRow.Copy
            With WsC
             .Range("A" & derligne).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            End With
            Application.CutCopyMode = False
            MsgBox ("Cette facture est transférée en Feuil2 ")
            Rows(ligne).Delete
        End If
  End If

ou un 2ème avec la confirmation du transfert

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Set WsC = Sheets("Feuil2")
  If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then
    Dim derligne%, ligne%
    derligne = WsC.Range("A" & Rows.Count).End(xlUp).Row + 1
    ligne = Target.Row
    If MsgBox("Souhaitez-vous transférer cette facture?", vbYesNo) = vbYes Then
       Range("A" & ligne).EntireRow.Copy
        With WsC
          .Range("A" & derligne).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End With
        Application.CutCopyMode = False
        MsgBox ("Cette facture est transférée en Feuil2 ")
        Rows(ligne).Delete
    Else
        Exit Sub
    End If
 End If
End Sub

Au choix, à tester.

cdt

Henri

Bonjour Henri,

Ta macro fonctionne bien. Disons que , c'est ce que je demandais.

Néanmoins, serait il possible d'annuler une transfert qui aurait été fait par inadvertance,

ou par erreur?

Merci

Bonjour Kouadio et Meilleurs Voeux pour 2020.

Si ton transfert a été fait à tort, il suffit de copier le code présent en Feuil1 dans Feuil2

Il faudra modifier dans le code

Set WsC = Sheets("Feuil2")

par

Set WsC = Sheets("Feuil1")

Cdt

Henri

kouadio

bonjour AFEH,

Meilleurs 2020 à toi,

Ta macro est superbe, c'est exactement cela.

Rien à ajouter.

Thanks a lot

AFEH,

Je souhaiterais associer des boutons "raccourci" aux actions suivantes dans mon fichier:

  • transférer un élément d'une feuille vers une autre
  • annuler le transfert d'un élément vers une autre

J'ai essayé de copier les codes des feuilles 1&2 dans un module, mais je n'y arrive pas.

Merci d'avance

Bonjour Kouadio

Un petit fichier à adapter.

Toutes les saisies se font dans la page Accueil.

Cdt

Henri

4kouadio-test1.xlsm (31.55 Ko)
Rechercher des sujets similaires à "transfert donnees"