comment faire ma macro

F

fred

Guest
Bonjour a tous

je n'ai jamais faire de macro sur excel, j'espère que vous pourriez m'aider.

voila ce que je dois faire:

sub macro1()

copier la colonne B de ma feuille 'motion data' et la mettre dans la colonne A d'une autre feuille que je veux appeler 'calcul'

faire le calcul "90+B1-C1" de la feuille 'calcul' et mettre le résultat dans D1 et faire ce calcul pour toutes les lignes des colonnes B et C

faire le calcul ((D1>D2)*(D2<D3)+(D1<D2)*(D2>D3)) dans F1 de la feuille 'calcul', et le faire pour toutes les lignes de la colonne D

faire la somme de la colonne F dans G1

faire le calcul NB.SI((D:D);"<45") dans I7
faire le calcul NB.SI((D:D);"<75") - NB.SI((D:D);"<45") dans I8

End sub


merci beaucoup pour vos aides.
 
J

Jocelyn

Guest
Bonjour le forum,
Bonjour fred,

Je ne suis qu'un débutant mais pour ta macro dans un premier temps utilise "l'enregistreur de macro".

Dans outil ==> macro ==> nouvelle macro,

et comme tu sais exactement ce que tu doit faire apres nouvelle macro tu réalise toutes tes opérations quand cela est fini tu clique : Outils ==> macro ==> arreter l'enregistrement.

Apres tu peux relier ta macro a un bouton pour la lancer .

Voila j'espere t'avoir aidé un peu.

A+
Jocelyn
 
R

Robert

Guest
Salut Fred, Jocelyn, Salut le forum,

Jocelyn a raison, c'est une bonne méthode pour apprendre le VBA, c'est d'ailleurs comme ça que j'ai crée une partie de ta macro. J'espère que je n'ai rien oublié et qu'elle te conviendra.

Public Sub test()
lig = Sheets("motion data").Range("B65536").End(xlUp).Row
Sheets("calcul").Columns("B:B").Delete
Sheets("motion data").Range("B1:B" & lig).Copy Destination:=Sheets("calcul").Range("B1")
Sheets("calcul").Select
Dim cel As Range
For Each cel In ActiveSheet.Range("D1:D" & lig)
cel.FormulaR1C1 = "=90+RC[-2]-RC[-1]"
Next
For Each cel In ActiveSheet.Range("F1:F" & lig)
cel.FormulaR1C1 = "=((RC[-2]>R[1]C[-2])*(R[1]C[-2]<R[2]C[-2])+(RC[-2]<R[1]C[-2])*(R[1]C[-2]>R[2]C[-2]))"
Next cel
ActiveSheet.Range("G1").FormulaR1C1 = "=SUM(RC[-1]:R[" & lig & "]C[-1])"
ActiveSheet.Range("I7").FormulaR1C1 = "=COUNTIF((C[-5]),""<45"")"
ActiveSheet.Range("I8").FormulaR1C1 = "=COUNTIF((C[-5]),""<75"") - COUNTIF((C[-5]),""<45"")"
End Sub

À plus,

Robert
 
R

Robert

Guest
Re à tous,

Heu... ben j'ai fait comme t'as dis, enregistreur de macro... Alors quoi te dire sinon que j'ai vu que ça correspondait à ce que voulais Fred et je ne me suis pas pris la tête...
Mais le peu que j'en sais c'est que la fonction fait référence à la cellule désignée et applique la formule avec un système de ligne [R] et colonne [C]. Par exemple si tu veux en C1 la somme de A1 et B1,
tu aurais "=SUM(RC[-2]:RC[-1])" somme de : R (ligne inchangée puisque rien n'est inscrit), C[-2] (décalage de 2 colonnes vers la gauche)=A1, à RC[-1] qui toujours par rapport à C1 et selon le même principe renvoie B1.

À plus,

Robert
 
@

@+Thierry

Guest
Bonjour Jocelyn, Fred, Robert

Merci pour ton autre Post Jocelyn.

Juste pour une autre approche pour faire écrire des Formules par VBA car il n'y a pas que FormulaR1C1 obtenue par l'enregistreur, il y a aussi Formula, qui, je trouve pour ma part, bien plus lisible et facile d'emploi que ces Position de Row & Column !

Exemple (NB Fred ce n'est qu'un partie de la macro, juste pour montrer)

Sub Calcul()
Dim Cell As Range
Dim Lig As Integer
Dim MyVal As Byte

MyVal = 90

Lig = Sheets("Sheet1").Range("B65536").End(xlUp).Row

For Each Cell In Range("D1:D" & Lig)
Cell.Formula = "=" & MyVal & "+B" & Cell.Row & "-C" & Cell.Row
Next

With ActiveSheet
.Range("G1").Formula = "=SUM(F1:F" & Lig & ")"
.Range("I7").Formula = "=COUNTIF((D:D),""<45"")"
.Range("I8").Formula = "=COUNTIF((D:D),""<75"") - COUNTIF((D:D),""<45"")"
End With

End Sub


Bon Aprèm
@+Thierry
 

Discussions similaires

Réponses
7
Affichages
332
Réponses
9
Affichages
427

Statistiques des forums

Discussions
312 347
Messages
2 087 505
Membres
103 565
dernier inscrit
Fabien78