[vba] probleme addition

antic80 Messages postés 4877 Statut Contributeur -  
antic80 Messages postés 4877 Statut Contributeur -
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 ?
Configuration: Windows XP
Internet Explorer 6.0

19 réponses

  1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
    1. antic80 Messages postés 4877 Statut Contributeur 1 178
       
      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
  2. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour antic80,,
    Oui d'accord, mais pourquoi total1.....total2.... je ne comprend pas !!
    0
    1. antic80 Messages postés 4877 Statut Contributeur 1 178
       
      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
  3. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour antic80,
    est-ce juste: le tableau est donc tableau(5,10) !
    0
    1. antic80 Messages postés 4877 Statut Contributeur 1 178
       
      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
  4. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour antic80,
    Ok j'ai compris et le total de chaque colonnes est inéré sur une feuille ?
    Un moment je reviens .....
    0
    1. antic80 Messages postés 4877 Statut Contributeur 1 178
       
      oui c ca
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
    1. antic80 Messages postés 4877 Statut Contributeur 1 178
       
      ok je vais voir et vous tiens au courant
      0
    2. antic80 Messages postés 4877 Statut Contributeur 1 178
       
      le soucis est que total ne prend qu'une valeur

      pour recopier les 12 totaux ca va poser probleme
      0
  7. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
    1. antic80 Messages postés 4877 Statut Contributeur 1 178
       
      ok je n'avais pas percuter
      0
  8. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
  9. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    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
  10. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
    1. antic80 Messages postés 4877 Statut Contributeur 1 178
       
      ce qu'il y a au dessus ne marche pas

      la macro ne m'additionne pas les valeurs
      0
  11. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
  12. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    le code en lui meme ne marche pas

    par contre désolé mais les données sont confidentiels impossible de les envoyer
    0
  13. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonsoir antic80,
    Ok, même par là pingou2ccm@bluewin.ch c'est confidentiel .
    0
  14. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    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
  15. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
  16. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    ok merci a toi
    0
  17. Amnesic
     
    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
    1. antic80 Messages postés 4877 Statut Contributeur 1 178
       
      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
  18. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
  19. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    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
  20. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour antic80,
    Envoyez moi le/s code/s concerné/s, se sera plus simple.
    0
    1. antic80 Messages postés 4877 Statut Contributeur 1 178
       
      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