VBA Excel - programmation formules

Résolu/Fermé
marjorykwet - 14 nov. 2008 à 15:02
 marjorykwet - 14 nov. 2008 à 18:20
Bonjour,

j'ai créé un programme sous VBA..

Je saisis une donnée numérique dans une boite message avec un numéro de dossier.
Le numéro de dossier saisi est recherché dans un tableau excel sur la deuxième feuille du classeur et sur la ligne de ce numéro est enregistrée la donnée numérique.
Concrétement : numéro de dossier colonne B, donnée numérique colonne H

Ce que je cherche à faire, et ce pourquoi j'aurai besoin d'aide :

Sur la même ligne je souhaiterai programmer une cellule qui fasse un calcul, une différence entre deux données numériques dans des cellules différentes mais toutes deux sur la ligne en question...
Concretement : dans la colonne N, résultat de la différence entre la valeur de la colonne H moins la valeur de la colonne G, le tout sur la même ligne.

Ensuite je souhaiterai pouvoir une moyenne numérique des données de la colonne N, et je souhaiterai afficher le résultat sur la première feuille.

c'est assez urgent, pour le boulot !!

Merci par avance pour votre aide.
A voir également:

16 réponses

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
14 nov. 2008 à 16:14
Bonjour,

Franchement, on peut t'aider pour le faire en VBA mais il me semble qu'à l'énoncé du problème, en créant trés simplement des formules dans les cellules par exemple dans la cellule N17 : =H17-G17
Puis, dans ta première feuille une formule du type : =MOYENNE(Feuil2!N:N)
On obtient le résultat,

Me dire si je me trompe.
0
marjorykwet
14 nov. 2008 à 16:18
Merci pour ton aide, ta solution n'est pas totalement juste, pour avoir une moyenne exacte il faut utiliser dans la colonne N une formule conditionnelle...

c'est ce que j'ai fait en attendant... mais je souhaiterai tout de même pouvoir le faire sous VBA...

merki
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
14 nov. 2008 à 16:28
D'accord,

Il faudrait stp que tu nous montre la partie de code ou tu veux insérer ce calcul et que tu précise la condition à respecter pour le calcul de la moyenne

merci
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 nov. 2008 à 16:32
Bonjour

ref est le dossier que tu saisis dans ta boite de message
sans gestion d'erreur si mauvaise saisie

lig=columns(2).find(ref,range("B65536"))

colonne N=14 H=8 G=7 à vérifier

cells(lig,14)=cells(lig,8)-cellls (lig,7)


Pour la moyenne
derlig=range("N65536").end(xlup).row
moyenne=application.average(range("N2:N"&derlig))

écris direct sans test
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
marjorykwet
14 nov. 2008 à 16:35
Pour obtenir une moyenne cohérente, je ne dois pas avoir dans la colonne N des valeurs nulles ou négatives... alors j'ai mis comme condition d'effectuer le calcul uniquement si la valeur numérique de la colonne H est renseignée.

Je vous file mon bout de code qui permet la saisi de la valeur numérique, qui est une date :


Sub enregistrement()

Daterep.Hide

Sheets("Contacts").Select

Columns(2).Find(what:=Daterep.numerodossier1.Value).Activate

ActiveCell.Value = Daterep.numerodossier1

ActiveCell.Offset(0, 6).Range("A1").Select
ActiveCell.Value = Daterep.DateReponse

Range("A2").Select

Sheets("Enregistrement").Select

Unload Daterep

End Sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 nov. 2008 à 16:38
..."Pour obtenir une moyenne cohérente, je ne dois pas avoir dans la colonne N des valeurs nulles"...

N'importe quoi, les newbies!

Excusez moi d'avoir voulu aider
0
marjorykwet
14 nov. 2008 à 16:43
dsl, pas eu le temps de voir ta réponse, alors que j'étais déjà en train d'écrire...

merci bcp pour ton aide, elle m'est fort précieuse, si tu peux développer un soupçon, je pourrai mieux comprendre !!

pour infos, c koi newbies ?
0
marjorykwet
14 nov. 2008 à 16:40
Merci pour cette proposition de code très intéressante,

juste un truc que je ne comprend pas tout à fait... que signifie le "N65536"...

si tu peux juste me l'expliquer, ce serait parfait.
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
14 nov. 2008 à 16:55
Je propose le code suivant pour le calcul de la moyenne



derlig = Range("N65536").End(xlUp).Row
SommeCalc = 0
NombreCalc = 0
For ILIG = 1 To derlig
    If Cells(ILIG, 14) <> "" And Cells(ILIG, 14) >= 0 Then
        NombreCalc = NombreCalc + 1
        SommeCalc = SommeCalc + Cells(ILIG, 14)
    End If
Next ILIG

'le résultat a mettre dans la cellule est SommeCalc/NombreCalc
0
marjorykwet
14 nov. 2008 à 17:11
Merci bcp...

est-ce que quelqu'un aurait l'obligeance de me dire ce que signifie "N65536" ... ?

je vais le tester aussi, quelle est la différence avec le code proposé ci-dessus ?

merki
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
14 nov. 2008 à 18:08
C'est tout simplement la dernière cellule de la colonne N (car Excel a 65536 lignes).
DOnc on remonte pour trouver la première cellule non vide.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 nov. 2008 à 17:18
Je ne suis pas assez pour te répondre
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 nov. 2008 à 17:30
Petite démo montrant qu'il absurde de dire
.."Pour obtenir une moyenne cohérente, je ne dois pas avoir dans la colonne N des valeurs nulles"...
https://www.cjoint.com/?lorwDuZPUH

les formules statistiques tiennent compte des cellules vides (ne pas confondre vide avec "")

c'est bien parce que c'est pour ton boulot et que...
0
marjorykwet
14 nov. 2008 à 17:33
Tout à fait d'accord sur le fait que les formules tiennent compte des cellules vides, par contre ne tient pas compte des valeurs nulles, je précise des valeurs égales à 0....
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 nov. 2008 à 17:43
c'est a toi de gérer avant dans ta formule G2-H2 par ex, le résultat Zéro ou négatif

si tu utilises MoYENNE (AVERAGE en VBA), fonction statistique

tu pourrais écrire:
si(G2-H2<=0;"";G2-H2)

le "" ne sera compté si tu calcules la moyenne en utilisant une fonction non statistique comme somme/NBVAL par exemple
cette particularité t'évite d'avoir à écrire une boucle, d'où simplicité du code et rapidité d'exécution...
0
marjorykwet
14 nov. 2008 à 17:57
Merci beaucoup pour la formule de la moyenne qui foncionne parfaitement, par contre c'est la formule de la différence qui ne passe pas...

elle ne calcule pas la différence... vous avez une idée ?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 nov. 2008 à 18:16
en VBA

if (cells(lig,8)-cellls (lig,7))<=0 then
cells(lig,14)=""
else
cells(lig,14)=cells(lig,8)-cells(lig,7)
end if
0
marjorykwet
14 nov. 2008 à 18:20
en fait le souci ne vient pas de la formule de la différence mais de la variable lig, elle ne retient pas le numéro de la ligne mais la ref...
0