Calculer la différence

M

musat

Guest
Bonsoir tout le forum,

J'ai un petit problème simple et facile pour vous.

J'ai un tableau de 3 colonnes A, B, C et plus de 1000 lignes (nombre inconnu et variable ).

Je voudrais dans une colonne D calculer la différence entre B et C sans les titres (ligne 1) et tout cela par macro et pour toutes les lignes (il faut utiliser End(xlUp) à ce que je pense mais j'arrive aps).

Merci beaucoup
 
V

Vériland

Guest
Bonjour Musat,

Alors à y réfléchir cela ne semble pas très compliqué...mais afin d'être au plus près de ta question aurais-tu un fichier exemple à nous fournir ?

Personnellement je ne capte pas trop la différence entre B et C...

Merci

A+ Vériland
 
A

andré

Guest
Salut musat,

Pourquoi faire simple quand il y a moyen de compliquer les choses.

Enregistre une simple macro :
En D1 (ou la première ligne sur laquelle tu veux opérer ta soustraction) tu tapes =B1-C1
Tu copies cette formule jusqu'à la dernière ligne.
Tu sélectionnes la colonne D et tu fais un copier / coller valeurs
Tu arrêtes ta macro.

Moi non plus je n'y connaîs pas grand chose en VBA (lire : rien du tout), mais cela je sais le faire.

Bonne fin d'année.
André.
 
M

musat

Guest
Rebonsoir,

c'est pas aussi simple que vous les imaginer.
Moi je voudrais appliquer cette règle quelque soit le nombre de lignes: je peux appliquer la macro sur une feuille qui comporte 33 lignes comme je peux l'appliquer sur une autre contenant 33333 lignes.

Alors?

J'espère être clair
Merci
 
F

fabrice

Guest
salut

Moi aussi je n'y connais rien en VBA mais ce forum est une mine d'or.

Voila notament un truc que j'ai appris grace a ce forun ( @thierry ).

Pour trouver la derniere cellule, tape ca dans ta macro:
Worksheets("Feuil1").Range("A2", [H65536].End(xlUp))

A2 est la cellule de départ.

Allez, a la prochaine.
FAb

PS: se pense ne pas avoir dit de connerie mais je n'en suis pas encore sur!!! lol
 
S

steplof

Guest
Salut à tous

Musat regarde ci le classeur joint répond à tes souhaits
tu cliques sur le bouton et ça doit faire c-b à toutes les lignes non vides

jusqu'à la derniere sauf erreur

Dis moi si c ok

Steplof
 

Pièces jointes

  • musat.xls
    24 KB · Affichages: 86
V

Vériland

Guest
Bonsoir le forum,

Impeccable Steplof,

j'étais entrain de faire la même manipe que toi mais je bloquais sur l'insertion automatique de la formule dans une boucle...et là tu viens de me donner la réponse...

formuleD = "=(c" & i & "- b" & i & ")"

c'est tout bon

A+ Vériland
 
@

@+Thierry

Guest
Bonsoir

Juste pour Steplof, attention aux Variables et surtout quand Musat parle de 33333 lignes.... Ton i as integer va exploser !! de plus ta "DerniereLigne" as Double.... (à virgule flottante en double précision) n'est pas nécessaire pour une Row... donc Var pas géniales..

Astuce pour améliorer la rapidité du code par 20 X : (sur 65535 lignes !)

Private Sub CommandButton1_Click()
Dim DerniereLigne As Long
Dim formuleD As String
Dim i As Long
Application.Calculation = xlManual

DerniereLigne = Range("a65536").End(xlUp).Row
For i = 2 To DerniereLigne
formuleD = "=(c" & i & "- b" & i & ")"
Range("d" & i).Value = formuleD
Next i
Application.Calculation = xlAutomatic
End Sub

Mais ta boucle de formule est tout à fait simple et géniale :)
Have a good last Week End 2002
@+Thierry
 
S

steplof

Guest
Bonjour @+Thierry et tous les autres,

merci de t'être penché sur "mon" code et pour les corrections que tu apportes quant aux déclarations des variables.
Je dis "mon" car ce n'est que l'adaptation de ta façon de présenter les sub puisque tu es une de mes sources d'apprentissage les plus prolifiques.
C'est sans doute pour ça que tu trouves aussi géniale la petite boucle ;o)

En ce qui concerne ton code Peux tu m'expliquer ce que "disent" à Excel tes 2 lignes Application.Calculation
J'ai pour l'instant pas trouvé d'explications claires dans l'aide VB.

Merci encore pour l'aide que tu nous (m') apportes.

Steplof
 
S

steplof

Guest
Re Bonjour

Décidément le simple fait de formuler ses interrogations permet parfois de leur trouver les réponses...

Je pense avoir compris:
tu bloques tous les autres calculs qu'Excel pourraient être amené à faire sur d'autres cellules pendant qu'on écrit FormuleD dans chaque ligne, une fois tout écrit là tu rends la main à Excel pour qu'il mette tout à jour en une seule fois,c'est GENIAL!!!!
Si j'ai bien compris effectivement ça doit accélerer des éxécutions (surtout j'imagine si d'autres cellules utilisent le résultat en D par exemple)
De plus , il y a le temps de calcul et surtout d'affichage du résultat i fois répété qui doit bien diminuer sur des longs process.

Ben je m'en vais tester ça!!!!

Bon WeekEnd à tous aussi, pour ta part @+ Thierry vu ton heure tardive de coucher on ne compte pas sur toi trop tôt aujourd'hui ;o))))

Steplof
 
@

@+Thierry

Guest
Bonjour Steplof, BOnjour à tous et toutes

ça fait plaisir de lire çà au réveil ! et oui moi suis pas matinal comme toi ! 6:33 déjà devant le PC !

Pour l'application.calculation tu as répondu toi-même en effet. C'est un moyen d'accélérer énormément l'éxécution d'un code comme celui ci. Je dis bien un code comme celui-ci !

C'est à dire un code qui écrit des formules... Imagine sinon qu'Excel re-calcule à chaque ligne, la ligne où VBA vient d'écrire bien sûr, mais aussi toutes les lignes qui précèdent... sur 33333 lignes, pour que celà se fasse rapidement il faut un "Cray" ou alors attendre le Pentium IX 500 GH... lol

Si tu laisses cette option cochée (nb accessible sans VBA depuis menu / option => onglet "Calcul" / mode de calcul : "automatique" / "sur ordre" (xlautomatic / xlmanual)... çà peut considérablement être interminnable sur des longues plages de cellules...

Cela peut-être très utile durant certaines procédures. On peut aussi faire des calculs pendant que xl est en manual avec l'instruction "Calculate" qui en fait est l'equivalent de la touche "F9", cela peut rendre service dans le cas où il faut obtenir juste un résultat, puis reprendre une longue boucle sans laisser "la main" à Excel pour les calculs auto...

Une dernière recommandantion : Surtout il faut faire bien attention à remettre cette option en fin de procédure sur XlAutomatic.. car sinon XL reste en mode manuel et les Users sinon vont faire un post ici "çà ne marche plus" !!! "Au secours Excel est en grève, il ne calcule plus !!!" lol

Bon Ween End
@=+Thierry
 
@

@+Thierry

Guest
Bonsoir François !!!


Si on devait attribuer une palme d'or pour la réponse la plus efficace et simple de l'année.........

Tu es le vainqueur !!! sans contestation

Bravo... parfois le plus grand défaut du VBA est de nous rendre aveugle !

Bonne fin d'année
@+Thierry
 
V

Vériland

Guest
Bonsoir à toutes et à tous,

Alors là......j'suis vert...on s'fatigue à trouver des solutions, genre prises de tête...lol...et v'là qu'un double clic suffit...hi hi hi

François, tu es le Winner dans ce fil...

A+ Vériland
 

Discussions similaires

Réponses
2
Affichages
186
Réponses
9
Affichages
511

Statistiques des forums

Discussions
311 737
Messages
2 082 030
Membres
101 876
dernier inscrit
JULIEN21370