XL 2019 Envoyer données d'une cellule sur une autre feuille de classeur

Flnte

XLDnaute Nouveau
Bonjour à tous,

Voilà je suis à la recherche d'une solution pour envoyer le contenu vers une autre feuille du classeur. Rien de bien compliqué sauf que je veux que cela tienne compte de la date. Je m'explique : Dans ma feuille "Caisse du jour" en case "B2" j'inscris la date des caisses que je vais compter. En case "B7" et "C7" je saisie les montant. Ce que je souhaite réussir à faire c'est lorsque je clique sur le bouton "Envoyer la saisie vers feuille Récap TR" cela recopie la case "B7" et "C7" la colonne B (pour caisse 1) et C (pour caisse 2) mais sur la ligne qui correspond à la date saisie précédemment. J'ai tenté des choses, fais des recherche mais je n'ai pas trouvé comment faire! Quelqu'un a t-il une solution ou une piste à me proposer ?

Merci d'avance !
 

Pièces jointes

  • feuille de caisse exemple.xlsm
    104.6 KB · Affichages: 7
Solution
Bonjour Flnte, sylvanu,

ton fichier en retour. :)

* sur la feuille "Récap TR", en colonnes B à E : j'ai effacé tous les montants.
* va sur "Feuille de caisse du jour" ; y'a pas de montant non plus ;
la cellule active est : B7 ; regarde B2 : la date est ok : le 3 janvier.

* en
B7 : saisis 10 ; en C7 : saisis 20 ; clique sur le gros bouton ou
fais
Ctrl t (au choix) ...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Flnte,
Un essai en PJ avec :
VB:
Sub Transfert()
    Application.ScreenUpdating = False
    Dim Ligne%
    On Error Resume Next
    ' Sur qulle ligne se trouve la date
    Ligne = Application.Match(Sheets("Feuille de caisse du jour").[B2], Sheets("Récap TR").[A:A], 0)
    If Ligne = 0 Then
        MsgBox "Cette date n'a pas été trouvée."
    Else
        With Sheets("Récap TR")
            .Cells(Ligne, "B") = [B7]           'Caisse1
            .Cells(Ligne, "C") = [C7]           'Caisse2
            .Cells(Ligne, "F") = [B6]           'Nb TR1
            .Cells(Ligne, "G") = [C6]           'Nb TR2
            .Cells(Ligne, "D") = [B7] + [C7]    'Total
            If Ligne = 2 Then
                .Cells(Ligne, "E") = .Cells(Ligne, "D")                             'Si première ligne Total
            Else
                .Cells(Ligne, "E") = .Cells(Ligne, "D") + .Cells(Ligne - 1, "D")    'Sinon total+total(-1)
            End If
        End With
    End If
End Sub
J'ai ai profité pour remplir Total et total cumulé, tant qu'à faire.
 

Pièces jointes

  • feuille de caisse exemple.xlsm
    104.1 KB · Affichages: 3

soan

XLDnaute Barbatruc
Inactif
Bonjour Flnte, sylvanu,

ton fichier en retour. :)

* sur la feuille "Récap TR", en colonnes B à E : j'ai effacé tous les montants.
* va sur "Feuille de caisse du jour" ; y'a pas de montant non plus ;
la cellule active est : B7 ; regarde B2 : la date est ok : le 3 janvier.

* en
B7 : saisis 10 ; en C7 : saisis 20 ; clique sur le gros bouton ou
fais
Ctrl t (au choix) ; vérifie que les données de B2:E2 sont ok.

* retourne sur la 1ère feuille ; note que
B7 est déjà sélectionné,
et que
B7:C7 est vide ➯ c'est prêt pour une nouvelle saisie.



* tu aimerais mettre la date du 4 janvier n'est-ce pas ? rien de plus simple !
c'est inutile de sélectionner
B2 ; fais simplement Ctrl p (p pour plus) ➯
en
B2, il y a bien le 4 janvier ; fais de nouveau Ctrl p ; bien sûr, ça passe
au
5 janvier ; seulement, cette fois, c'est une erreur : on l'a fait trop tôt !

* c'est bien pour pouvoir corriger qu'il y a aussi
Ctrl m (m pour moins) ➯
en
B2, il y a de nouveau le 4 janvier.



* en B7 puis C7 : saisis 15 et 25 ; fais Ctrl t ; vérifie B3:E3 ; va en 1ère feuille.

* n'oublie pas d'avancer la date : fais
Ctrl p ➯ en B2 : le 5 janvier.

* en B7 puis C7, saisis 18 et 24 ; fais Ctrl t ; vérifie B4:E4.

* va en 1ère feuille ; avance la date : Ctrl p ; à toi de continuer... ;)




code VBA (28 lignes) :

VB:
Option Explicit

Sub Plus()
  If ActiveSheet.Name = "Feuille de caisse du jour" Then [B2] = [B2] + 1
End Sub

Sub Moins()
  If ActiveSheet.Name = "Feuille de caisse du jour" Then [B2] = [B2] - 1
End Sub

Sub CpyTR()
  If ActiveSheet.Name <> "Feuille de caisse du jour" Then Exit Sub
  Dim cel As Range, v1@, v2@, lig&: Application.ScreenUpdating = 0
  With Worksheets("Récap TR")
    Set cel = .Columns(1).Find([B2], , -4123, 1, 1)
    If cel Is Nothing Then Exit Sub
    lig = cel.Row 'n° ligne de la date de B2 qui a été trouvée en colonne A
    With .Cells(lig, 2)
      v1 = Val(Replace$([B7], ",", ".")): If v1 > 0 Then .Value = v1
      v2 = Val(Replace$([C7], ",", ".")): If v2 > 0 Then .Offset(, 1) = v2
      v1 = v1 + v2: .Offset(, 2) = v1
      If lig = 2 Then .Offset(, 3) = v1: GoTo 1
      .Offset(, 3) = .Offset(-1, 3) + v1
    End With
1   [B7].Select: [B7:C7].ClearContents: .Select
  End With
End Sub

soan
 

Pièces jointes

  • feuille de caisse exemple.xlsm
    107.2 KB · Affichages: 4

Jean-Eric

XLDnaute Occasionnel
Bonjour,
Une autre contribution.
Les données sont sous forme de tableau structuré.
J'ai repris les cumuls. 😉
Cdlt.

VB:
Option Explicit

Public Sub AddData()
Dim lo As ListObject, rngData As Range, r As Range, arr(3)

    Set rngData = Range("t_saisie")
    Set lo = Range("T_récap").ListObject

    arr(0) = Worksheets("Feuille de caisse du jour").Cells(2, 2).Value2   'ou arr(0) = VBA.Date
    With rngData
        arr(1) = .Cells(1, 2).Value + .Cells(1, 3).Value
        arr(2) = .Cells(2, 2).Value
        arr(3) = .Cells(2, 3).Value
    End With

    With lo
        If .InsertRowRange Is Nothing Then
            Set r = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
        Else
            Set r = .InsertRowRange.Cells(1)
        End If
    End With

    r.Resize(, 4).Value = arr
    rngData.Cells(1).Offset(, 1).Resize(2, 2).ClearContents

End Sub
 

Pièces jointes

  • feuille de caisse exemple v3.xlsm
    25.4 KB · Affichages: 11

soan

XLDnaute Barbatruc
Inactif
Bonjour Flnte, le fil,

j'ai vu que tu es passé samedi :

Image.jpg


mais il semble que tu as oublié ton sujet ! 😁

toujours pas de réponse à mon post #3 ! 😭

essaye mon fichier, en suivant toutes les indications
de la procédure à suivre ; quel est ton avis ? 😉



tu as eu aussi 2 autres propositions ;
ce serait bien d'y répondre ! :)

soan
 

Flnte

XLDnaute Nouveau
Bonjour à tous !
Merci pour vos retour. Comme je l'ai dit à Soan en MP depuis samedi conte temps je n'ai donc pas pu regarder plus longuement vos propositions. Demain jour de repos je vais donc pouvoir regarder cela en détail ! Merci encore du temps que vous m'avez accordé !
 

soan

XLDnaute Barbatruc
Inactif
@Flnte

Image 1.jpg


Image 2.jpg


je confirme que tu m'as écrit que tu as eu un contre-temps, et que tu n'as pas eu le temps de regarder en détail ; cependant, tu as ensuite ajouté cette phrase :
« Je viens de le faire. C'est parfait ! cela répond bien à ce que je souhaite faire ! »

➯ pour ma proposition, je considère que c'est OK ! 😊

➯ tu peux marquer mon post #3 comme solution, comme ceci :

Coche.jpg


soan
 

Discussions similaires