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.
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 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.
En tout cas pas dans le premier fichier fourniTonthon a écrit :J'ai posé une seconde question....
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.
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.
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
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
- 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