VBA Excel : Addition de deux variables

KMIKZ Messages postés 21 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 26 avril 2008 - 25 juil. 2007 à 14:28
Ziragora Alphonse Messages postés 1 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 3 août 2007 - 3 août 2007 à 11:41
Bonjour à tous voici mon petit bout de programme qui me pose problème :

Range("A1").Activate        If ActiveCell.Offset(0, 2).Value 6 And ActiveCell.Offset(0, 3).Value "C" Then
            y = y + 1
            x = x + totaltActiveCell.Offset(0, 1).Value
        End If

J'ai un tableau dans lequel je recherche dans la colonne C la valeur 6 et dans la colonne D la lettre "C"
Je compte toutes les lignes où la combinaison "6C" apparait (y=y+1)
Et je voudrais maintenant calculer la somme des cases B lorsque j'ai la combinaison "6C"
Mais la macro se bloque sur la ligne en rouge. Quelqu'un a une idée ???

Je voulais que pour la première ligne "6C" rencontrée il mémorise la valeur de la case B (x) pour l'additionner à la valeur de la case B de la seconde ligne "6C" rencontrée et ainsi de suite.

KMIKZ

8 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
25 juil. 2007 à 14:56
Salut,
Pourquoi totaltActiveCell ?
Pourquoi pas simplement ActiveCell
@+: Ju£i?n
Pensez: Réponse acceptée
0
KMIKZ Messages postés 21 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 26 avril 2008
25 juil. 2007 à 15:02
Ah oui désolé la ligne en question est :

x = x + ActiveCell.Offset(0, 1).Value

Merci jrivet
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
25 juil. 2007 à 15:20
Et pourquoi ne pas créer une colonne E concaténant les colonnes C et D ?
E: =C1&D1 etc etc ...

Plus qu'à faire dans une celulle à part un =NB.Si(E:E;"6C") pour avoir le nb d'occurence, et un =SOMME.SI(E:E;"6C";"B:B") pour avoir la somme des cases B quand il y a 6C dans leurs lignes ?

A moins qu'il ne faille absolument le faire en VBA ? Et même dans ce cas, à moins que tu n'es pas le choix, je ne m'embêterais pas avec les Offset, je ferais plutôt une boucle :

Somme = 0
For i = 1 to 10 'Je prends 10 lignes, mais tu fais le nb que tu veux bien sûr ^^   if cells(i,3).value "6" AND cells(i,4).value"C" then
      somme = somme + cells(i,2).value
   end if
Next i

Molenn
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
26 juil. 2007 à 00:49
Ou tu pourrais y aller avec la fonction SOMMEPROD
SOMMEPROD((C2:C206)*(D2:D20="C")*(B2:B20))

L'important, c'est que tous les Range soient identiques, c'est-à-dire de la ligne 2 à 20 dans mon exemple. Les premières séries de parenthèses sont les critères. La dernière est la plage sur laquelle tu veux faire la somme. Tu peux ajouter d'autres critères au besoin.

C'est une formule qui est gourmande, donc à utiliser avec parcimonie

MPi
0

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

Posez votre question
KMIKZ Messages postés 21 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 26 avril 2008
26 juil. 2007 à 10:25
Merci pour les propositions

Est-ce que ça vous aide si je vous dis que l'erreur affichée est "Incompabilité de type" ???

KMIKZ
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
26 juil. 2007 à 10:42
Salut,
Mets peu être .text au lieu de .Value.

Ou bien encore mets un point d'arret avant que cela plante pour voir la valeur de ActiveCell.Offset(0, 1).Value

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
26 juil. 2007 à 11:03
Si tu tiens à passer par VBA, utilise des conditions avec
IsNumeric (voir l'aide)avant de faire des additions.
Tes nombres, si ce sont tous des nombres... sont peut-être au format texte ou encore seulement quelques-uns d'entre eux.

MPi
0
Ziragora Alphonse Messages postés 1 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 3 août 2007
3 août 2007 à 11:41
Bonjour,
Tout en respectant l'utilisation de "Offset", je trouve qu'il y a une solution. Si l'on pense que ton programme est complet, il ne donnera pas toutes les valeurs à stocker dans x. J'ai rajouter les lignes en rouge et ça marche bien.... Il faudra peut-être définir les variables "FinTableau" et "Rg" si ton module contient l'instruction "Option Explicit". Sinon si l'erreur continue à apparaître à la ligne en rose, il faudra penser à  vérifier le format des cellules de la colonne B(Si le format est text l'erreur sera évidente).Tu peux également mettre les valeurs de x dans la colonne A en insérant la ligne suivante après la rose: ActiveCell.Value = x

FinTableau = Range("C65536").End(xlUp).Row
For Each Rg In Range(Cells(1, 1), Cells(1, 1).Offset(FinTableau, 0))
Rg.Activate        If ActiveCell.Offset(0, 2).Value 6 And ActiveCell.Offset(0, 3).Value "C" Then
            Y = Y + 1
            x = x + ActiveCell.Offset(0, 1).Value
        End If
Next
0
Rejoignez-nous