simplification d'une macro
Dernière réponse : dans Programmation
Bonjour,
Je viens de découvrir cet agréable forum dans le but initial de trouver une solution un problème de macro, que j'ai réussi à bidouiller pour que ça marche.
Le problème, c'est qu'avec avec ma bidouille, je ne peux pas faire transparaitre ma formule au niveau de ma feuille de résultat. Il y a trop de guillemet et il comprend rien.
Donc, existe-il une autre possibilité de sélectionner les cellules dans différentes pages sans passer par sheet("benza").cell(valeurvariable,valeurfix) afin de faire sauter tous les guillemets.
Voici mon code:
For nbcalcul = 1 To nombrecase
Cells(2, nbcalcul + 9).Select
Cells(2, nbcalcul + 9) = Sheets("benza").Cells(nbcalcul + 14, 3).Value
Cells(3, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = (Sheets("Benza").Cells(nbcalcul + 14, 9) / (Sheets("Benza").Cells(nbcalcul + 14, 9) + Sheets("ethylcya").Cells(nbcalcul + 14, 9) + Sheets("produit").Cells(nbcalcul + 14, 9) + Sheets("produit").Cells(nbcalcul + 14, 9) / Sheets("produit").Cells(7, 9) * 18) * (Cells(12, 2) + Cells(13, 2))) / Cells(12, 4)
Cells(4, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = (Sheets("ethylcya").Cells(nbcalcul + 14, 9) / (Sheets("benza").Cells(nbcalcul + 14, 9) + Sheets("ethylcya").Cells(nbcalcul + 14, 9) + Sheets("produit").Cells(nbcalcul + 14, 9) + Sheets("produit").Cells(nbcalcul + 14, 9) / Sheets("produit").Cells(7, 9) * 18) * (Cells(12, 2) + Cells(13, 2))) / Cells(12, 4)
Cells(5, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = (Sheets("produit").Cells(nbcalcul + 14, 9) / (Sheets("benza").Cells(nbcalcul + 14, 9) + Sheets("ethylcya").Cells(nbcalcul + 14, 9) + Sheets("produit").Cells(nbcalcul + 14, 9) + Sheets("produit").Cells(nbcalcul + 14, 9) / Sheets("produit").Cells(7, 9) * 18) * (Cells(12, 2) + Cells(13, 2))) / Cells(12, 4)
Cells(6, nbcalcul + 9).Select
Cells(6, nbcalcul + 9) = Cells(5, nbcalcul + 9).Value
Cells(7, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = Cells(3, nbcalcul + 9) * Cells(12, 4) + Cells(4, nbcalcul + 9) * Cells(13, 4) + Cells(5, nbcalcul + 9) * Cells(12, 10) + Cells(6, nbcalcul + 9) * 18
Cells(8, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = Cells(3, nbcalcul + 9) + Cells(4, nbcalcul + 9) + Cells(5, nbcalcul + 9) + Cells(6, nbcalcul + 9)
Next
Merci
Je viens de découvrir cet agréable forum dans le but initial de trouver une solution un problème de macro, que j'ai réussi à bidouiller pour que ça marche.
Le problème, c'est qu'avec avec ma bidouille, je ne peux pas faire transparaitre ma formule au niveau de ma feuille de résultat. Il y a trop de guillemet et il comprend rien.
Donc, existe-il une autre possibilité de sélectionner les cellules dans différentes pages sans passer par sheet("benza").cell(valeurvariable,valeurfix) afin de faire sauter tous les guillemets.
Voici mon code:
For nbcalcul = 1 To nombrecase
Cells(2, nbcalcul + 9).Select
Cells(2, nbcalcul + 9) = Sheets("benza").Cells(nbcalcul + 14, 3).Value
Cells(3, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = (Sheets("Benza").Cells(nbcalcul + 14, 9) / (Sheets("Benza").Cells(nbcalcul + 14, 9) + Sheets("ethylcya").Cells(nbcalcul + 14, 9) + Sheets("produit").Cells(nbcalcul + 14, 9) + Sheets("produit").Cells(nbcalcul + 14, 9) / Sheets("produit").Cells(7, 9) * 18) * (Cells(12, 2) + Cells(13, 2))) / Cells(12, 4)
Cells(4, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = (Sheets("ethylcya").Cells(nbcalcul + 14, 9) / (Sheets("benza").Cells(nbcalcul + 14, 9) + Sheets("ethylcya").Cells(nbcalcul + 14, 9) + Sheets("produit").Cells(nbcalcul + 14, 9) + Sheets("produit").Cells(nbcalcul + 14, 9) / Sheets("produit").Cells(7, 9) * 18) * (Cells(12, 2) + Cells(13, 2))) / Cells(12, 4)
Cells(5, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = (Sheets("produit").Cells(nbcalcul + 14, 9) / (Sheets("benza").Cells(nbcalcul + 14, 9) + Sheets("ethylcya").Cells(nbcalcul + 14, 9) + Sheets("produit").Cells(nbcalcul + 14, 9) + Sheets("produit").Cells(nbcalcul + 14, 9) / Sheets("produit").Cells(7, 9) * 18) * (Cells(12, 2) + Cells(13, 2))) / Cells(12, 4)
Cells(6, nbcalcul + 9).Select
Cells(6, nbcalcul + 9) = Cells(5, nbcalcul + 9).Value
Cells(7, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = Cells(3, nbcalcul + 9) * Cells(12, 4) + Cells(4, nbcalcul + 9) * Cells(13, 4) + Cells(5, nbcalcul + 9) * Cells(12, 10) + Cells(6, nbcalcul + 9) * 18
Cells(8, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = Cells(3, nbcalcul + 9) + Cells(4, nbcalcul + 9) + Cells(5, nbcalcul + 9) + Cells(6, nbcalcul + 9)
Next
Merci
Autres pages sur : simplification macro
Lassé par la pub ? Créez un compte
désolé pour la mauvaise mise en page. Voici la version corrigé:
For nbcalcul = 1 To nombrecase
Cells(2, nbcalcul + 9).Select
Cells(2, nbcalcul + 9) = Sheets("benza" ).Cells(nbcalcul + 14, 3).Value
Cells(3, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = (Sheets("Benza" ).Cells(nbcalcul + 14, 9) / (Sheets("Benza" ).Cells(nbcalcul + 14, 9) + Sheets("ethylcya" ).Cells(nbcalcul + 14, 9) + Sheets("produit" ).Cells(nbcalcul + 14, 9) + Sheets("produit" ).Cells(nbcalcul + 14, 9) / Sheets("produit" ).Cells(7, 9) * 18) * (Cells(12, 2) + Cells(13, 2))) / Cells(12, 4)
Cells(4, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = (Sheets("ethylcya" ).Cells(nbcalcul + 14, 9) / (Sheets("benza" ).Cells(nbcalcul + 14, 9) + Sheets("ethylcya" ).Cells(nbcalcul + 14, 9) + Sheets("produit" ).Cells(nbcalcul + 14, 9) + Sheets("produit" ).Cells(nbcalcul + 14, 9) / Sheets("produit" ).Cells(7, 9) * 18) * (Cells(12, 2) + Cells(13, 2))) / Cells(12, 4)
Cells(5, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = (Sheets("produit" ).Cells(nbcalcul + 14, 9) / (Sheets("benza" ).Cells(nbcalcul + 14, 9) + Sheets("ethylcya" ).Cells(nbcalcul + 14, 9) + Sheets("produit" ).Cells(nbcalcul + 14, 9) + Sheets("produit" ).Cells(nbcalcul + 14, 9) / Sheets("produit" ).Cells(7, 9) * 18) * (Cells(12, 2) + Cells(13, 2))) / Cells(12, 4)
Cells(6, nbcalcul + 9).Select
Cells(6, nbcalcul + 9) = Cells(5, nbcalcul + 9).Value
Cells(7, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = Cells(3, nbcalcul + 9) * Cells(12, 4) + Cells(4, nbcalcul + 9) * Cells(13, 4) + Cells(5, nbcalcul + 9) * Cells(12, 10) + Cells(6, nbcalcul + 9) * 18
Cells(8, nbcalcul + 9).Select
ActiveCell.FormulaR1C1 = Cells(3, nbcalcul + 9) + Cells(4, nbcalcul + 9) + Cells(5, nbcalcul + 9) + Cells(6, nbcalcul + 9)
Next
Merci d'avoir pris en compte le fait que tu pouvais modifier ton premier post. (cf. message privé)
____________________________________
Pourquoi faire autant de Select ??????
Select permet de sélectionner et d'activer une cellule. As-tu besoin de ça ?
Au vu de ton code : NON. Alors ne le fais pas, ça augmente le code inutilement, et surtout ça consomme énormément de ressources.
Et pourquoi utiliser la propriété FormulaR1C1 ??
La propriété Formula ne suffit-elle pas ?
Encore une remarque. Quand tu fais ça
Tu additionnes la valeur des deux cellules. C'est comme si tu écrivais :
Donc l'addition ne devrait pas se retrouver dans ta formule, mais le résulat de l'addition.
Dans une formule, on met plutôt quelque chose comme ça :
Je ne comprends donc pas
Première revue:
Bon, en regardans ton code, il me prend l'envie de factoriser un peu tout ça :
Ca, c'est si j'ai bien tout compris.
Sinon, toi, essaye de comprendre ma réponse
pour mieux reposer ta question.
____________________________________
Pourquoi faire autant de Select ??????
Select permet de sélectionner et d'activer une cellule. As-tu besoin de ça ?
Au vu de ton code : NON. Alors ne le fais pas, ça augmente le code inutilement, et surtout ça consomme énormément de ressources.
Et pourquoi utiliser la propriété FormulaR1C1 ??
La propriété Formula ne suffit-elle pas ?
Encore une remarque. Quand tu fais ça
Cells(..) + Cells(..)
Tu additionnes la valeur des deux cellules. C'est comme si tu écrivais :
Cells(..).Value + Cells(..).Value
Donc l'addition ne devrait pas se retrouver dans ta formule, mais le résulat de l'addition.
Dans une formule, on met plutôt quelque chose comme ça :
.Formula = "=" & (Sheets("Benza").Cells(nbcalcul + 14, 9).Address 9 + ...
Je ne comprends donc pas
Citation :
Il y a trop de guillemet et il comprend rien. Première revue:
For nbcalcul = 1 To nombrecase
Cells(2, nbcalcul + 9) = Sheets("benza" ).Cells(nbcalcul + 14, 3).Value
Cells(3, nbcalcul + 9).Formula = (Sheets("Benza" ).Cells(nbcalcul + 14, 9).Value / (Sheets("Benza" ).Cells(nbcalcul + 14, 9).Value + Sheets("ethylcya" ).Cells(nbcalcul + 14, 9).Value + Sheets("produit" ).Cells(nbcalcul + 14, 9).Value + Sheets("produit" ).Cells(nbcalcul + 14, 9).Value / Sheets("produit" ).Cells(7, 9) * 18).Value * (Cells(12, 2) + Cells(13, 2).Value)) / Cells(12, 4).Value
Cells(4, nbcalcul + 9).Formula = (Sheets("ethylcya" ).Cells(nbcalcul + 14, 9).Value / (Sheets("benza" ).Cells(nbcalcul + 14, 9).Value + Sheets("ethylcya" ).Cells(nbcalcul + 14, 9).Value + Sheets("produit" ).Cells(nbcalcul + 14, 9).Value + Sheets("produit" ).Cells(nbcalcul + 14, 9).Value / Sheets("produit" ).Cells(7, 9) * 18).Value * (Cells(12, 2) + Cells(13, 2).Value)) / Cells(12, 4).Value
Cells(5, nbcalcul + 9).Formula = (Sheets("produit" ).Cells(nbcalcul + 14, 9).Value / (Sheets("benza" ).Cells(nbcalcul + 14, 9).Value + Sheets("ethylcya" ).Cells(nbcalcul + 14, 9).Value + Sheets("produit" ).Cells(nbcalcul + 14, 9).Value + Sheets("produit" ).Cells(nbcalcul + 14, 9).Value / Sheets("produit" ).Cells(7, 9) * 18).Value * (Cells(12, 2) + Cells(13, 2).Value)) / Cells(12, 4).Value
Cells(6, nbcalcul + 9).Value = Cells(5, nbcalcul + 9).Value
Cells(7, nbcalcul + 9).Formula = Cells(3, nbcalcul + 9) * Cells(12, 4) + Cells(4, nbcalcul + 9) * Cells(13, 4) + Cells(5, nbcalcul + 9) * _
Cells(12, 10) + Cells(6, nbcalcul + 9) * 18
Cells(8, nbcalcul + 9).Formula = Cells(3, nbcalcul + 9) + Cells(4, nbcalcul + 9) + Cells(5, nbcalcul + 9) + Cells(6, nbcalcul + 9)
Next
Bon, en regardans ton code, il me prend l'envie de factoriser un peu tout ça :
For nbcalcul = 1 To nombrecase
Dim gros_calcul As Double
Cells(2, nbcalcul + 9) = Sheets("benza" ).Cells(nbcalcul + 14, 3).Value
gros_calcul = 1 / (Sheets("Benza" ).Cells(nbcalcul + 14, 9).Value + Sheets("ethylcya" ).Cells(nbcalcul + 14, 9).Value + _
Sheets("produit" ).Cells(nbcalcul + 14, 9).Value + Sheets("produit" ).Cells(nbcalcul + 14, 9) / _
Sheets("produit" ).Cells(7, 9).Calue * 18) * (Cells(12, 2).Value + Cells(13, 2).Value)) / Cells(12, 4).Value
Cells(3, nbcalcul + 9).Value = (Sheets("Benza" ).Cells(nbcalcul + 14, 9).Value * gros_calcul
Cells(4, nbcalcul + 9).Value = (Sheets("ethylcya" ).Cells(nbcalcul + 14, 9).Value * gros_calcul
Cells(5, nbcalcul + 9).Value = (Sheets("produit" ).Cells(nbcalcul + 14, 9).Value * gros_calcul
Cells(6, nbcalcul + 9).Value = Cells(5, nbcalcul + 9).Value
Cells(7, nbcalcul + 9).Value = Cells(3, nbcalcul + 9).Value * Cells(12, 4).Value + Cells(4, nbcalcul + 9).Value * _
Cells(13, 4).Value + Cells(5, nbcalcul + 9).Value * Cells(12, 10).Value + _
Cells(6, nbcalcul + 9).Value * 18
Cells(8, nbcalcul + 9).Value = Cells(3, nbcalcul + 9).Value + Cells(4, nbcalcul + 9).Value + _
Cells(5, nbcalcul + 9).Value + Cells(6, nbcalcul + 9).Value
Next
Ca, c'est si j'ai bien tout compris.
Sinon, toi, essaye de comprendre ma réponse
pour mieux reposer ta question.
Salut,
Pour commencer, merci d'avoir pris du temps pour répondre.
Ensuite, Au niveau des macro, je suis à un stade débutant. Disons, que je n'y connais pas grand chose. La macro a été faite aussi par un autre débutant en faisant du tatonnement.
J'ai essayé de comprendre ce qu'il fait pour pouvoir reproduire la même chose. Donc disons, que je fais des macro préhistorique...
Pour les "select", je pensais qu'il fallait activer les cases pour pouvoir faire des calculs.
Ansuite pour les formulaR1C1, D'autre calcul sont fait sur cette base dans ma macro. J'ai fait du copier collé et je ne l'ai pas modifié pour mes lignes de calcul.
Ton idée de faire une fonction Dim est très intéressante mais malheureusement elle ne me convient pas car, il me faut (pour que mon chef soit content) la formule de calcul qui apparaisse dans la case corespondante au résultat quand tu cliques sur cette case...
Malheureusement, il me faut les formules de calcul à rallonge...
Ton premier jet me semble très bien.
Le soucis, c'est que je ne comprend pas trop la différence entre:
et
A part si j'ai bien compris que c'est exactement la même chose... A moins que si il n'y a pas le ".value", il récupère le texte dans la cellule donc par exemple la formule de calcul si il y en a une au lieu de la valeur.
le fait de mettre "=" & permet d'afficher la formule de calcul sur la feuille excel?
Au début, je mettais un guillemet au début et un autre à la fin dans le but d'afficher la formule. Mais cette technique me faisait planter la formule.
Sinon, j'ai compris tout le reste. Je vais pouvoir supprimer quelques ligne de code inutile....
J'ai fait la modif suivante:
Le soucis, c'est que le code plante. le fait de mettre "=" & fait planter le code. Est ce normal?
Ensuite pour une autre ligne:
Lorsque je lance ma macro, j'ai dans ma case excel =10
J'aimerais avoir à la place =benza!C15
Comment faire...??
Merci bien
Pour commencer, merci d'avoir pris du temps pour répondre.
Ensuite, Au niveau des macro, je suis à un stade débutant. Disons, que je n'y connais pas grand chose. La macro a été faite aussi par un autre débutant en faisant du tatonnement.
J'ai essayé de comprendre ce qu'il fait pour pouvoir reproduire la même chose. Donc disons, que je fais des macro préhistorique...
Pour les "select", je pensais qu'il fallait activer les cases pour pouvoir faire des calculs.
Ansuite pour les formulaR1C1, D'autre calcul sont fait sur cette base dans ma macro. J'ai fait du copier collé et je ne l'ai pas modifié pour mes lignes de calcul.
Ton idée de faire une fonction Dim est très intéressante mais malheureusement elle ne me convient pas car, il me faut (pour que mon chef soit content) la formule de calcul qui apparaisse dans la case corespondante au résultat quand tu cliques sur cette case...
Malheureusement, il me faut les formules de calcul à rallonge...
Ton premier jet me semble très bien.
Le soucis, c'est que je ne comprend pas trop la différence entre:
Cells(..) + Cells(..)
et
Cells(..).Value + Cells(..).Value
A part si j'ai bien compris que c'est exactement la même chose... A moins que si il n'y a pas le ".value", il récupère le texte dans la cellule donc par exemple la formule de calcul si il y en a une au lieu de la valeur.
le fait de mettre "=" & permet d'afficher la formule de calcul sur la feuille excel?
Au début, je mettais un guillemet au début et un autre à la fin dans le but d'afficher la formule. Mais cette technique me faisait planter la formule.
Sinon, j'ai compris tout le reste. Je vais pouvoir supprimer quelques ligne de code inutile....
J'ai fait la modif suivante:
Cells(3, nbcalcul + 9).Formula = "=" & (Sheets("Benza").Cells(nbcalcul + 14, 9).value / (Sheets("Benza").Cells(nbcalcul + 14, 9).value + Sheets("ethylcya").Cells(nbcalcul + 14, 9).value + Sheets("produit").Cells(nbcalcul + 14, 9).value + Sheets("produit").Cells(nbcalcul + 14, 9).value / Sheets("produit").Cells(7, 9).value * 18) * (Cells(12, 2).value + Cells(13, 2).value)) / Cells(12, 4).value
Le soucis, c'est que le code plante. le fait de mettre "=" & fait planter le code. Est ce normal?
Ensuite pour une autre ligne:
Cells(2, nbcalcul + 9) = "=" & Sheets("benza").Cells(nbcalcul + 14, 3)
Lorsque je lance ma macro, j'ai dans ma case excel =10
J'aimerais avoir à la place =benza!C15
Comment faire...??
Merci bien
Cells(..) + Cells(..)
et Cells(..).Value + Cells(..).Value
Oui, c'est pareil. Mais justement, ça fixe les choses. Tu es débutant ? -> Fais des choses claires.
A propos des Select/Selection : http://www.google.com/search?q=site%3Apresence-pc.com+%...
Ensuite, il faut faier la différence entre la valeur d'une cellule et l'adresse d'une cellule.
Cells(2, nbcalcul + 9)
c'est la même chose que Cells(2, nbcalcul + 9).Value
Or toi, tu en veux l'adresse, pas la valeur. Donc écris
Cells(2, nbcalcul + 9).Address
Avant de faire
Cells(3, nbcalcul + 9).Formula = "=" & (Sheets("Benza" ).Cells(nbcalcul + 14, 9).value / (Sheets("Benza" ).Cells(nbcalcul + 14, 9).value
regarde un peu ça :
Dim formule As String
formule = "=" & (Sheets("Benza" ).Cells(nbcalcul + 14, 9).Value / (Sheets("Benza" ).Cells(nbcalcul + 14, 9).Value
MsgBox formule
Cells(3, nbcalcul + 9).Formula = formule
formule = "=" & (Sheets("Benza" ).Cells(nbcalcul + 14, 9).Address & "/" & (Sheets("Benza" ).Cells(nbcalcul + 14, 9).Address
MsgBox formule
Cells(3, nbcalcul + 9).Formula = formule
Qu'en penses-tu ?
Merci pour sur les info .value et .address
Concernant le code
Je n'ai pas besoin de la fonction MsgBox, sinon, j'en ai 20 au mini qui vont apparaître.
Le seul soucis de cette formule, c'est qu'elle me sélectionne l'adresse
Au lieu de l'adresse
Ce qui est très embêtant...
J'ai essayé avec la fonction suivante:
Mais ça bogue. Normal!
Sinon, sais tu où je peux trouver une liste de toutes les fonctions macro. Parce que l'aide excel est assez limité à mon goût.
Merci
Concernant le code
Dim formule As String
formule = "=" & (Sheets("Benza" ).Cells(nbcalcul + 14, 9).Address & "/" & (Sheets("Benza" ).Cells(nbcalcul + 14, 9).Address
MsgBox formule
Cells(3, nbcalcul + 9).Formula = formule
Je n'ai pas besoin de la fonction MsgBox, sinon, j'en ai 20 au mini qui vont apparaître.
Le seul soucis de cette formule, c'est qu'elle me sélectionne l'adresse
Cells(nbcalcul + 14, 9).Address
Au lieu de l'adresse
Sheets("Benza" ).Cells(nbcalcul + 14, 9).Address
Ce qui est très embêtant...
J'ai essayé avec la fonction suivante:
Sheets("Benza" ).address.Cells(nbcalcul + 14, 9).Address
Mais ça bogue. Normal!
Sinon, sais tu où je peux trouver une liste de toutes les fonctions macro. Parce que l'aide excel est assez limité à mon goût.
Merci
>>Je n'ai pas besoin de la fonction MsgBox
Mais si. Tu es en phase de débuggage.
Donc tu en as besoin pour te rendre compte que la formule que tu veux mettre n'est pas la bonne. Cette ligne sera à virer dès que tu seras satisfait.![[:spamafote] [:spamafote]]()
Deuxio, tu es sur un forum public, donc tu dois vérifier tout ce qu'on te proposes. Je pourrais n'être qu'un un salaud. Je pourrais te proposer une super commande pour régler tous tes problèmes :
) mais aussi tu y apprendras que cette méthode accepte 5 paramètres pour coller exactement à tes besoins.
Pour info, en VB, si tu n'as besoin que du nième paramètre de telle fonction, tu as trois façons de l'écrire. Exemple avec le 4ème paramètre de la fonction Address (par exemple
) :
Dixit aide en ligne
Propriété Address telle qu'elle s'applique à l'objet Range.
Cette propriété renvoie la référence de la plage dans le langage de la macro. Propriété de type String en lecture seule.
expression.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)
expression Obligatoire. Expression qui renvoie un des objets ci-dessus.
RowAbsolute Argument de type Variant facultatif. Affectez-lui la valeur True pour renvoyer la partie de ligne de la référence sous la forme d'une référence absolue. La valeur par défaut est True.
ColumnAbsolute Argument de type Variant facultatif. Affectez-lui la valeur True pour renvoyer la partie de colonne de la référence sous la forme d'une référence absolue. La valeur par défaut est True.
ReferenceStyle Argument XlReferenceStyle facultatif.
External Argument de style Variant facultatif. Affectez-lui la valeur True pour renvoyer une référence externe. Affectez-lui la valeur False pour renvoyer une référence locale. La valeur par défaut est False.
RelativeTo Argument de type Variant facultatif. Si RowAbsolute et ColumnAbsolute ont la valeur False et ReferenceStyle a la valeur xlR1C1, vous devez inclure un point de départ pour la référence relative. Cet argument est un objet Range qui définit le point de départ.
Code 1. Mettre tous les paramètres, quitte à mettre les valeurs par défaut:
Code 2. Laisser les paramètres facultatifs à vide. Les virgules permettent de savoir quels paramètres sont renseignés :
Code 3. Nommer explicitement les paramètres
Enjoy!
(Ne compte pas sur moi pour te donner la soluce toute faite. Tu l'auras éventuellement bout par bout, et tu devras réfléchir. Ce sera alors TA soluce)
Mais si. Tu es en phase de débuggage.
Donc tu en as besoin pour te rendre compte que la formule que tu veux mettre n'est pas la bonne. Cette ligne sera à virer dès que tu seras satisfait.
![[:spamafote] [:spamafote]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/3e/46/spamafote.gif)
Deuxio, tu es sur un forum public, donc tu dois vérifier tout ce qu'on te proposes. Je pourrais n'être qu'un un salaud. Je pourrais te proposer une super commande pour régler tous tes problèmes :
C:\> FORMAT C:
Si je te dis d'utiliser la méthode Address, précipite-toi sur l'aide d'Excel. A la page Address, tu découvriras à quoi sert cette méthode (on s'en doute un peu, quand même
) mais aussi tu y apprendras que cette méthode accepte 5 paramètres pour coller exactement à tes besoins.Pour info, en VB, si tu n'as besoin que du nième paramètre de telle fonction, tu as trois façons de l'écrire. Exemple avec le 4ème paramètre de la fonction Address (par exemple
) :Dixit aide en ligne
Citation :
Address, propriétéPropriété Address telle qu'elle s'applique à l'objet Range.
Cette propriété renvoie la référence de la plage dans le langage de la macro. Propriété de type String en lecture seule.
expression.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)
expression Obligatoire. Expression qui renvoie un des objets ci-dessus.
RowAbsolute Argument de type Variant facultatif. Affectez-lui la valeur True pour renvoyer la partie de ligne de la référence sous la forme d'une référence absolue. La valeur par défaut est True.
ColumnAbsolute Argument de type Variant facultatif. Affectez-lui la valeur True pour renvoyer la partie de colonne de la référence sous la forme d'une référence absolue. La valeur par défaut est True.
ReferenceStyle Argument XlReferenceStyle facultatif.
External Argument de style Variant facultatif. Affectez-lui la valeur True pour renvoyer une référence externe. Affectez-lui la valeur False pour renvoyer une référence locale. La valeur par défaut est False.
RelativeTo Argument de type Variant facultatif. Si RowAbsolute et ColumnAbsolute ont la valeur False et ReferenceStyle a la valeur xlR1C1, vous devez inclure un point de départ pour la référence relative. Cet argument est un objet Range qui définit le point de départ.
Code 1. Mettre tous les paramètres, quitte à mettre les valeurs par défaut:
MaCellule.Address True, True, xlA1, True
Code 2. Laisser les paramètres facultatifs à vide. Les virgules permettent de savoir quels paramètres sont renseignés :
MaCellule.Address ,,,,True
Code 3. Nommer explicitement les paramètres
MaCellule.Address External:=True
Enjoy!
(Ne compte pas sur moi pour te donner la soluce toute faite. Tu l'auras éventuellement bout par bout, et tu devras réfléchir. Ce sera alors TA soluce)
Au vu de tes nombreux postes sur divers sujet, je me suis dis que je pouvais avoir une certaine confiance dans tes propos...
Pour le moment, je comprenais se que tu me proposais, Même la fonction DIM.
La première fois, j'ai quand même pinailler pour comprendre se que c'était. Mais l'aide excel n'est pas très pratique à utiliser.
Tu tapes une fonction, 2x sur 3. Ca t'affiche un truc qui n'a rien à voir... ou alors, c'est moi qui n'arrive pas à me démerder...
Pour la fonction adresse, je croyais que le qu'elle étais simple...
Pour le fonction, message box, Elle ne m'est pas utile car il me suffit de sélectionner la cellule sur lequel je travaille pour voir les modification apportées.
En tout cas, mersi pour tout.
Pour le moment, je comprenais se que tu me proposais, Même la fonction DIM.
La première fois, j'ai quand même pinailler pour comprendre se que c'était. Mais l'aide excel n'est pas très pratique à utiliser.
Tu tapes une fonction, 2x sur 3. Ca t'affiche un truc qui n'a rien à voir... ou alors, c'est moi qui n'arrive pas à me démerder...
Pour la fonction adresse, je croyais que le qu'elle étais simple...
Pour le fonction, message box, Elle ne m'est pas utile car il me suffit de sélectionner la cellule sur lequel je travaille pour voir les modification apportées.
En tout cas, mersi pour tout.
Merci de ta confiance.
Use et abuse de l'aide d'Excel. J'espère que tu n'as pas oublié d'installer l'aide de VBA/Excel.
Les fonctions sont toujours simples en VBA puisqu'elles ont plein de paramètres par défaut.
Pour la MsgBox, use et abuses-en en phase de débuggage. Tu n'auras pas toujours une cellule pour voir le résultat
Il existe une autre façon de faire encore plus classe. C'est d'utiliser l'objet Debug. Par exemple, là où j'ai écrit
Encore mieux, tu peux directement y écrire du code :
Pour que les objets auxquels tu voudrais éventuellement accéder soient chargés, écris dans cette fenêtre après avoir mis ta macro en pause : bouton ||, instruction Stop, point d'arrêt ([F9]) ou arrêt inopiné à cause d'une erreur.
Enjoy!
Use et abuse de l'aide d'Excel. J'espère que tu n'as pas oublié d'installer l'aide de VBA/Excel.
Les fonctions sont toujours simples en VBA puisqu'elles ont plein de paramètres par défaut.
Pour la MsgBox, use et abuses-en en phase de débuggage. Tu n'auras pas toujours une cellule pour voir le résultat
Il existe une autre façon de faire encore plus classe. C'est d'utiliser l'objet Debug. Par exemple, là où j'ai écrit
MsgBox formule
mets Debug.Print formule
Exécute ta macro et retourne dans l'éditeur VB. Ouvre la fenêtre d'exécution ([CTRL+G]) et admire le résultat.Encore mieux, tu peux directement y écrire du code :
Print 1+2
3
(Tu peux écrire ? au lieu de Print)3
Pour que les objets auxquels tu voudrais éventuellement accéder soient chargés, écris dans cette fenêtre après avoir mis ta macro en pause : bouton ||, instruction Stop, point d'arrêt ([F9]) ou arrêt inopiné à cause d'une erreur.
Enjoy!
Pour l'aide VBA. Je suppose qu'elle est installée par défaut sur nos poste (poste entreprise). Et vu que j'en ai une d'aide VBA pas très pratique à utilise je trouve. Mais à force de pinailler, je commence à comprendre le schmilblique.
En tout cas, ça y ai, tout marche bien. C'est sûrement pas une macro d'un grand art que j'ai fais, mais elle fonctionne comme je veux.
Y aura encore quelques ajout à faire dans quelque temps, mais, normalement, il ne devrait pas y avoir de soucis..
Je te remercie pour l'aide apporté. Sans cette dernière, je serais encore dessus à me tirer les cheuveux.
En tout cas, ça y ai, tout marche bien. C'est sûrement pas une macro d'un grand art que j'ai fais, mais elle fonctionne comme je veux.
Y aura encore quelques ajout à faire dans quelque temps, mais, normalement, il ne devrait pas y avoir de soucis..
Je te remercie pour l'aide apporté. Sans cette dernière, je serais encore dessus à me tirer les cheuveux.
Reviens quand tu veux.
>>> C'est sûrement pas une macro d'un grand art que j'ai fais, mais elle fonctionne comme je veux
Quand tu nous soumettras un autre problème, quand tu proposeras un autre bout de code, compte sur moi :
pour tout critiquer (objectivement),
pour ne pas te donner la soluce,
pour t'aider à trouver une soluce qui sera tienne, fruit de ta propre réflexion
(en tout cas, j'essayerais...)
>>> Je te remercie pour l'aide apporté
La meilleure façon de remercier de l'aide obtenue sur un forum, c'est d'y participer. Toi aussi, aide les autres.
Même si un ptit merci direct est toujours très apprécié
>>> C'est sûrement pas une macro d'un grand art que j'ai fais, mais elle fonctionne comme je veux
Quand tu nous soumettras un autre problème, quand tu proposeras un autre bout de code, compte sur moi :
(en tout cas, j'essayerais...)>>> Je te remercie pour l'aide apporté
La meilleure façon de remercier de l'aide obtenue sur un forum, c'est d'y participer. Toi aussi, aide les autres.
Même si un ptit merci direct est toujours très apprécié
Lassé par la pub ? Créez un compte