[vba] probleme addition

Fermé
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 - 13 mars 2008 à 16:27
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 - 14 mars 2008 à 14:55
Bonjour,

j'ai un tableau de dimension n : tableau(n)

j'ai un total qui se fait comme suit

total = total + tableau(n)

comme j'ai plusieurs total a faire j'ai fait un truc comme ca

for i= 1to 5
total(i)=total(i)+tableau(i)
next i

en admettant que mes valeurs soit 2,3,4,5,6 au lieu d'obtenir 20 j'obtient 23456

pourquoi ?

19 réponses

Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
13 mars 2008 à 16:45
Bonjour,
Juste en passant: initialiser la variable total =0

J'admets que le tableau (n) et une variable éclarée
Dim tableau(4) as Integer ? conrient les valeurs 2,3,4,5,6

et votre bloucle devient

for i= 0 to 4 ' le 0 base de départ
total=total+tableau(i)
next

0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
13 mars 2008 à 16:47
oui c'est ce que j'avais fait au départ mais je n'ai pas qu'un total a faire mais 10 donc je me vois mal ecrire

total1....
total2...
etc...
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
13 mars 2008 à 17:11
Bonjour antic80,,
Oui d'accord, mais pourquoi total1.....total2.... je ne comprend pas !!
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
13 mars 2008 à 17:12
en fait j'ai 12 colonnes et je dois faire le total de chaque colonne pour le stocker dans une autre feuille

donc total1 = total colonne 1 etc...
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
13 mars 2008 à 17:15
Bonjour antic80,
est-ce juste: le tableau est donc tableau(5,10) !
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
13 mars 2008 à 17:18
oui voila le tableau qui stocke les valeurs en vue de les additionner est a double dimension

tableau (1 to 12 ,1 to 16)
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
13 mars 2008 à 17:30
Bonjour antic80,
Ok j'ai compris et le total de chaque colonnes est inéré sur une feuille ?
Un moment je reviens .....
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
13 mars 2008 à 17:31
oui c ca
0

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

Posez votre question
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
13 mars 2008 à 17:45
Bonjour antic80,
Je vous propose se qui suit:
Sub matrice()
Dim tableau(12, 16) As Integer

total = 0 ' -- réinitialiser la variable

For Co = 0 To 16 ' boucle sur colonne

For Li = 0 To 12 ' boucle sur ligne
total = total + tableau(Li, Co)
Next
InputBox (total) ' --- écrire dans la feuille
total = 0 ' -- réinitialiser la variable

Next

End Sub
J'espère que c'est se que vous cherchez !
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
13 mars 2008 à 17:46
ok je vais voir et vous tiens au courant
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
13 mars 2008 à 17:51
le soucis est que total ne prend qu'une valeur

pour recopier les 12 totaux ca va poser probleme
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
13 mars 2008 à 18:14
Bonjour antic80,
Vous avez bien dit ceci : le total de chaque colonne pour le stocker dans une autre feuille
Donc dès que le total d'une colonne est réalisé je vais inscrire le résultat sur la feuille adéquate et je continue ma boucle.
C'est ici qu'il daut mettre l'instruction .... InputBox (total) ' --- écrire dans la feuille
Ou alors ou est le problème...!
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
13 mars 2008 à 18:35
ok je n'avais pas percuter
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
13 mars 2008 à 18:52
Bonjour antic80,
Merci.
A titre d'information cette instruction permet d'écrire dans un autre classeur (Il doit être ouvert biensur)
Workbooks("Classeur1.xls").Worksheets("Feuil2").Cells(1, 3) = total
à mettre à la place de ----- InputBox (total) ' --- écrire dans la feuille
A une prochaine.
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
13 mars 2008 à 19:17
voici mon code dit moi ce que tu en penses

Sheets("par secteur").Select

lastline = Range("p65365").End(xlUp).Row

For i = 1 To lastline
If Cells(i, 2).Text = annéedébut And Cells(i, 1).Text = "Décembre" And Cells(i, 4) = secteur Then
Cells(i, 1).Select

j = j + 1

For k = 1 To 15
Décembre(j, k) = ActiveCell.Offset(0, k).Value
Next

End If

Next i

For z = 4 To 12
For p = 1 To j

total = total + Décembre(p, z)

MsgBox total

Next p

Sheets("test").Select
Range("a65365").End(xlUp).Select
ActiveCell.Value = "Décembre"
ActiveCell.Offset(0, 1) = annéedébut

ActiveCell.Offset(0, 2) = secteur
ActiveCell.Offset(0, z - 1) = total
Next z
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
13 mars 2008 à 20:13
Bonjour antic80,
Sans connaitre l'application elle même c'est pas facile, par contre la partie qui est semblable à notre échange de courriel me semble parfaite.
Je constate que l'autre feuille est dans le même classeur.
J'espère que tout va marché super bien.
Bonne soirée
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
13 mars 2008 à 20:15
ce qu'il y a au dessus ne marche pas

la macro ne m'additionne pas les valeurs
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
13 mars 2008 à 20:33
Bonsoir antic80,
Je veux bien chercher mais merci de me préciser quelle partie au dessus ....
Ou mieux le classeur sur http://www.cijoint.fr/ ou https://www.cjoint.com/ car s'est un peu compliqué à immaginer les données.
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
13 mars 2008 à 20:36
le code en lui meme ne marche pas

par contre désolé mais les données sont confidentiels impossible de les envoyer
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
13 mars 2008 à 20:49
Bonsoir antic80,
Ok, même par là pingou2ccm@bluewin.ch c'est confidentiel .
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
13 mars 2008 à 20:56
en fait le tableau ce présente comme suit

Décembre 2007 127150 secteur 1 0 0 1 1 0 0
Décembre 2007 127160 secteur 1 0 0 0 0 3 0
Décembre 2007 127170 secteur 1 1 0 0 1 3 0
Décembre 2007 127180 secteur 1 0 1 0 0 1 0
Décembre 2007 127190 secteur 1 0 1 0 3 0 0
Décembre 2007 127210 secteur 2 0 1 0 0 3 0
Décembre 2007 127220 secteur 2 0 1 1 4 0 1
Décembre 2007 127230 secteur 2 0 0 0 0 0 0
Décembre 2007 127240 secteur 2 0 0 0 0 0 0
Décembre 2007 127250 secteur 2 0 0 1 0 2 0


j'ai la meme chose pour tout les mois de l'année et pour 2006, 2007 etc.....

je choisis l'année 2006 et secteur 1

le but est d'obtenir le total de chaque colonne pour les lignes qui correspondent aux critères

puis de copier vers une autre feuille du classeur pour obtenir ceci

Décembre 2007 secteur 1 total colonne 1, total colonne 2, total colonne 3 etc....
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
13 mars 2008 à 21:10
Bonsoir antic80,
Merci, je vais essayer de m'en sortir, pour l'instant je m'arrête et je reprendrai demain.
Bonne soirée.
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
13 mars 2008 à 21:14
ok merci a toi
0
Bonjour à vous deux,
désolé de m'immiscer dans votre correspondance, mais ... vu le format des données initiales (post 21), n'est-il pas judicieux d'utiliser un tableau croisé dynamique ?
Un tableau croisé pourra tout à fait renvoyer dans une autre feuille ou dans un autre classeur le total de chaque colonne (si elles sont identifiées par un en-tête), en fonction des critères choisis (mis en champs de page).
Je dis une connerie ?
A+
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
14 mars 2008 à 08:12
merci pour ta réponse mias je dois automatiquement passé par vba car mon tableau contient des centaines de lignes et la personne qui va l'utiliser est incapable de réaliser ce genre de manipulation. de plus la je montre un exemple avec 2007, mais si la personne choisi de travailler sur 2005....
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
14 mars 2008 à 10:39
Bonjour antic80,
Ci dessous la procédure :

Option Base 1

Sub antic80()
Dim tableau(12, 15) As String
Dim total As Integer
Sheets("par secteur").Select

lastline = Range("A65365").End(xlUp).Row ' échange colonne "p" par "A"
'------------------------------------------------------------
' je leurs donnent une valeur
annéedébut = 2007
mois = "Décembre"
secteur = "secteur 1"
'------------------------------------------------------------
For i = 1 To lastline

If Cells(i, 2) = annéedébut And Cells(i, 1) = mois And Cells(i, 4) = secteur Then
Cells(i, 1).Select
j = j + 1
For k = 1 To 15
tableau(j, k) = ActiveCell.Offset(0, k - 1).Value
Next

End If
Next i

For z = 5 To 12
If IsNumeric(tableau(1, z)) Then
For p = 1 To j
If IsNumeric(tableau(p, z)) Then
total = total + tableau(p, z)
' MsgBox total
End If
Next p
Sheets("test").Select
If z = 5 Then ' on écrit sur la même ligne
Range("A65365").End(xlUp).Offset(1, 0).Select
ActiveCell.Value = tableau(1, 1)
ActiveCell.Offset(0, 1) = tableau(1, 2)
ActiveCell.Offset(0, 2) = tableau(1, 4)
End If
ActiveCell.Offset(0, z - 2) = total
' --- Réinitialiser la variable "total" sur 0
total = 0
End If
Next z

End Sub

Chez moi sa marche.
Bonne fin de semaine.
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
14 mars 2008 à 11:47
merci pour ta réponse

j'ai encore 2 questions

tout d'abord je dois saisir les 2 années dans des textbox et choisir le secteur dans une combobox. le probleme est que le reste du code n'arrive pas a récuperer les bonnes valeurs.

ensuite comme je choisi 2 années j'aimerais recopier ce code pour la 2e année mais plutot que de m'inscire les 2 années l'une en dessous de l'autre le code m'efface la 1ere ligne.
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
14 mars 2008 à 13:21
Bonjour antic80,
Envoyez moi le/s code/s concerné/s, se sera plus simple.
0
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
14 mars 2008 à 14:55
en fait c'est ici

annéedébut = Année1.Value
annéefin = Année2.Value


'décembre'


j = 0


Sheets("par secteur").Select
lastline = Range("A65365").End(xlUp).Row ' échange colonne "p" par "A"
'------------------------------------------------------------
' je leurs donnent une valeur
mois = "Décembre"
'------------------------------------------------------------
For i = 1 To lastline
If Cells(i, 2) = annéedébut And Cells(i, 1) = mois And Cells(i, 4) = "Cergy Village" Then
Cells(i, 1).Select
j = j + 1
For k = 1 To 15
tableau(j, k) = ActiveCell.Offset(0, k - 1).Value

au niveau de If Cells(i, 2) = annéedébut

si j'ecris directement 2006 a la place de annéedébut ca marche

si je met annéedébut seulement ca ne marche pas

Année1 et Année2 ce sont les noms de mes textbox
0