IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ecrire dans une cellule [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Points : 80
    Points
    80
    Par défaut Ecrire dans une cellule
    Bonjour,

    J'ai créé une boucle FOR qui me calcule une valeur RESULTAT à chaque tour. J'aimerais que chacune des valeur de RESULTAT soit inscrite dans une cellule de ma feuille XXX pour ensuite les exploiter et créer des graphes.

    J'ai essayé ceci comme boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For i = 1 + Count To Annee2 - 1 + Count
     
            Total1 = Total1 * (1 + Actualisation)
     
            Worksheets("XXX").Cells(i, Colonne).Value = Total1
     
            Actualisation = Actualisation * (1 + Taux_Act)
     
        Next i
    mais rien ne s'inscrit dans ma feuille XXX.

    Que faire?

    Merci d'avance

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Comment sont alimentées les variables colonne et count?
    Jérôme

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Points : 80
    Points
    80
    Par défaut
    count et colonne sont deux "Integer" que je défini avant le début de la boucle. Ce sont des constantes.

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    as tu essayer de mettre un point d'arret sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("XXX").Cells(i, Colonne).Value = Total1
    Pour voir si ton code boucle bien
    Jérôme

  5. #5
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    Pourrais tu en dire plus parce que pour moi le bout de code que tu nous montre fonctionne. Après si rien ne s'inscrit ça vient peu être de tes constantes qui sont mal définies, ou de ta boucle qui est mal définie, mais sans le reste du code on ne peut rien dire.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Points : 80
    Points
    80
    Par défaut
    as tu essayer de mettre un point d'arret sur la ligne
    Pour voir si ton code boucle bien
    En fait, c'est un bout de code que j'ai ajouté dans une fonction (qui me sommait les éléments calculés dans la boucle FOR) pour que celle-ci m'inscrive les résultats intermédiaires dans les cellules d'un tableau.

    Après l'ajout du code la fonction m'effectue toujours correctement la somme mais rien ne s'inscrit dans les cellules de XXX.

    Voici le code... mais rien qu'en le relisant après copie je me rend compte de quelques erreurs...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Public Function Calcul_Total(Phase As String, Objet1 As Long, Objet2 As Double, Objet3 As Double, Objet4 As Double, _
        Objet5 As Double, Annee As Double, DureeP1 As Double, DureeP2 As Double, DureeP3 As Double, Duree_totale As Double, _
        Taux_Act As Double) As Double
     
        Application.Volatile
     
        Dim Total1 As Double
        Dim Actualisation As Double
        Dim i As Integer
        Dim Count As Integer
        Dim Colonne As Integer
     
        If Phase = "Phase 1" Or Phase = "MGlobale" Then
     
            Count = 3
     
            If Phase = "Phase 1" Then
     
                Colonne = 2
     
            ElseIf Phase = "MGlobale" Then
     
                Colonne = 5
     
            End If
     
        ElseIf Phase = "Phase 2" Then
     
            Count = DureeP1 + 4
     
        ElseIf Phase = "Phase 3" Then
     
            Count = DureeP2 + DureeP1 + 4
     
        End If
     
        Total1 = (Objet1 + Objet2 + Objet3 + Objet4 + Objet5) / Annee
        Actualisation = 1 + Taux_Act
     
        Worksheets("XXX").Range(Cells(Count, Colonne), Cells(Count, Colonne)).Value = "Total1"
     
        Dim Annee2 As Integer
        Annee2 = CInt(Annee)
     
        For i = 1 + Count To Annee2 - 1 + Count
     
            Total1 = Total1 * (1 + Actualisation)
     
            Worksheets("XXX").Cells(i, Colonne).Value = Total1
     
            Actualisation = Actualisation * (1 + Taux_Act)
     
        Next i
     
        Calcul_Total = Total1
     
    End Function

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Points : 80
    Points
    80
    Par défaut
    Je viens d'essayer de mettre un point d'arrêt mais comme il s'agit d'une fonction, ça n'a pas l'air de s'arrêter beaucoup.

    Par ailleurs, petite rectification par rapport à ce que je disais tout à l'heure. En fait, ma fonction ne fonctionne plus du tout. La somme ne se calcule plus, j'ai le message d'erreur #VALEUR! dans la cellule d'appel de la fonction.

    Je viens de corriger le code par rapport aux erreurs que j'ai constaté tout à l'heure mais cela ne fonctionne toujours pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    Function Calcul_Total(Phase As String, Objet1 As Long, Objet2 As Double, Objet3 As Double, Objet4 As Double, _
        Objet5 As Double, Annee As Double, DureeP1 As Double, DureeP2 As Double, DureeP3 As Double, Duree_totale As Double, _
        Taux_Act As Double) As Double
     
     
        Application.Volatile
     
        Dim Total1 As Double
        Dim Total As Double
        Dim Actualisation As Double
        Dim i As Integer
        Dim Count As Integer
        Dim Colonne As Integer
     
        If Phase = "Phase 1" Or Phase = "MGlobale" Then
     
            Count = 3
     
            If Phase = "Phase 1" Then
     
                Colonne = 2
     
            ElseIf Phase = "MGlobale" Then
     
                Colonne = 5
     
            End If
     
        ElseIf Phase = "Phase 2" Then
     
            Count = CInt(DureeP1 + 4)
     
        ElseIf Phase = "Phase 3" Then
     
            Count = CInt(DureeP2 + DureeP1 + 4)
     
        End If
     
        Total1 = (Objet1 + Objet2 + Objet3 + Objet4 + Objet5) / Annee
        Actualisation = 1 + Taux_Act
     
        Total = Total1
     
        Worksheets("XXX").Range(Cells(Count, Colonne), Cells(Count, Colonne)).Value = Total1
     
        Dim Annee2 As Integer
        Annee2 = CInt(Annee)
     
        For i = 1 + Count To Annee2 - 1 + Count
     
            Total = Total + Total1 * Actualisation
     
            Worksheets("XXX").Cells(i, Colonne).Value = Total1 * Actualisation
     
            Actualisation = Actualisation * (1 + Taux_Act)
     
        Next i
     
        Calcul_Total = Total
     
    End Function

  8. #8
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    je viens d'essayer ton code dans un classeur vierge et j'ai bein des données qui s'inscrivent dans la feuille. (J'ai juste modifier la nom de la feuille)

    Je ne vois aucun problème (hors test d'integrité des données)
    Jérôme

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Points : 80
    Points
    80
    Par défaut
    Et tu récupères aussi le la valeur de renvoi de la fonction (le total final) ?

  10. #10
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Oui, j'ai aussi le total
    Jérôme

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Points : 80
    Points
    80
    Par défaut
    ???????

    Je ne comprends vraiment pas ce qui ne va pas dans ma fonction...

  12. #12
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    si ton fichier ne contient pas de données confidentielles post le.
    Je pourrais tester si ca fonctionne sur mon popste
    Jérôme

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Points : 80
    Points
    80
    Par défaut
    C'est un fichier pour le boulot donc ça m'ennuie de le diffuser comme ça...

    Je viens de faire un essai. J'ai transformé ma function en sub pour voir à quel moment le programme bug. Apparemment à la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("XXX").Cells(Count, Colonne).Value = Total1
    VBA me renvoie le message, Erreur 1004: Erreur définie par l'application ou par l'objet

    Qu'est que ça veut dire?

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Points : 80
    Points
    80
    Par défaut
    Je viens de comprendre: j'avais oublié de donner une valeur à "Colonne"

    Effectivement, lorsque je lance la macro, tout se passe bien. Il doit y avoir un problème dans la rédaction de la fonction.

    J'ai placé des MsgBox régulièrement dans la fonction pour voir à quel moment ça plante. Apparemment, c'est la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("XXX").Cells(Count, Colonne).Value = Total1
    qui pose problème puisqu'au delà de cette ligne, rien ne se calcule, je ne reçois plus mes message box.

    Je ne comprend vraiment pas ce qui se passe.

  15. #15
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Quel est la valeur des variables a ce moment la?
    Jérôme

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Points : 80
    Points
    80
    Par défaut
    Count = 3 et Colonne = 2

    J'ai écris une macro Sub Ecrire() pour tester l'action d'envoyer une valeur dans une cellule de XXX. Cela fonctionne.

    Apparemment, c'est le fait d'écrire le code dans une fonction qui pose problème. J'appelle donc ma macro Ecrire(arg1,arg2...) depuis ma fonction.

    Seulement, lorsque je tape Ecrire(arg1...) dans mon code, VBA me dit qu'il attends un signe = après.

    Pourquoi?

  17. #17
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    peux tu faire voir le code qui appel la fonction
    Jérôme

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Points : 80
    Points
    80
    Par défaut
    Voici les deux codes: la macros et la fonction appelant la macro:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Sub Ecrire(Total1 As Double, Count As Integer, Colonne As Integer, Actualisation As Double)
     
    Application.Volatile
     
    Worksheets("XXX").Cells(Count, Colonne) = Total1 * Actualisation
     
    End Sub
     
     
    Function Calcul_Reconst (Phase As String, Objet1 As Double, Objet2 As Double, Annee As Double, DureeP1 As Double, DureeP2 As Double, DureeP3 As Double, Duree_totale As Double, _
        Taux_Act As Double) As Double
     
        Application.Volatile
     
        Dim Total1 As Double
        Dim Total As Double
        Dim Actualisation As Double
        Dim i As Integer
        Dim Count As Integer
        Dim Colonne As Integer
        Dim k As Object
     
        If Phase = "Phase 1" Or Phase = "MGlobale" Then
     
            Count = 3
     
            If Phase = "Phase 1" Then
     
                Colonne = 2
     
            ElseIf Phase = "MGlobale" Then
     
                Colonne = 9
     
            End If
     
        ElseIf Phase = "Phase 2" Then
     
            Count = DureeP1 + 4
     
            Colonne = 2
     
        ElseIf Phase = "Phase 3" Then
     
            Count = DureeP2 + DureeP1 + 4
     
            Colonne = 2
     
        End If
     
     
        Total1 = (Objet1 +Objet2) / Annee
        Actualisation = 1
     
        Total = Total1
     
        MsgBox " Count = " & Count
        MsgBox " Colonne = " & Colonne
        MsgBox " Total1 = " & Total1
     
        k = Application.Run("Ecrire", Total1, Count, Colonne, Actualisation)
     
        MsgBox " Total1 = " & Total1
     
        Actualisation = 1 + Taux_Act
        Dim Annee2 As Integer
        Annee2 = CInt(Annee)
     
        For i = (1 + Count) To (Annee2 - 1 + Count)
     
            Total = Total + Total1 * Actualisation
     
            k = Application.Run("Ecrire", Total1, i, Colonne, Actualisation)
     
            MsgBox " Total = " & Total
     
            Actualisation = Actualisation * (1 + Taux_Act)
     
        Next i
     
        Calcul_Reconst = Total
     
    End Function

  19. #19
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Désolé, je ne vois le code qui appel la fonction Calcul_Reconst
    Jérôme

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 178
    Points : 80
    Points
    80
    Par défaut
    La fonction Calcul_Reconst est appelée depuis une cellule de mon classeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Calcul_Reconst("Phase 1";E18;E25;E30;E33;E36;B6;B6;B40;B73;'CHIFFRAGE TOTAL'!C4;Hypothèses!B75)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Ecrire dans une cellule depuis une autre?
    Par noel45 dans le forum Excel
    Réponses: 5
    Dernier message: 10/01/2008, 16h00
  2. Ecrire dans une cellule excel
    Par baloote dans le forum C#
    Réponses: 10
    Dernier message: 08/01/2008, 14h23
  3. Ecrire dans une cellule en VBA
    Par ade94 dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/07/2007, 17h15
  4. [VBA-E] Ecrire dans une cellule sans écraser son contenu
    Par skystef dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/02/2007, 15h43
  5. Réponses: 4
    Dernier message: 15/04/2005, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo