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 :

Addition avec une constante [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Points : 89
    Points
    89
    Par défaut Addition avec une constante
    bonjour
    jai des valeurs de colonne J jusque AC donc 20 colonnes
    mais que sur la ligne 8
    j'essaye humblement à mon niveau "ras de terre" additionner les valeurs de chaque cellule de colonne J jusque AC sur la ligne 8 uniquement , avec une constante de cellule
    J17 ou j18
    pas toujours facile de bien exprimer

    bien sur sur il y a des 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
    Private Sub CommandButton1_Click()
     
    Dim j As Integer
    Dim i As Integer
    Dim un As Integer
    Dim deux As Integer
    ' et on continue jusqu'à 20
     
     
    For i = 10 To 29
     
        For j = 8 To Cells(8, i)
     
            If Cells(j, i) = Value and Cells(17, j) = Value Then
     
             Cells(j, i) +  Cells(17, j) 
     
            un = un + 1
     
     
    ElseIf Cells(j, i) = Value and Cells(18, j) = Value Then
             Cells(j, i) +  Cells(18, j)  
     
            deux = deux + 1
     
            End If
        Next
     
    Next
     
        Range("J33").Value = un
        Range("k33").Value = deux
     
    'et on continue jusqu'à 20
     
    End Sub
    l'ensemble du tableau de résultat me convient

  2. #2
    Invité
    Invité(e)
    Par défaut
    bonjour,
    tu ne stock pas le résultât de l'opération?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(j, i) +  Cells(17, j)

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 754
    Points : 28 605
    Points
    28 605
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pourquoi passes-tu par une boucle pour faire une somme ?
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MsgBox "La somme est égal à " & Application.Sum(Range("B3:G3"))
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre régulier Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    bonjour,
    tu ne stock pas le résultât de l'opération?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(j, i) +  Cells(17, j)
    je dois mettre quoi avant "un="
    si dans le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("J33").Value = un
    pour le résultat de la première cellule i 8 + cells 17 J
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("k33").Value = deux
    pour le résultat de la deuxième cellule i 9 + cells 18 J
    ainsi de suite
    i étant une variable de colonne

    je cherche aussi en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorksheetFunction.Sum (Range("i" & 8 & ";" & "10" & 17))
    mais sans résultat

    mais le tableau résultat est très très simple et rapide et pratique pour moi
    Le problème je pense et simple mais je n'ai jamais fait de vba
    cordialement

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 754
    Points : 28 605
    Points
    28 605
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour faire la somme d'une plage à l'aide de l'objet Range si nous reprenons cet exemple de la plage "B3:G3", il faut une chaîne de caractères
    Donc soit "B3:G3" soit "B" & 3 & ":" & "G" & 3, etc. mais pas ce que tu as écrit là
    "i" & 8 & ";" & "10" & 17
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Variable = Application.Sum(Range("B" & 3 & ":" & "G" & 3))
    où la constante 3 peut être remplacée pas la variable d'un boucle pour faire la somme de plusieurs lignes
    Exemple de l'affichage des sommes des B à G des lignes 3 à 5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim r As Long
     For r = 3 To 5
        MsgBox "La somme de la ligne " & r & " est égal à " & Application.Sum(Range("B" & r & ":" & "G" & r))
     Next
    On peut bien entendu également utiliser les objets Cells imbriqués à Range
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre régulier Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Pourquoi passes-tu par une boucle pour faire une somme ?
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MsgBox "La somme est égal à " & Application.Sum(Range("B3:G3"))
    pour moi dans mon cas ,avec ce tableau de résultat en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorksheetFunction.Sum (Range("i" & 8 & ";" & "10" & 17))
    cela donnerai quoi dans son intégralité mais je ne pense pas ,que pour des problèmes plus compliqué que je puisse modifier facilement ou du moins pas si facilement

    moi petit niveau
    cordialement

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 754
    Points : 28 605
    Points
    28 605
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je viens d'expliquer dans ma réponse précédente comment le faire.
    Ta syntaxe doit provoquer inévitablement une erreur. Manifestement, tu ne l'as même pas testée
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre régulier Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Points : 89
    Points
    89
    Par défaut
    ? pas testée !
    si je le mets sur le forum c'est qui y a des erreurs pour l'avoir testée , autrement je n'ai pas besoin du forum
    je chercher un résultat simple pour un problème simple et que je puisse modifier facilement


    j'essaye d'adapter et de modifier un programme
    cordialement

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 754
    Points : 28 605
    Points
    28 605
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Et dans mon explication, tu ne trouves pas le moyen d'y arriver ?

    Ton avant dernière intervention fait référence à ma première réponse or entre-temps, je te donne une explication.

    Dans ton explication à l'ouverture de la discussion
    additionner les valeurs de chaque cellule de colonne J jusque AC sur la ligne 8 uniquement
    Dans cette phrase, "Chaque cellule de la colonne J jusqu'à AC" est en contradiction avec "uniquement sur la ligne 8" parce-que une cellule se trouve à l'intersection Ligne/Colonne.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre régulier Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Points : 89
    Points
    89
    Par défaut
    j'ai un tableau donnée ligne 8 ,colonne J jusqu’à AC et cellule que j'appelerai "constante" soit elle est cells 17,10 ou cells 18,10
    je souhaite addition J8 + cells 17,10= résultat "un" Range("J33").Value = un
    k8 + cells 18,10 =résultat "deux" Range("k33").Value = deux
    L8 + cells 17,10= résultat "trois" Range("L33").Value = trois
    m8 + cells 18,10= résultat "quatre" Range("M33").Value = quatre

    ainsi de suite
    très certainement et comme d'habitude je me suis mal exprimé mais je pensais être clair
    cette base du début, m’intéresse car j'ai plein de problème dans le même sens un fois une division ...
    et je pourrai modifier
    cordialement

  11. #11
    Membre régulier Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Points : 89
    Points
    89
    Par défaut
    [

    Dans le résultat c'est juste ! par contre j 'utilise pas la boucle colonne For i = 10 To 29 comment je pourrai l' utiliser pour avoir le même résultat
    et simplifier si vous en juger utile merci d'avance
    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
    Private Sub CommandButton1_Click()
     
    Dim j As Integer
    Dim i As Integer
    Dim un As Integer
    Dim deux As Integer
    Dim trois As Integer
     
    For i = 10 To 29
     
    j = 8
     
                If Cells(j, i).Value Then
     
                      un = Cells(j, 10) + Cells(17, 10)
     
                End If
     
     
                If Cells(j, i).Value Then
     
                     deux = Cells(j, 11) + Cells(18, 10)
                End If
     
                If Cells(j, i).Value Then
     
                     trois = Cells(j, 12) + Cells(17, 10)
                End If
     
     
     
    Next
     
        Range("J33").Value = un
        Range("k33").Value = deux
        Range("l33").Value = trois
    End Sub

  12. #12
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Salut.

    Si j'ai bien compris, tu souhaites avoir en ligne 33 la somme de la ligne 8 et d'une "constante" qui est alternativement J17 ou J18 (cells 17,10 ou cells 18,10).

    1. Tu n'as pas besoin de VBA pour cela, une formule Excel permet de réaliser cela sans complication, à placer en J33 et à tirer jusqu'en AC33
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(EST.PAIR(COLONNE());J8+$J$17;J8+$J$18)
    Si tu veux le faire par VBA, alors, il faut reprendre la très bonne idée de Philippe Tulliez (que je salue au passage) et "faire de l'Excel" en VBA (cfr ma signature)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub SommeCellules()
      Dim Formula As String
     
      Formula = "=IF(ISEVEN(COLUMN()),J8+$J$17,J8+$J$18)"
      Range("j33:ac33").Formula = Formula
      Range("j33:ac33").Copy
      Range("j33:ac33").PasteSpecial xlPasteValues
      Application.CutCopyMode = False
    End Sub
    Les trois dernières lignes sont facultatives. Elles servent à figer le résultat (copier/coller spécial valeurs), c'est-à-dire à remplacer les formules par leur résultat.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Membre régulier Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Points : 89
    Points
    89
    Par défaut
    c'est la somme d'une cellule de la ligne 8 avec la "constante" et ainsi suite , la somme de la deuxième cellule ligne 8 avec la constante
    je ne sais pas si je m'exprime mal
    je ne souhaite pas du tout rentrer dans une formule j'ai plein plein de formules que je souhaite supprimer totalement 5 pages de formules c'est ingérable

    c'est un programme intéressant ou de temps en temps j'en supprime une partie avec toutes l'aide que vous m'apportez merci à tous en attendant

    cordialement

  14. #14
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Les idées que nous t'avons proposées ne consistent pas en l'ajout de formules.

    Elles utilisent des formules au sein du code VBA pour simplifier celui-ci.

    As-tu lu et testé ce que je t'ai proposé? Les trois dernières lignes suppriment les formules qui ont été nécessaires aux calculs, ne laissant que les résultats.
    Pour ce qui est de ceux-ci, et donc de la compréhension de ton problème, manifestement mal exposé puisque 13 messages n'en sont pas venus à bout , il faudrait le réexpliquer clairement, avec autre chose que des un, deux, trois quatre et des cells 17,10.

    J'ai essayé de résumer ce que j'avais compris de ton problème. Une bonne façon de continuer la discussion serait de dire si j'étais dans le bon ou pas. Cela ferait avancer le schmilblick, car tu parles de constantes cells 17,10 et cells 18,10 (ce ne sont donc déjà pas des constantes) et le résultat que tu souhaites semble, au vu de tes explications, alterner avec ces "constantes"...

    Si tu souhaites que l'on t'aide, tu vas devoir expliquer mieux ton problème, et peut-être tester les solutions proposées, plutôt que les rejeter parce que ce sont "des formules"...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  15. #15
    Membre régulier Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Points : 89
    Points
    89
    Par défaut
    bonjour
    pour le copy j'ai essayer merci beaucoup mais ce n'est pas du tout l'approche que j'ai exposé ,mais merci de proposer quelque chose
    le code il y là devant nous celui là celui que je propose,mais peut être pas dans une forme normal ou optimum,puisque je n'utilise pas la boucle pour les colonnes mais le résultat est juste ,mais pas juste quand je mets la boucle
    es que l'on peu d’après ce code que je propose l'améliorer ou simplifier si nécessaire

    je l'avoue la formule je ne l'ai pas essayer puisque j'essaye éradique ce problème
    plein de formules à hautes dose c'est polluant
    je mettrai des année cela me dérange pas, avec vos conseils , vos remarque je finirai pas comprendre j'ai bon espoir
    ce n'est mais pas du tout mon métier encore moi mon niveau d’étude que voulez vous il faut de tout pour faire un monde
    mais merci en attendant
    cordialement
    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
    Private Sub CommandButton1_Click()
     
    Dim j As Integer
    Dim i As Integer
    Dim un As Integer
    Dim deux As Integer
    Dim trois As Integer
     
    For i = 10 To 29
     
    j = 8
     
                If Cells(j, 10).Value Then
     
                      un = Cells(j, 10) + Cells(17, 10)
     
                End If
     
     
                If Cells(j, 10).Value Then
     
                     deux = Cells(j, 11) + Cells(18, 10)
                End If
     
     
    '            If Cells(j, i).Value Then
    '
    '                 trois = Cells(j, i) + Cells(17, 10)
    '            End If
    '
     
     
    Next
     
        Range("J33").Value = un
        Range("k33").Value = deux
    '    Range("l33").Value = trois
    End Sub
    cordialement

  16. #16
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Je sais bien que mon approche n'est pas celle que tu as exposée, mais si tu poses une question au sujet de ton approche, c'est qu'elle ne fonctionne pas comme elle devrait. Et si elle ne fonctionne pas comme elle devrait, c'est parce qu'elle est mauvaise.

    1. Tu ne dis toujours pas si j'ai compris ce que tu souhaites ou non. Est-ce que oui ou non l'explication que j'ai donnée correspond à ce que tu veux faire? Je ne parle pas ici de la solution, mais de la reformulation de ton problème.


    2. Tu continues à me parler de formules alors que je viens de t'expliquer qu'il n'y avait pas de formules supplémentaires avec l'utilisation de mon code.

    3. Dans ton cas, tu n'as pas besoin de boucles, puisque tu testes chaque cellule. Pour pouvoir récupérer tes vingt calculs, tu vas devoir te créer 20 variables (celles que tu nommes Un, Deux, Trois, ...). Heureusement que tu ne travailles pas sur les 16384 colonnes disponibles d'une feuille Excel

    4. Tu testes if cells(j,8).value then.... Que veux-tu tester au juste? Ce test renverra vrai lorsque la valeur de la cellule sera numérique non nulle. Est-ce cela que tu veux?

    5. Quel est le but de ton code? As-tu un besoin réel derrière (auquel cas, teste ma solution, je suis à 99% certain qu'elle te donne la solution. Ou bien souhaites-tu apprendre à manipuler des boucles?

    6. Si tu tiens à le faire par boucle et sans formule, tu peux utiliser le code suivant (si tant est que j'ai bien compris le problème que tu t'entêtes à ne pas expliquer clairement!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      For Col = 10 To 29
          Cells(33, Col).Value = Cells(8, Col).Value + IIf(Col Mod 2 = 0, Cells(17, 10).Value, Cells(18, 10))
      Next Col
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  17. #17
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je me permet cette médiation ?

    je suis uniquement partie de ta manière de faire, et j'ai "fait fonctionner ton 10 a 29" comme tu le voulais : "sans formule supplémentaire"

    voici la version sans les commentaires qui te sont spécialement dédiés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CommandButton1_Click()
    Dim j As Integer
    Dim i As Integer
     
    j = 8
    For i = 10 To 29
        Range("J33").Offset(0, i - 10).Value = Cells(j, i) + Cells(17 + (i Mod 2), 10)
    Next
     
    End Sub

    ET VOILA LA VERSION POUR TOI

    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
     
    Private Sub CommandButton1_Click()
     
    Dim j As Integer
    Dim i As Integer
    Dim un As Integer
    Dim deux As Integer
    Dim trois As Integer
    Dim quatre As Integer
    Dim cing As Integer
    Dim six As Integer
    Dim sept As Integer
    Dim huit As Integer
     
    For i = 10 To 29
        j = 8
     
    '    If Cells(j, i).Value Then
    '        un = Cells(j, 10) + Cells(17, 10)
    '    End If
    '
    '    If Cells(j, i).Value Then
    '        deux = Cells(j, 11) + Cells(18, 10)
    '    End If
    '
    '    If Cells(j, i).Value Then
    '        trois = Cells(j, 12) + Cells(17, 10)
    '    End If
     
        '[...]
        ' $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
     
        ' Cette condition "if" ne sert à rien du tout, tu n'as aucun test à faire dans ton code
        ' tu veux juste copier des cellules dont tu connais l'emplacement !
        ' alors tu dis à Excel que tu veux faire une copie, et tu te prend pas la tête
        'If Cells(j, i).Value Then
            ' on décale d'une colonne à chaque tour de boucle || i mod 2 va alterner entre 0 et 1 à chaque tour de boucle
            Range("J33").Offset(0, i-10).Value     =                   Cells(j, i) + Cells(17 + (i Mod 2), 10)
        'End If
     
        ' $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    Next
         ' on en a plus besoin,
    '    Range("J33").Value = un
    '    Range("k33").Value = deux
    '    Range("l33").Value = trois
     
    End Sub

  18. #18
    Membre régulier Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Points : 89
    Points
    89
    Par défaut
    haha voila quelqu'un au top !
    j'ai juste un question à quoi correspond dans ceci le -10 et le 10 à la fin stp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("J33").Offset(0, i-10).Value     =  Cells(j, i) + Cells(17 + (i Mod 2), 10)
    pour moi bien comprendre , en tout les cas félicitations ,rationnel et modifiable
    chapeau bas joe je suis fière de toi

    @bientôt

  19. #19
    Membre régulier Avatar de pilounet54
    Homme Profil pro
    retraité
    Inscrit en
    Février 2008
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 489
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Je sais bien que mon approche n'est pas celle que tu as exposée, mais si tu poses une question au sujet de ton approche, c'est qu'elle ne fonctionne pas comme elle devrait. Et si elle ne fonctionne pas comme elle devrait, c'est parce qu'elle est mauvaise.

    1. Tu ne dis toujours pas si j'ai compris ce que tu souhaites ou non. Est-ce que oui ou non l'explication que j'ai donnée correspond à ce que tu veux faire? Je ne parle pas ici de la solution, mais de la reformulation de ton problème.


    2. Tu continues à me parler de formules alors que je viens de t'expliquer qu'il n'y avait pas de formules supplémentaires avec l'utilisation de mon code.

    3. Dans ton cas, tu n'as pas besoin de boucles, puisque tu testes chaque cellule. Pour pouvoir récupérer tes vingt calculs, tu vas devoir te créer 20 variables (celles que tu nommes Un, Deux, Trois, ...). Heureusement que tu ne travailles pas sur les 16384 colonnes disponibles d'une feuille Excel

    4. Tu testes if cells(j,8).value then.... Que veux-tu tester au juste? Ce test renverra vrai lorsque la valeur de la cellule sera numérique non nulle. Est-ce cela que tu veux?

    5. Quel est le but de ton code? As-tu un besoin réel derrière (auquel cas, teste ma solution, je suis à 99% certain qu'elle te donne la solution. Ou bien souhaites-tu apprendre à manipuler des boucles?

    6. Si tu tiens à le faire par boucle et sans formule, tu peux utiliser le code suivant (si tant est que j'ai bien compris le problème que tu t'entêtes à ne pas expliquer clairement!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      For Col = 10 To 29
          Cells(33, Col).Value = Cells(8, Col).Value + IIf(Col Mod 2 = 0, Cells(17, 10).Value, Cells(18, 10))
      Next Col
    non non ! j'ai un formidable programme de statistiques sur 5 ou 6 pages avec en imbroglio de formules en tout genre je suis lancé à regrouper tous ceci en une seul page
    donc patience et abnégation fera un très beau programme

    je viens essayer aussi la boucle que vous proposez elle correspond bien Evidemment au problème exposé je vous remercie de la patience que vous m'accordez
    je vous félicite du regard que vous porté ce le forum ,c'est formidable merci encore
    cordialement
    @bientot

  20. #20
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ça y est, on avance enfin !

    toutes les méthodes qui t'ont été proposées reviennent à la même chose.
    AUCUNE N'ECRIVAIT DE FORMULE DANS LA CELULLE EXCEL : c'est VBA qui utilisait la formule pour restituer le résultat dans la cellule.


    voici le petit stratagème que j'utilise pour que ne pas utiliser de formule dans VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("J33").Offset(0, i-10).Value     =  Cells(j, i) + Cells(17 + (i Mod 2), 10)
    1) L'instruction "Offset(x,j)" permet de se décaler de x lignes et de y cellules.
    On doit écrire le premier résultat en J33 ... le second en K33... le troisième en L33 ...
    Bref, on doit se décaler à chaque tour de boucle d'une colonne, soit .offset(0,1)

    afin d'initialiser le décalage, le premier tour de boucle doit se décaler de 0 colonne (puisqu'on est déjà sur J33)
    Donc je fais (i-10) pour avoir un décalage :

    - de 0 au premier tour de boucle (i=10 donc i-10 = 0)
    - de 1 au second tour de boucle (i = 11 donc i - 10 = 1)
    - etc...


    2) " X mod Y" est une opération mathématique, dont le résultat est le Reste de la Division entière de X par Y

    par exemple, 10 Mod 3 = 1 : on a une division entière de 9 (9 / 3 = 3) et le reste de cette division entière est 1

    on peut utiliser cette propriété à notre avantage quand on manipule des nombres pairs/impairs :

    X mod 2 = 0 quand le nombre est pair
    X mod 2 = 1 quand le nombre est impaire

    tu alternes ta constante entre deux cellules : Cells(17, 10) et Cells(18, 10)
    ton premier tour de boucle est un nombre pair (i = 10) et utilise la constante Cells(17, 10)
    ton second tour de boucle est un nombre impair (i = 11) et utilise la constante Cells(18, 10)
    ton troisième tour de boucle est un nombre pair (i = 12) et utilise la constante Cells(17, 10)
    ton quatrième tour de boucle est un nombre impair (i = 13) et utilise la constante Cells(18, 10)

    si on généralise, on a :

    - si i est un nombre pair : la constante est Cells(17 + 0, 10)
    - si est un nombre impair : la constante est Cells(17 + 1 , 10)

    ce qui revient donc à dire que le "+1" ou le "+0" peut se calculer en utilisant l'était "pair" ou "impair" de ta variable i :

    Cells(17 +(i Mod 2), 10)


    Est-ce que tu comprend mieux la mécanique maintenant ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/08/2012, 16h45
  2. [XL-2003] addition avec une variable
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/05/2011, 15h49
  3. faire un bouchon avec une constante ds un fichier HBM ?
    Par pcouas dans le forum Hibernate
    Réponses: 2
    Dernier message: 22/07/2010, 12h01
  4. Concaténation d'une variable avec une constante !
    Par zesavantfou dans le forum Langage
    Réponses: 6
    Dernier message: 29/11/2008, 18h16
  5. [SQL] Select avec une constante
    Par eliek_9 dans le forum SQL
    Réponses: 5
    Dernier message: 11/05/2007, 18h26

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