somme si (par VBA)

Epsilon 17

XLDnaute Occasionnel
Bonjour à toutes et à tous,

J'ai trouvé une magnifique commande dans la recherche qui ressemble à ceci et qui compte parfaitement :

Private sub blabla ()
Dim Cell as Range, nombre as Long
For Each Cell in Selection
if cell.value = 0 then
tot = tot + cell.value)

Mais cela ne marche pas. De plus, j'aimerais que cette valeur soit conservée en mémoire, même si je modifie les valeurs dans les cellules. Est-ce possible docteur ?

En tous cas, merci d'avance pour tout
Bye Bye

Sorry, il manquait des morceaux

Message édité par: epsilon 17, à: 21/04/2006 12:03

Message édité par: epsilon 17, à: 21/04/2006 12:05

désolé, il ne veut pas me prendre le message en entier, il me coupe des morceaux. J'essaieraiplus tard, je dois partir manger

Bye, bye

Message édité par: epsilon 17, à: 21/04/2006 12:07
 

Temjeh

XLDnaute Accro
Supporter XLD
Bonjour à tous

Que veut-tu faire au juste?

Dans ton bout de code il manque des infos: quelle est la valeur de tot?

Est-ce un nombre total de valeur que tu veut que tu veut et l'afficher ou?

J'avais ceci qui donne le nombre de 'Test' dans plage:

countTot = Application.CountIf(Range('A1:A9'), '=' & 'Test')
MsgBox countTot
'met ce résultat en A10
Range('A10') = countTot
A+

Temjeh


Message édité par: Temjeh, à: 21/04/2006 13:18
 

Gorfael

XLDnaute Barbatruc
Salut Epsilon 17

Petite explication de texte :
For Each Cell in Selection
Pour chaque cellule de la sélection
if cell.value = 0 then
Si le contenu de la cellule =0
tot = tot + cell.value
Ajouter la valeur de la cellule à tot, soit 0, puisque tu ne le fais que si la cellule =0

Mais cela ne marche pas. Faux, si tot=0 au départ, et à l'arrivée, ça à pu fonctionner, mais ta formule n'est pas bonne
Ou alors, tu n'as pas donné la bonne partie de ta mùacro.
essaies avec un test
if celle.value 0 then

De plus, j'aimerais que cette valeur soit conservée en mémoire, même si je modifie les valeurs dans les cellules. Est-ce possible docteur ?

Pour la conservée, deux méthodes :
- Soit la stoker sur une feuille : ça a l'avantage et l'incovénient de ne pas être remis à zéro lors de l'ouverture/fermeture du classeur :
Sheets('feuille stockage').range('A1')= Sheets('feuille stockage').range('A1') + Cell.value

- Soit créer une variable gobale :
Dans un module général, cette variable sera utilisable par toutes macros, dans un module de classe, seules les macros sur le même module pourront l'utiliser.

En haut du module, dans la partie '(Général)'-'(Déclaration)', tu mets la déclaration de ta variable
Public Tot as Double
Par exemple
A+
 

Gorfael

XLDnaute Barbatruc
Re-salut
problème d'édition avec les Sup et inf
Dans mon post précédent, lire :
Ou alors, tu n'as pas donné la bonne partie de ta macro.
essaies avec un test Différent de
if celle.value Différent de 0 then

au lieu de
Ou alors, tu n'as pas donné la bonne partie de ta mùacro.
essaies avec un test
if celle.value 0 then
À l'aperçu, ça passe, mais pas quand tu postes.

PS, je voulais juste savoir si c'était bien un corsaire II qui fait le tonneau ?

Message édité par: Gorfael, à: 21/04/2006 13:17
 

Epsilon 17

XLDnaute Occasionnel
Temjeh,Gorfael et vous tous bonjour,

dans la formule d'origine je compte le nombre de cellules qui contiennent des valeurs négatives (if cell.value < 0 then nombre = nombre + 1). Cela marche super

Ce que je cherche maintenant c'est de faire la somme des valeurs contenues dans les cellules, mais uniquement les valeurs positives. Cette valeur doit me servir ensuite de base de calcul lorsque je modifie les valeurs. Je deviens difficile, mais j'aime bien n'utiliser qu'au minimum les feuilles pour stoker les infos. Je ne suis pas sur mon ordi, donc je ne peux joindre le fichier.

Gorfael désolé, je ne sais pas du tout, j'ai trouvé cette image sur internet et je l'ai trouvée jolie

Merci encore à vous tous
 

Gorfael

XLDnaute Barbatruc
Epsilon 17 écrit:
Ce que je cherche maintenant c'est de faire la somme des valeurs contenues dans les cellules, mais uniquement les valeurs positives.
Salut
tu sais déjà utiliser la boucle each, donc ton instruction vas être du genre :

For each Cell in selection
if cell.value > o then
variable = variable + cell.value
end if
next
A+
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour Pascal, Temjeh et Gorfael, bonjour à toutes et à tous :)

Dans ton cas, Pascal, je privilégierais à priori les fonctions de feuilles de calculs qui font très bien le travail (CountIf et SumIf).

Sinon, Gorfael t'a donné 2 manières de sauvegarder les valeurs calculées :

[ul][li]dans une cellule d'une feuille de calcul (j'aime pas trop non plus :pinch: )[/li]

[li]dans une variable globale qui malheureusement perd son contenu à la fermeture du classeur.[/li][/ul]

Il existe une autre méthode (au moins), c'est de les enregistrer sous des noms dans le classeur.

Dans le fichier joint, tu trouveras une façon de procéder en utilisant la zone des noms masqués (l'utilisateur ne peut les voir) inspirée du Ce lien n'existe plus.

[file name=Epsilon17_StockerNombres.zip size=11919]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Epsilon17_StockerNombres.zip[/file]

A+ ;)
 

Pièces jointes

  • Epsilon17_StockerNombres.zip
    11.6 KB · Affichages: 23

Gorfael

XLDnaute Barbatruc
Salut Charly2
J'ai regarder ta méthode de sauvegarde de variables. Tu utilises une fonction Excel4 pour définir ta variable de stockage.
En fait, si j'ai bien compris, tu stockes ta variable nombre sous une forme texte que tu attribue à un nom caché. C'est une approche interessante, mais je préfère stocker sur une feuille masquée, ça me semble plus facile et moins sujet à problème.
Mais l'avantage d'Excel est justement dans la diversité des méthodes.
A+
 

Charly2

Nous a quittés en 2006
Repose en paix
Salut Gorfael,

La réponse est OUI pour l'utilisation de la fonction Excel4. Il est tout à fait possible d'utiliser un nom sans passer par une fonction XL4 et de mettre sa propriété Visible à False.

Excel offre effectivement un éventail de choix pour la réalisation d'une opération et chacun choisi celui avec lequel il se sent plus à l'aise. Par contre, je ne suis pas d'accord quand tu dis que l'utilisation d'une feuille masquée est plus facile et moins sujet à problème : quand on sait comment on stocke, on sait également comment récupérer des données.

En général, je privilégie les solutions les moins consommatrices de ressources, et j'ai testé les solutions par nom masqué et feuille masquée (XL97 / Windows98SE - fichier ci-dessus) :

-> Nom masqué, 1 feuille dans le classeur :
      Taille du fichier sauvegardé (avec ou sans création de nom) = 32 768 octets

-> Feuille masquée, 2 feuilles dans le classeur (la seconde sans aucun format particulier) :
      Taille du fichier (sans sauvegarde) = 34 304 octets

      Taille du fichier (avec sauvegarde) = 36 864 octets.

Certes, c'est un détail ! Mais je préfère économiser de 1,5 Ko à 2 Ko quand j'ai le choix, surtout pour sauvegarder les valeurs de 2 variables :)

A+ ;)
 

Epsilon 17

XLDnaute Occasionnel
Bonjour Temjeh, Gorfael, Charly2 , le Forum

Merci à tous pour votre aide, c'est sympa de passer un peu de votre temps pour moi.

Temjeh, je vais tester ta formule avec 'sumif' car, Gorfael, j'ai essayé avec variable = variable + cell.value mais cela ne marche pas. J'ai pourtant fait pareil que pour variable = variable + 1 qui fonctionne à merveille.

Pour ce qui est de la sauvegarde de ma somme, je laisse tomber car en fait, ce que je voulais c'est que ma sauvegarde reste 'à vie', c'est à dire même après fermeture d'Excel et même après modification des valeurs dans les cellules. Mais en réfléchissant, ce n'est pas utile pour ce que je fais.

Je vous tiendrai au courant de l'évolution de mon fichier.

Merci encore

Bye, bye
 

Epsilon 17

XLDnaute Occasionnel
Bonjour à toutes et à tous, bonjour le Forum

Bon j'abandonne, cela ne marche pas. Je vous joint donc le fichier. Je suppose qu'il existe grand nombre de fichiers identiques mais ce qui est amusant c'est de le créer et de ramer pour trouver les bonnes formules.
Un exemple de crédit que vous pouvez utiliser pour tester mon programme :
60000 euros empruntés à 4,9 % annuel pour 144 mensualités de 551,90 euros

Le userform ne s'ouvre pas automatiquement, il vous faudra l'ouvrir. Quand je demande le calcul des intérêts à payer, Excel m'affiche un e erreur '13' : incompatibilité de type

Si vous pouviez m'expliquer mon erreur, Merci d'avance [file name=pret2.zip size=19749]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/pret2.zip[/file]
 

Pièces jointes

  • pret2.zip
    19.3 KB · Affichages: 20
  • pret2.zip
    19.3 KB · Affichages: 23
  • pret2.zip
    19.3 KB · Affichages: 23

Statistiques des forums

Discussions
312 219
Messages
2 086 369
Membres
103 197
dernier inscrit
sandrine.lacaussade@orang