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 :

Pourquoi cette "formule" ne fonctionne pas ? [XL-97]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 39
    Points : 24
    Points
    24
    Par défaut Pourquoi cette "formule" ne fonctionne pas ?
    Bonjour tout le monde,

    Je voudrais soustraire la valeur des cellules de E à W (feuille 1) à la valeur des cellules N à V (feuille 2), si je soustrait de la façon suivante ça marche mais je cherche une boucle pour réaliser cette opération sur une plage de données, avec les lignes qui s'incrémentent:

    code simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Range("E") = Sheets("Feuil1").Range("E") - Sheets("Feuil2").Range("N")
    code avec incrémentation des lignes qui ne fonctionne pas: "incompatiblité de type"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     For i = 1 To a * 10
     Sheets("Feuil1").Range("E" & i & ":W" & 4 + b + i) = Sheets("Feuil1").Range("E" & i & ":W" & 4 + b + i) - Sheets("Feuil2").Range("N" & i & ":V" & 4 + b + i)
     Next i
    Merci
    en espérant que vous comprenez et pouvez m'aider.

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    présentation incomplète, code incomplet (a, b ?), difficile de répondre !

    Avec un exemple concret d'adresses de plages de cellules ainsi qu'un calcul explicite,
    cela ne devrait pas être difficile de monter une formule matricielle en VBA …


    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Merci pour vos réponses, oui ce n'est pas clair, dsl:

    A = valeur de la cellule B4 de la feuille 3
    B = valeur de la cellule D6 de la feuille 3


    ...

    En résumé est-ce qu'il est possible de faire une formule en vba qui soustrait deux valeurs sur plage de données qui varie ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i = 1 to A
    Sheet("Feuille 1").Range("E10")=Sheet("Feuille 1").Range("E10")-Sheet("Feuille 2").Range("G4" & i) 
    Next i
    La aussi ce n'est pas complet, mais désolé c'est Confidentiel...et je n'arrive pas a faire fonctionner un code comme celui ci.

    Merci

  5. #5
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    fredorik10 tu as dit :
    Je voudrais soustraire la valeur des cellules de E à W (feuille 1) à la valeur des cellules N à V (feuille 2),
    il n'y a pas le même nombre de colonnes pour l'opération. Est-ce normal ?

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Oui vous avez raison, il y a pas le meme nombre de colonne...

    excusez moi, mais sinon est-ce que ça peut fonctionner ? parce que la, pas du tout.

    par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheet("1").Range("B4" & i) = Sheet("1").Range("B4" & i") - Sheet("2").Range("F4" & i")
    Merci beaucoup pour votre aide

  7. #7
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    je ne comprends pas çaça ne serait pas plutot
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Oui mais si je veux que ça commence ligne 4 ?

  9. #9
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    ça ne change rien et ça ne veut rien dire, s'il s'agit d'une boucle, pourquoi pas commencer la boucle à
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Citation Envoyé par fredorik10 Voir le message
    Pourquoi cette "formule" ne fonctionne pas ?
    Elle ne fonctionne pas car il y a un problème de logique ou/et de syntaxe …


    Citation Envoyé par fredorik10 Voir le message
    est-ce qu'il est possible de faire une formule en vba qui soustrait deux valeurs sur plage de données qui varie ?
    Avec une once de neurones en respectant la logique, aucun souci !


    N'ayant pas obtenu de réponse exhaustive, je m'arrête à une simple démonstration :

    deux feuilles de calculs dans un nouveau classeur, dans Feuil1 plage de cellules numériques E4:F9
    et dans Feuil2 plage N11:O16, chaque plage étant donc de six lignes par deux colonnes.
    On doit soustraire la plage de Feuil2 à la plage de Feuil1 directement dans la plage de Feuil1,
    par position de cellules respectives : la cellule E4 doit être égale à E4 - N11; la cellule F9 égale à F9 - O16 …

    Citation Envoyé par fredorik10 Voir le message
    je cherche une boucle pour réaliser cette opération sur une plage de données, avec les lignes qui s'incrémentent
    A la portée d'un débutant en VBA ayant oublié les fonctionnalités d'Excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub DemoBoucles()
        For C% = 0 To 1
            For R% = 0 To 5
                With Feuil1.Cells(4 + R, 5 + C)
                    .Value = .Value - Feuil2.Cells(11 + R, 14 + C).Value
                End With
            Next
        Next
    End Sub

    Une boucle est souvent une mauvaise idée dès lors que c'est réalisable par une formule de calculs,
    le B-A-BA d'Excel, la preuve en une seule instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub DemoFormule()
        [Feuil1!E4:F9].Value = [Feuil1!E4:F9-Feuil2!N11:O16]
    End Sub
    Bien consulter l'aide VBA de la puissante méthode Evaluate !


    Si une feuille est renommée, il faudrait la mettre à jour dans la procédure DemoFormule
    mais il n'y aurait aucune modification à apporter dans la procédure DemoBoucles
    car leurs CodeName y sont utilisés et ne changent pas si une feuille est renommée …

    Via la propriété Address on peut très bien utiliser un CodeName avec Evaluate.

    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _________________________________________________________________________________________________________
    Pour apprendre quelque chose aux gens, il faut mélanger ce qu’ils connaissent avec ce qu’ils ignorent. (Pablo Picasso)
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Merci

    J'ai une dernière question, si je souhaite faire marcher la macro toutes les 10 lignes comment faire ?

  12. #12
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Utiliser le paramètre Step de la boucle For (cf l'aide VBA interne) …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Merci

    je vais me débrouiller autrement...
    Merci Marc-L, mais pourquoi êtes vous si arrogant ? si ça vous embête d'aider les gens alors ne le faites pas


    Cordialement

  14. #14
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonsoir,
    personnellement, moi je ne vois pas de l'arrogance,
    juste une question et en retour une réponse.

    Après si on lit les règles du forum, les personnes qui aident ne sont pas là pour faire le travail des autres,
    (Voit la réaction de @kiki29 en post #3, pourtant qui aide sans problème)
    il faut faire soit même un minimum de travail personnel qui se voit
    (pas de la copie de code, à droite à gauche, que l'on ne comprends pas - pas d’intérêts - attention ici je ne dis pas que tu copies)

    L’intérêt d'une tel réponse et d'aller voir le fonctionnement du code (en l’occurrence step utilisé dans la boucle For),
    comprendre son fonctionnement (en général par de simple petit exercices/tests), que l'on applique par la suite sur son code.

    Si tes tests sur ton code son concluant , sinon, si un petit souci que tu ne comprends pas,
    tu reviens avec le code que tu auras fait et, de l'aide tu auras (que la force soit avec toi )

    PS : c'est moi qui t'es mis
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  15. #15
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Citation Envoyé par fredorik10 Voir le message
    Marc-L, mais pourquoi êtes vous si arrogant ? si ça vous embête d'aider les gens alors ne le faites pas
    Pour rappel, la qualité des réponses est au niveau de celle des questions ‼
    La preuve :

    Citation Envoyé par fredorik10 Voir le message
    si je souhaite faire marcher la macro toutes les 10 lignes comment faire ?
    Citation Envoyé par Marc-L Voir le message
    Utiliser le paramètre Step de la boucle For (cf l'aide VBA interne) …
    Sans compter dès ma première intervention j'ai demandé des précisions restées sans réponse !
    Et pourtant je me suis fendu d'une démonstration explicite avec un contexte bien exposé …

    Si cela vous embête de présenter clairement & exhaustivement votre besoin, autant ne pas venir sur un forum !
    Le forum n'est pas conçu pour ménager des susceptibilités mal placées
    mais juste pour répondre à une question technique précise …

    _________________________________________________________________________________________________________
    Deux choses sont infinies : l’Univers et la bêtise humaine.
    Mais en ce qui concerne l’Univers, je n’en ai pas encore acquis la certitude absolue ! (Albert Einstein)
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 02/10/2007, 11h11
  2. Fonction Quoted printable qui ne fonctionne pas.
    Par leCcsympas dans le forum C
    Réponses: 3
    Dernier message: 13/01/2007, 18h54
  3. la formule find ne fonctionne pas
    Par corwin44 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/07/2006, 16h52

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