Soustraction dans une colonne

Bonjour à tous,

J'ai un soucis qui me bloque, je souhaite soustraire chaque ligne de ma colonne avec une seule moyenne et bien sûr afficher le résultat sur la colonne d'à coté. J'ai beaucoup de mal, j'ai beau chercher partout sur le net c'est assez compliqué. Merci de bien vouloir m'aider.

Merci d'avance pour votre aide.

Je vous joint un exemple du tableau que je suis entrain d'automatiser. J'ai les X et je souhaiterai pour chaque ligne faire X-M, M qui est la moyenne des X puis après je pourrais mettre X-M au carré.

11exemple.xlsx (22.44 Ko)

Bonjour Filou93,

Je te retourne ton fichier Excel modifié :

33exemple.xlsx (9.90 Ko)

Regarde la formule en H9, et aussi celle en I9.

(déjà tirées vers le bas jusqu'en ligne 24)

Si besoin, tu peux demander une adaptation.

Merci de me dire si ça te convient.

dhany

Bonjour Dhany,

Merci à toi,

Je te remercie pour ta réponse rapide, je souhaiterai l'automatiser sur vba justement j'ai oublié de le préciser mdrr, en copiant un seul tableau pour l'exemple les formules du tableau ont bouger, mais je sais le faire sur excel, j'ai déjà automatiser une bonne partie de ce que je veux faire, la soustraction et le fait de mettre le résultat dans la cellule que je veux j'arrive pas du tout

Je te retourne ton fichier modifié :

21exemple.xlsm (15.85 Ko)

Ctrl e ➯ travail effectué

Alt F11 pour voir le code VBA, puis revenir sur Excel

Si besoin, tu peux demander une adaptation.

Merci de me dire si ça te convient.

dhany

Merci Dhany sa marche nickel, de base je voulais faire en sorte que sa s'adapte à chaque taille d'échantillons pas pour un cas précis mais le code que ta fais est énorme ! Merci beaucoup

Filou93 a écrit :

je voulais faire en sorte que ça s'adapte à chaque taille d'échantillons pas pour un cas précis

c'est déjà fait ! si tu ajoutes des échantillons avant la dernière ligne de données, tu verras qu'ils sont pris en compte !

ah ben j'crois qu'mon code est plus énorme que tu pensais, alors ! c'est quand même toujours gratuit !

exemple : insère une ligne avant la ligne 24 ; saisis C en F24 et 30 en G24 ➯ Moyenne en G28 : 9,29411765 ; refais Ctrl erésultats, des lignes 9 à 25 ; mais je vais quand même faire une version encore améliorée (et aussi gratuite).

dhany

Bonjour à tous,

Nul besoin de VBA pour ta question.

Il suffit de mettre tes données sous forme de tableau (dynamique) pour cela.

Voir fichier pour l'exemple.

Cdlt.

5filou93.xlsx (18.38 Ko)
snip 20180610120910

@Filou93

Lis d'abord mon message précédent, puis celui-ci.

La nouvelle version est terminée :

13exemple.xlsm (16.37 Ko)

Avec la version précédente, quand tu insérais une ligne de donnée juste avant la ligne Total, elle était prise en compte par le code VBA, mais pas par les 3 formules de Total, Effectif, Moyenne : ça restait pour la plage G9:G24, donc ça n'allait pas !

Solution : j'ai effacé les 3 formules : tu verras qu'elles sont mises correctement par le code VBA.


Exemple à suivre tel quel pour la démo :

Note qu'au départ, G25:G27 est vide ; normal, vu qu'y'a plus d'formules !

Ctrl e ➯ travail effectué ; tu peux vérifier que les formules sont les mêmes que dans le fichier précédent, donc résultats identiques ; seule petite différence : la moyenne est avec 2 décimales, donc 8,00 au lieu de 8.

Insère une ligne juste avant la ligne Total ; en F25, saisis D ; en G25, saisis 30 ; tu peux voir qu'un petit triangle vert est apparu pour les 3 cellules des formules ; c'est normal : « La formule de cette cellule fait référence à une plage ayant des nombres supplémentaires adjacents » ; ne te préoccupe pas de ça, et fais Ctrl e ➯ nouvelles formules avec la plage G9:G25, donc les 3 petits triangles verts ont disparu !

Le Total est passé de 128 à 158 ; l'Effectif est passé de 16 à 17 ; la Moyenne est passée de 8,00 à 9,29 ; et tous les autres résultats sont avec 2 décimales ; mais attention : quand tu liras le code VBA, tu pourras comprendre que seuls les résultats affichés sont arrondis à 2 décimales, car tous les calculs sont faits avec la précision maximale.


À te lire pour avoir ton avis.

dhany

Merci beaucoup c'est super gentil d'avoir pris le temps de m'aider, sa me débloque énormément pour la suite, j'ai une autre question s'il te plait, saurais-tu comment clear la dernière et l'avant dernière ligne d'une colonne, j'ai essayer de le faire avec un code, mais sa me supprime la ligne de toutes les colonnes alors que je veux juste effacer le contenu.

Le code est le suivant :

Dim dlig As Long

dlig = Range("A" & Rows.Count).End(xlUp).Row

Rows(dlig - 1 & ":" & derlign).EntireRow.Delete

Merci d'avance

au lieu de .Delete utilise .ClearContents (et sans EntireRow) :

Rows(dlig - 1 & ":" & dlig).ClearContents

note : j'ai mis .ClearContents car .Clear efface tout, y compris tous les formats : formats de nombres, alignements, bordures, remplissage et autres.


remarque : pour ta suppression de lignes, tu aurais pu utiliser plus simplement, sans EntireRow :

Rows(dlig - 1 & ":" & dlig).Delete

dhany

Merci Dhany ça marche avec la colonne A mais du coup ça impact sur les autres colonnes, en fait sa m'efface pas la cellule de la colonne A mais la ligne de A puis B C D E par rapport à A etc..

ben oui, c'est normal, puisqu'on utilise .Rows : pour la ou les lignes indiquées, c'est la ligne entière ! même sans mettre .EntireRow qui serait dans c'cas un pléonasme inutile ! d'autre part, tu as écrit : « comment clear la dernière et l'avant dernière ligne » donc j'ai pensé que c'était ça, mais j'ai lu trop vite puisque tu as ajouté : « d'une colonne » ; donc pour uniquement ta colonne A, utilise :

Cells(dlig - 1, 1).Resize(2).ClearContents

Cells(dlig - 1, 1) est la cellule de l'avant-dernière ligne, colonne A ; avec .Resize(2), c'est pour cette même cellule et l'autre en dessous : dernière ligne, colonne A ; y'a plus qu'à effacer avec .ClearContents


Attention : j'viens d'voir que t'avais utilisé derlign en plus de dlig : faut utiliser soit l'un, soit l'autre !

donc ta ligne : Rows(dlig - 1 & ":" & derlign).EntireRow.Delete aurait dû être :

Rows(derlign - 1 & ":" & derlign).EntireRow.Delete

OU

Rows(dlig - 1 & ":" & dlig).EntireRow.Delete

(j'viens d'corriger mon message de 17:39 où j'avais recopié ton erreur, mais sans le EntireRow)

dhany

C'est parfait merci ça marche parfaitement !! Mdrrr

Je vais profiter de toi pour te poser une autre question, j'y arrive pas donc je contourne à chaque fois ce problème, par exemple la moyenne j'aimerais que le résultat se copie dans une autre cellule, la cellule de la moyenne est variable mais pas la cellule où elle va être copier, c'est assez compliqué, il doit reconnaitre la cellule à chaque fois quel se déplace dans la colonne. Aurais-tu une idée s'il te plait ?

actuellement, dans mon fichier, la moyenne est en G27 ; si tu ajoutes des lignes pour d'autres échantillons, c'est tout à fait normal qu'elle descende vers le bas (autre pléonasme en passant) ; et si tu supprimes des lignes d'échantillons, c'est tout à fait normal aussi qu'la cellule de la moyenne remonte vers le haut (tiens, j'sais pas pourquoi, j'suis en veine de pléonasmes, ce soir ! c'est pas mon habitude, pourtant ! j'crois qu'c'est ta ligne de code avec .EntireRow qui a déteint sur moi !!! c'est pas bien, ça, d'me donner l'mauvais exemple !!! ) ; bon, trêve de plaisanterie, si la cellule où tu veux copier la moyenne est non variable et fixe (là c'est pas pour faire pléonasme, c'est juste pour mieux décrire la situation), ben c'est encore plus simple ! y'a qu'à utiliser tout bêtement cette cellule de destination ; si tu veux mettre la moyenne par exemple en cellule C4 : [C4] = Cells(dlig, 7)

bien sûr, dlig doit être calculé juste avant de la façon habituelle : dlig = Cells(Rows.Count, 7).End(xlUp).Row

(juste avant pour être bien sûr de tenir compte d'éventuels ajouts ou suppressions de lignes d'échantillons)

dhany

J'arrive pas à l'appliquer, tu peux me donner un exemple sur cet exemple stp ?

Mdrr je suis habituer à dire des pléonasmes aussi

6v3.xlsm (66.51 Ko)

et tu veux mettre quoi où ? merci de préciser la cellule source et la cellule destination !

dhany

Le NB en B1 par exemple, quand je le calcul il apparait en A7, le but étant de faciliter le comptage et si l'échantillon augmente qu'il puisse se mettre à jour facilement.

Merci vraiment, j'apprend beaucoup grâce à toi

si c'est toujours cellule source B1 et cellule destination A7 : [A7] = [B1]

si la cellule destination est variable et qu'elle est 2 lignes sous le dernier nombre de la colonne A :

Cells(Rows.Count, 1).End(xlUp).Offset(2) = [B1]

dhany

Sa marche pas, c'est bien ce code là du coup?

Sub Macro1()

Range("A2").Select

Range(Selection, Selection.End(xlDown)).Select

NB

Average

Cells(Rows.Count, 1).End(xlUp).Offset(2) = [B1]

End Sub

patiente un moment : j'suis en plein cambouis dans ton fichier !

signé : le garagiste (et y'a du boulot !)

Rechercher des sujets similaires à "soustraction colonne"