Tableau

Résolu
Pinesol Messages postés 4 Date d'inscription lundi 23 juin 2008 Statut Membre Dernière intervention 3 juillet 2008 - 23 juin 2008 à 17:42
sturtrid Messages postés 133 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 13 juillet 2012 - 4 juil. 2008 à 05:05
Bonjour,

J'ai déclaré un tableau public dans un module.
Par la suite j'essaie de remplir ce tableau dans une boucle for mais le tableau ne veut pas prendre la valeur.  Il reste toujours a 0.

Déclaration du tableau ( dans un module )

Public Tab_debits As Double

Boucle for
An = 1
Mois = 1

For Janvier = 1 To 31
              
            ActiveSheet.Cells(Janvier, 40 + An).Value = ActiveSheet.Cells(Debut, 1 + mois).Value
            Tab_debits(Janvier) = ActiveSheet.Cells(Janvier, 40 + An).Value
            Debut = Debut + 1
   
Next Janvier

La valeurs ActiveSheet.Cells(Janvier, 40 + An).Value est correct.
Par contre Tab_debits(Janvier) est toujours = 0

Est-qu'il y a une personne qui pourrait m'aider
Merci et bonne fin de journée

10 réponses

sturtrid Messages postés 133 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 13 juillet 2012 1
2 juil. 2008 à 20:19
Salut Pinesol !



'# L'indice des tableaux commence à 0 donc Tab_debits(30) contient 31 valeurs...


Public Tab_debits(31) As Double --> Public Tab_debits(30As Double

'# Tu fais ces déclarations en implicite, ce qui n'est pas conseillé...
'mais ça c'est à toi de voir !
An =  1  --> Dim An as integer = 1
Mois = 1--> Dim Moi as integer = 1

'# Du coup, pour ta boucle on modifie un peut...
'==> Tu avais ça:
For Janvier = 1 To 31
  
  ActiveSheet.Cells(Janvier, 40 + An).Value = _
  ActiveSheet.Cells(Debut, 1 + mois).Value
  Tab_debits(Janvier) = ActiveSheet.Cells(Janvier, 40 + An).Value
  Debut = Debut + 1
  
Next

'==> tu peux mettre au choix:
[For Janvier = 0 To 30] ou

[


For Janvier = 0 To Tab_debits.GetUpperBound(0)]

'# Pour cette ligne, ta variable Debut est-elle déclarée ? Sa valeur de départ?
'Parce que sinon utilise janvier, t'économise une déclaration:



[

ActiveSheet.Cells(Janvier, 40 + An).Value = _
ActiveSheet.Cells(Debut, 1 + Mois).Value]
ou

[

ActiveSheet.Cells(Janvier, 40 + An).Value = _
ActiveSheet.Cells( Janvier , 1 + Mois).Value]

'# Ensuite, si tu es sure que ActiveSheet.Cells(Janvier, 40 + An).Value soit de type Double,
'c'est OK, sinon je te conseille de faire un Cast... Voir même de vérifier avant qu'elle
'est de type numérique... Je mets tout pour l'exemple:

'# En décomposant les actions: ==================================
'Test si numérique...
if IsNumeric(ActiveSheet.Cells(Janvier, 40 + An).Value) then

'Cast en type Double...
Tab_debits(Janvier) = CDbl(ActiveSheet.Cells(Janvier, 40 + An).Value)

'Incrémentation non obligatoire, tu peux utiliser ton Janvier...
Debut +=  1

end if
'===============================================================

'# En une fois:

'Utilisation d'un TryCast (évite la mise en place d'un gestionnaire d'exception)...
if(Double.TryCast(ActiveSheet.Cells(Janvier, 40 + An).Value, Tab_debits(Janvier))then
[... ]
end if


<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->
Coloration syntaxique vb/vba/vb.net




Voilà quelques idées... ++
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 juin 2008 à 17:43
salut,

Public Tab_debits(1 to 31) As Double

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
23 juin 2008 à 17:51
salut,

ben non c'est pas aussi simple mais ce n'est pas tres compliqué non plus:

2 solutions:

1\

Public Tab_debits(31) As Double

Boucle for
An = 1
Mois = 1

For Janvier = 1 To 31
              
            ActiveSheet.Cells(Janvier, 40 + An).Value = ActiveSheet.Cells(Debut, 1 + mois).Value
            Tab_debits(Janvier) = ActiveSheet.Cells(Janvier, 40 + An).Value
            Debut = Debut + 1
   
Next Janvier

2\

Public Tab_debits() As Double

Boucle for
An = 1
Mois = 1
Redim Tab_debits(31)
For Janvier = 1 To 31
              
            ActiveSheet.Cells(Janvier, 40 + An).Value = ActiveSheet.Cells(Debut, 1 + mois).Value
            Tab_debits(Janvier) = ActiveSheet.Cells(Janvier, 40 + An).Value
            Debut = Debut + 1
   
Next Janvier

ici la deuxieme solution peu sembler inutile car la dimension de ton tableau sera toujours fixe. Cette methode est interessante dans le cas de tableaux a dimensions variable.
Attention un redim efface le contenu du tableau. tu peux aussi ajouter une option lors du redim qui te permet de conserver les donnés deja dans le tableau:

Redim Preserve Tab_debits(31).

A+
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
23 juin 2008 à 17:54
...
bon ben pas assé rapide sur coup la

Salut Mortalino

A+
0

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

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
23 juin 2008 à 17:58
salut bigfish_le vrai;

t'as l'avantage de donner des exemples, ça compense

@++

le mystérieux chevalier,"Provençal, le gaulois"
Forum Office & VBA
0
Pinesol Messages postés 4 Date d'inscription lundi 23 juin 2008 Statut Membre Dernière intervention 3 juillet 2008
23 juin 2008 à 19:27
Bonjour,

Merci à tous mais malheureusement ca ne fonctionne pas.
J'ai essayé les 3 méthodes.

Merci encore et bonne fin de journée
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 juin 2008 à 01:59
tu peux être encore moins précis pour avoir plus d'aide?!
çà marche pas quoi....
ta touche CTRL+V ?

détails requis !!!!
0
Pinesol Messages postés 4 Date d'inscription lundi 23 juin 2008 Statut Membre Dernière intervention 3 juillet 2008
25 juin 2008 à 19:25
Bonjour,


Désolé pour le manque de précision.

1 er essaie


Dans un module j'ai déclaré :


Public Tab_debits(31) As Double

Dans un userform j'ai écrit :

An = 1
Mois = 1

For Janvier = 1 To 31
              
            ActiveSheet.Cells(Janvier, 40 + An).Value = ActiveSheet.Cells(Debut, 1 + mois).Value
            Tab_debits(Janvier) = ActiveSheet.Cells(Janvier, 40 + An).Value
            Debut = Debut + 1
   
Next Janvier

Deuxième essaie

Dans un module je déclare :

Public Tab_debits (1 to 31) As Double

Puis dans le userforme j'écris:

An = 1
Mois = 1

For Janvier = 1 To 31
              
            ActiveSheet.Cells(Janvier, 40 + An).Value = ActiveSheet.Cells(Debut, 1 + mois).Value
            Tab_debits(Janvier) = ActiveSheet.Cells(Janvier, 40 + An).Value
            Debut = Debut + 1
   
Next Janvier

Ce qui arrive, c'est que Tab_debits(Janvier) ne prend jamais la valeur de la cellule.
La valeur de "ActiveSheet.Cells(Janvier, 40 + An).Value" change a chaque fois. ( C'est correct ).
Mais la valeur que je veux que le tableau prenne ne s'inscrie jamais dans le tableau.

Merci et bonne fin de journée
0
Pinesol Messages postés 4 Date d'inscription lundi 23 juin 2008 Statut Membre Dernière intervention 3 juillet 2008
3 juil. 2008 à 21:41
Salut sturdrid

Merci beaucoup ca fonctionne à merveile mais lol

j'ai un autre pépin,

Voici le contexte

Je désire créer une fonction qui rempli un tableau passé en paramètre,

Public Function remplissage(tabl As Variant)


Dim i As Integer




    For i = 1 To 20
   
        tabl(i) = Sheets("Courbe_eff").Cells(3 + i, 3)
       
    Next i
       




End Function

Je déclare un tableau dans un module :

Public Tab_eff1(21) As Double

Et j'appel la fonction de la facon suivante :

remplissage (Tab_eff1)

Résultat :  Quand je le fais pas à pas, les tab(i) prennent la valeur de la cellule.  Par contre le tableau que je passe en paramètre reste à 0 et ne prend pas la valeur du tabl(i)

Est-ce que tu pourrais me donner quelques idée

Merci pour tout et bonne fin de journée
0
sturtrid Messages postés 133 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 13 juillet 2012 1
4 juil. 2008 à 05:05
Désolé, occupé ce soir...

Alors, heu.... vi...
Je sais pa si le bout de code que t'as posté représente exactement celui de ta source...
Sinon quelques trucs en passant:





' Là t'as 22 éléments mais dans ta boucle en gère seulement 20...


Dim Tab_eff1(21) As Double --> Dim Tab_eff1(19As Double



' Ensuite, tu fais appel à une fonction mais tu ne récupères pas la valeur qu'elle te renvoie...



' Alors faut choisir, selon le contexte exact soit tu utilises une fonction et tu stockes son retour,



' soit tu fais appel à une Sub, soit tu fais tout dans ta sous-routine Depart()


sans faire d'appel.

' Mais, dans ce que tu présentes et si tu veux vraiment faire appel à une Sub t'as pas besoin de
' passer


ton tableau en paramètre... Il est déclaré dans ton module...et n'est donc pas local !



    Public Sub Depart()

      
remplissage()


    End Sub

    Public Sub remplissage()

        Dim i As Integer




' Pour ton affectation, le minimum est de faire un Cast là encore... et de mettre .Value pour la cellule ciblée



        For i =   0 To 19
           
Tab_eff1(
i)  =   CDbl "Courbe_eff").Cells(<gras>4 + i3)<gras>.Value)
        Next

    End Sub



' Sinon je sais pas comment tu gères excel... Du genre:



    Dim excelApp, excelBooks, excelSheets As Object

    excelApp  = CreateObject("Excel.Application")
    excelBooks = excelApp.WorkBooks.Open("C:\MonClasseur.xls")
    excelSheets = excelBooks.Sheets(

"Courbe_eff"

)



    For i =   0 To 19


            Tab_eff1(i)  = <gras>CDbl


excelSheets


.Cells(



4 + i


, 3)<gras>.Value
)


    Next







<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->

Coloration syntaxique vb/vba/vb.net










<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->
Bon voilà... Après c'est juste des idées, je sais pas comment ça se passe réellement dans ta source. Vu que ça tient en 3lignes, t'as peut être pas besoin d'appeler une Sub pour faire ça...

Bon courage pour la suite...
++
0
Rejoignez-nous