Remplacer 3 cellules par un groupe de cellules

Bonjour,

J'ai actuellement un tableur avec un code permettant un calcul inversé sur 3 cellules (J52 J55 J58)

Je souhaiterais remplacer ces 3 cellules nominatives par un groupe de cellules d'une colonne [J 66 : J 73]...

j'ai essayé en mettant "J66:J73" sans succès

Merci de votre aide et bonne journée

Salut,

Si je t'ai bien compris, tu remplaces la ligne

If Not Application.Intersect(Target, Range("J52, J55, J58")) Is Nothing Then

par

If Not Application.Intersect(Target, Range("J66:J73")) Is Nothing Then

Cordialement.

EDIT IMMEDIATE

Juste après avoir posté le message ci-dessus, je découvre deux choses :

C'est en fait moi qui t'avais fourni ta première réponse en ..... mars 2013

Que tu sembles avoir tenté la bonne correction. Je ne comprends pas que ça n'a pas fonctionné

Bonsoir Yvouillle

Tu as bonne mémoire, effectivement c'est toi qui m'avait solutionné "mon problème".

J'avais tenté de remplacer Range("J52, J55, J58") par Range("J66:J73") en gardant le même code...sans succès

Par contre, en le recopiant comme tu as fait, cela marche !

J'ai posé une seconde question....

car j'aimerais pouvoir adapter ce code à des calculs à venir donc à "tout emplacement" avec, un nombre de colonnes différent..

J'ai compris que dans Target.Offset(0, -5) = Round(Target.Offset(0, -5), 3)

le -5 renvoyant le calcul dans la 5ème colonne précédente.

Si tu pouvais m'indiquer les 2 codes demandés, je décortiquerai les différences pour comprendre.....

Sauf erreur, tu peux mettre un commentaire explicatif dans le code ?

En tout cas, ce calcul inversé ouvre d'immenses possibilités ....

Merci d'avance

Salut,

En consultant tes différentes demandes, je constate que tu as déjà posé une question plus tôt – mais sans succès – à propos de ce même calcul. Comme il s’agissait de la suite, tu aurais pu rouvrir ton ancien fil de mars 2013.

Tu ne devrais pas parler de calcul inversé, car Excel parle de Valeur cible (menu Données/Analyse de scénarios/Valeur cible). J’ai eu de la peine à comprendre ta première demande d’aujourd’hui à cause de ça.

Tonthon a écrit :

J'ai compris que dans Target.Offset(0, -5) = Round(Target.Offset(0, -5), 3)

le -5 renvoyant le calcul dans la 5ème colonne précédente.

Non, cette ligne ne fait qu’arrondir la valeur de la même cellule, un peu comme quand tu ajoutes 1 à la valeur de la cellule A4 par ce code : Range("A4") = Range("A4") + 1. Le code que tu nous fournis dit à peu près ceci : Dans la 5ème colonne avant la cible(Target), remplacer le chiffe en place par un chiffre arrondi.
Tonthon a écrit :

J'ai posé une seconde question....

En tout cas pas dans le premier fichier fourni

Pour bien comprendre comment fonctionne la Valeur cible en VBA, je pense que tu dois déjà bien comprendre la Valeur cible de base.

Dans l’image ci-dessous, tu vois que j’essaie d’appliquer une Valeur cible à la cellule W66 en modifiant la cellule Y66. Excel n’accepte alors pas ceci car – comme le dit le message d’erreur – la cellule doit contenir une valeur (ET NON PAS UNE FORMULE).

Ensuite, lorsque tu comprendras un peu mieux le fonctionnement de cette option, tu peux revenir à la charge avec tes questions suivantes. Ou alors enregistrer une macro avec l’enregistreur de macro alors que tu effectues un tel calcul Valeur cible, puis aller voir le code ainsi enregistré afin de modifier mon code en fonction de ce qui a été enregistré automatiquement. Le seul inconvénient de l’enregistreur de macro étant qu’il enregistre beaucoup de lignes inutiles

A te relire.

capture 25 08

Bonjour Yvouille,

Merci pour ces explications, je mettais totalement fourvoyé et bloqué sur le mécanisme de calcul inversé.

Je me suis attelé à la valeur cible de base que je pense avoir compris.

J'ai crée un nouveau zone de calcul pour avoir un emplacement différent et modifié "la cellule/colonne à atteindre"

Tu trouveras le nouveau code dédié à ce nouveau tableur avec mes interrogations, je pense être bon pour les cibles à définir mais par contre je bloque pour avoir "les cibles à modifier....

J'ai également fait une macro à partir d'une valeur cible de base.... son contenu

Range("AA66").GoalSeek Goal:=103, ChangingCell:=Range("W66")

me laisse perplexe et je ne vois pas l'application pratique c'est à dire quoi "récupérer" pour adapter dans ton code

Te remerciant d'avance de ton aide

Re,

Je ne sais plus du tout où on en est avec ton problèmes. Il y a des informations dans ton message, des informations sur ta feuille, des informations dans ton code !!!!!! Alors il faut essayer de comprendre si les informations de la feuille complètent celles du message ou plutôt celles du code ! Quand elles ne se contrarient pas.

De plus, tu as plusieurs tableaux et je ne sais plus si certains commentaires et questions sont anciens ou actuels !

S’il te plait, refais un fichier avec un seul tableau et pose toutes tes questions à un seul endroit. Mais ne pose pas non plus 36'000 questions à la fois. Liquidons déjà 1 ou 2 problèmes et on verra par la suite pour les questions 3 à 36'000.

A te relire.

Re,

Désolé, cela me semblait "logique" mais ce n'est pas le cas.

Je refais cela demain en posant avec mes questions à un seul endroit.

Excellente soirée

Dans le fichier ci-joint, j’ai enregistré le déroulement d’une valeur cible à l’aide de l’enregistreur de macro, selon l’image placée directement dans le fichier.

Etonnamment le résultat est pour une fois sans lignes inutiles. Voici le code enregistré et visible également dans le fichier ; il n’y a qu’une seule ligne.

Sub Macro1()

'

' Macro1 Macro

'

'

Range("C2").GoalSeek Goal:=10000, ChangingCell:=Range("B2")

End Sub

Dans mon code du mois de mars, je me rends maintenant compte que j’avais ajouté plus de lignes car c’était nécessaire à cause des arrondis que tu désirais. Mais ça n’a pas vraiment quoi que ce soit à voir avec la valeur cible, l'objet de ton présent fil.

J’attends ton nouveau fichier avec tes dernières questions et je verrai bien si les « aller-retour » effectués dans le fichier de mars sont encore nécessaires par rapport à tes nouvelles demandes. Si nécessaires, je t’expliquerai également l’ancien code en détail.

A un de ces jours prochains.

11tonthon.zip (22.74 Ko)

Bonjour Yvouille,

Je vais essayer d'être cartésien.

macro :

effectivement j'avais constaté la simplicité du code de la macro mais je ne sais pas en tirer profit

arrondi :

une idée : si cela peut simplifier le code, je peux obtenir l'affichage des arrondis souhaités par "Format des cellules"

mais c'est une mauvaise idée si cela modifie d'une manière importante le résultat (à priori, je ne le pense pas) .... à tester le cas échéant

souhait :

comprendre à travers de 2 tableaux différents (donc emplacement, nombre de colonne, cellule à définir, cellule à modifier différents) le mécanisme du code.

Je pense que je "pigerai" mieux si tu pouvais ajouter un commentaire succinct directement dans le code comme "ceci correspond à...ou ceci renvoie à"

Je te joins un nouveau tableur reprenant ce que je viens d'évoquer.

Te remerciant d'avance de ton aide,

Cordialement

12valeur-cible.xlsm (27.23 Ko)

Salut,

A mon tour de te prier de m’excuser. Lorsque j’avais créé ce code en mars, j’avais dû trouver une solution assez spéciale afin de chercher une valeur cible puis d’exécuter un arrondi et lors de nos entretiens actuels j’ai perdu de vue qu’il ne s’agissait pas d’opérations bien séparées, mais d’un tout.

J’ai donc tenté de t’expliquer maintenant ce code comme demandé directement par des commentaires.

A toi de dire si tout n’est pas clair (il est plus facile d’écrire un code que de l’expliquer ).

Amicalement.

Bonjour Yvouille,

Je viens de prendre connaissance de ta réponse : bravo pour tes explications dans le code qui me permettent de comprendre pas mal de choses.

Il y a un point (il y en aura peut-être d'autres par la suite ) que je ne comprends pas du tout c'est "comment ou pourquoi"

  • Target.FormulaR1C1 = "=RC[-1]-R[1]C" correspond à la formule =G68-H69
  • l'autre formule qui donnerait = I78-J79) cela devient Target.FormulaR1C1 = "=RC[-2]-RC[-1]"

Je me doute bien que "G68-H69" ce n'est pas "I78-J79" mais je reste bloqué !

autrement dit "pourquoi ou à quoi correspond" le premier -1 devient -2 dans le second tableau

et le [1] devient [-1] ???

Ce qui m'intéresse, c'est le côté pratique car une fois cette formule comprise....j'essaierai de reprendre le tout dans un autre tableau.

Je vais être absent un semaine, prends ton temps car je verrai ta réponse à mon retour....et d'ici là excellent WE.

Salut,

Sur une feuille Excel, tu peux choisir de travailler avec les références A1 (ce que font, sans le savoir, la plupart des utilisateurs) ou avec les références L1C1. Pour choisir cette dernière possibilité, tu vas dans Options/Formules et tu cliques sur L1C1. Tu as alors des chiffres à la place des lettres dans la règle du haut et si tu avais écrit au préalable la formule =A3 en C2, tu verrais maintenant la formule =L(1)C(-2). Ceci parce qu’il s’agit de références relatives et que la cellule A3 est bien placée une ligne plus loin [ d'où le L(1) ] que la cellule C2 et 2 colonnes plus en avant [ d'où le C(-2) ].

Si tu écrivais la même formule relative =L(1)C(-2) en Z23, ça ferait donc référence à la cellule = X24.

Si une telle référence concerne la même ligne ou la même colonne que la cellule de base, à la place d’écrire un zéro, on n’écrit rien. Donc si tu désires écrire en A1 = B1, ça donne =LC(1) [Ligne de la cellule active + 0 = ligne 1, colonne de la cellule active + 1 = colonne 2 = colonne B].

En anglais on parle de référence R1C1 (pour row et column) et sur un PC anglophone, la formule =L(1)C(-2) deviendrait =R(1)C(-2).

Si tu enregistres une macro et que tu écris =A3 en C2, le résultat sera

ActiveCell.FormulaR1C1 = "=R[1]C[-2]"

Si tu remplaces maintenant ActiveCell par la référence à une autre cellule, la partie "=R[1]C[-2]" concernera maintenant cette autre cellule et non plus la cellule C2 que tu avais utilisée pour enregistrer cette macro.

Tu vois immédiatement l’énorme avantage de cette méthode ; si tu veux faire référence à toutes sortes de cellules différentes dans un code, les références de la formule "=R[1]C[-2]" s’appliqueront à la cellule nouvellement désignée. Ca pourrait être le cas si dans une boucle tu désirais appliquer une formule à plusieurs lignes (par exemple avoir pour résultat =A1 en B1, = A2 en B2, etc. sur 100 lignes) ou mieux encore, appliquer un calcul à une cellule cible (TARGET) comme dans ton fichier.

Dans mon explication directement dans le code du fichier «Valeur cible_V2» j’avais pris COMME EXEMPLE que le code écrive une formule dans la cellule cible H68 par le code Target.FormulaR1C1 = "=RC[-1]-R[1]C". Ce calcul correspondait à ta toute première demande. Le résultat que tu verrais alors dans la cellule H68 après avoir lancé ce code serait =G68-H69 (=la cellule placée sur la même ligne mais une colonne plus en avant MOINS la cellule placée une ligne plus bas mais dans la même colonne).

Le même code déclenché avec H71 comme cible donnerait le résultat =G71-H72 en H71.

Toujours dans mes commentaires directement dans le code, je t’indiquais que pour le deuxième tableau j’avais utilisé la ligne Target.FormulaR1C1 = "=RC[-2]-RC[-1]" qui correspond à : =la cellule placée sur la même ligne et deux colonnes plus en avant MOINS la cellule placée sur la même ligne et une colonne plus en avant, soit par exemple en J78 = H78-I78.

Ca devient un peu plus clair ?

Et les références absolues dans tout ça ??

Et bien, il suffit de ne pas placer les références dans des parenthèses ou des crochets et les chiffres font référence à des lignes ou des colonnes précises.

=$G$4 s’écrit =L4C7 en langage L1C1 (sur une feuille Excel) et donnerait ActiveCell.FormulaR1C1 = "=R4C7" en langage VBA.

Comme dans Excel, les références mixtes sont possibles en VBA. Si tu ne me crois pas, tu n'as qu'à effectuer des essais par enregistrements

Amicalement.

Bonsoir Yvouille,

Je viens de jeter un coup d’œil sur tes explications qui me font découvrir plein de choses !

Ceci dit, je vais reprendre cela à tête reposée avec un tableur mais à priori, je devais comprendre.

Mille merci pour ce développement très pédagogique et si besoin est je reviendrai ici sinon je clôturerai ce fil.

Excellente soirée

Rechercher des sujets similaires à "remplacer groupe"