Utiliser feuil Excel comme formulaire et copié les valeurs vers une autre

Bonjour

J’utilise feuil "caisse " comme un formulaire pour saisir des montants et après je les archiver dans un autre feuil " table " et je vide le formulaire

au début j'ai commencé par ce code

Sub TEST()
'les cellules de la colonne b
Sheets("table").Range("a1").End(xlDown).Offset(1, 0) = Sheets("caisse").Range("b1").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 1) = Sheets("caisse").Range("b2").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 2) = Sheets("caisse").Range("b4").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 3) = Sheets("caisse").Range("b5").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 4) = Sheets("caisse").Range("b7").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 5) = Sheets("caisse").Range("b8").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 6) = Sheets("caisse").Range("b11").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 7) = Sheets("caisse").Range("b12").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 8) = Sheets("caisse").Range("b13").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 9) = Sheets("caisse").Range("b14").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 10) = Sheets("caisse").Range("b16").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 11) = Sheets("caisse").Range("b21").Value
'les cellules de la colonne c
Sheets("table").Range("a1").End(xlDown).Offset(0, 12) = Sheets("caisse").Range("c5").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 13) = Sheets("caisse").Range("c9").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 14) = Sheets("caisse").Range("c11").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 15) = Sheets("caisse").Range("c12").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 16) = Sheets("caisse").Range("c13").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 18) = Sheets("caisse").Range("c16").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 19) = Sheets("caisse").Range("c21").Value
'les cellules de la colonne d
Sheets("table").Range("a1").End(xlDown).Offset(0, 20) = Sheets("caisse").Range("d4").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 21) = Sheets("caisse").Range("d11").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 22) = Sheets("caisse").Range("d15").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 23) = Sheets("caisse").Range("d18").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 24) = Sheets("caisse").Range("d19").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 25) = Sheets("caisse").Range("d20").Value
Sheets("table").Range("a1").End(xlDown).Offset(0, 26) = Sheets("caisse").Range("d21").Value

Sheets("caisse").Range("B2, b4:b10, b12:b20").ClearContents

End Sub

mais j'ai trouvé deux problèmes

1- le code est très long et surtout si j'ajoute une deuxième ou troisième formulaire

2- les cellules "B11" "C11" "D11" contiennent une formule matricielle et le code ne copier pas leurres valeurs et voici la formule

{=INDEX(TABLE!G1:G39948;MAX((TABLE!B1:B39948=B2)*LIGNE(TABLE!G1:G39948)))}

Apres j'ai essayé cette méthode

j'ai affecte tous les valeurs dans une seul ligne c-a-d E1=B1 F1=B2 G1=B4 H1=B5 jusqu’à AD1=D21 et en suite copier tous la plage de E1:AD1 vers feuil Table

Sub Macro2()
    Range("E1:AD1").Copy
    Sheets("TABLE").Range("a1").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("TABLE").Columns("A:A").NumberFormat = "m/d/yyyy"
    Application.CutCopyMode = False
    Sheets("caisse").Range("B2, b4:b10, b12:b20").ClearContents
End Sub

SVP aidez moi de trouvez un code pratique et rapide en excution parce que au fin d’année je me trouve avec une 10000 ligne dans la feuil TABLE

merci beaucoup

Bonjour,

C'est indigeste !

Mais laissons cela de côté, je ne comprends pas ton problème, le fait que les valeurs de 3 cellules soient le résultat de formules matricielles n'empêche nullement de prélever la valeur !?

bonjour

voici mon fichier démo

C'est curieux ! Ça m'évoque un sujet récent, pas toi parce que je ne le retrouve pas dans tes messages, mais la problématique était semblable. Et je n'en retrouve pas les éléments dans ton code puisque ce dernier n'utilise pas ta ligne horizontale...

Ceci étant si ta macro s'exécute durant un calcul, tu ne prélèveras le résultat d'une formule que s'il a été calculé, et il est possible que le recalcul ne soit pas arrivé à terme avant l'exécution du code qui prélève la valeur... Il faut donc après traitement de ce qui va provoquer le recalcul, le forcer avec une instruction Calculate de la feuille ou même de la plage, et éventuellement intercaler un DoEvents de façon que le résultat ait toutes les chances d'être là au bon moment.

Cordialement.

Déjà, avec un With, un variable Worksheet, un tableau d'adressage et une boucle, on fait fondre le texte de ta procédure...

Mais j'aurais maimé connaître tes intentions à l'égard de ta ligne E1:AD1 sur Caisse, si tu entends l'utiliser pour rapatrier plus facilement les données ?

Cordialement.

Bonjour à tous,

j'interviens juste pour ça :

Ceci étant si ta macro s'exécute durant un calcul, tu ne prélèveras le résultat d'une formule que s'il a été calculé, et il est possible que le recalcul ne soit pas arrivé à terme avant l'exécution du code qui prélève la valeur...

    Do Until Application.CalculationState = xlDone
        DoEvents
    Loop

eric

Merci Eric pour cette formulation judicieuse...

J'ai déjà eu à forcer le recalcul, et ne parlons pas des DoEvents...

Mais cela peut être un complément décisif pour fiabiliser un dispositif, et cela présente plus de cohérence qu'une boucle à rallonge fixée empiriquement.

Rechercher des sujets similaires à "utiliser feuil comme formulaire copie valeurs"