macro: plage variable & application formules

skun

XLDnaute Occasionnel
Bonjour le forum, et bon début de semaine

J'ai enregistré une macro qui a pour but de recopier des formules sur une plage définie.
Or la plage étant variable, j'aimerai que la macro agrandie ou réduise la taille de son champ d'application (sur la collone F) en fonction de la taille de la plage (de la collonne A).

Ceci est plus détaillé dans mon exemple.

Cependant, j'ai un autre problème:
j'utilise beaucoups de formules de recherche (index/equiv) dépendant les unes des autres et se référant à une autre feuille. Et il se trouve que j'ai des messages d'erreur qui se répettent car je pense que ca fait un effet de "boucle" et que ca ne s'arrete jamais de chercher.Et vu le nombre de formules qu'il y a dans mon tableau ca me pose un petit soucil.

J'aimerai savoir si il est possible de commander une macro pour utiliser une formule comme je souhaite faire plus haut (en gardant ce genre de commande dans le code: "=RC[-1]+RC[-2]") , mais en ne laissant que le résultat dans la cellule, afin d'éviter les que la formule soit en constant "recalcul" ?

Je vous remercie

skun
 

Pièces jointes

  • Exemple1.xls
    28.5 KB · Affichages: 132
  • Exemple1.xls
    28.5 KB · Affichages: 140
  • Exemple1.xls
    28.5 KB · Affichages: 139

Catrice

XLDnaute Barbatruc
Re : macro: plage variable & application formules

Bonjour,

Tu peux essayer ceci :
Sub Test()
Range("A10:" & Range("A65536").End(xlUp).Address).Offset(0, 5) = "=RC[-1]+RC[-2]"
End Sub

Pour les index/equiv, tu dois avoir un probleme de references circulaires.
Tu peux effectivement mettre les resultats dans les cellules sans formule (voir exemple joint).
Mais il faudrait regler se probleme de references circulaires
 

Pièces jointes

  • Exemple.xls
    32.5 KB · Affichages: 126
  • Exemple.xls
    32.5 KB · Affichages: 132
  • Exemple.xls
    32.5 KB · Affichages: 130
Dernière édition:

Gael

XLDnaute Barbatruc
Re : macro: plage variable & application formules

Bonjour Skun,

Pour la macro essaye le code suivant:

Code:
Sub Macro2()
    Range("F10").FormulaR1C1 = "=RC[-1]+RC[-2]"
    Range("F10:F" & Range("A2000").End(xlUp).Row).FillDown
End Sub

@+

Gael

Et bonjour Catrice, collision mais ton code est plus simple
 

skun

XLDnaute Occasionnel
Re : macro: plage variable & application formules

Bonjour Catrice et Gael,

merci pour vos réponse, les codes fonctionnent comme je le souhaitais.

En ce qui concerne mon deuxième problème, c'est en effet un problème de references circulaires, c'est ce qui est marqué dans le message d'erreur.

Les résultats sont pourtant ceux attendus..

Est ce que le problème peut provenir du fait que certaines Equiv/index dépendent du résultat de d'autres Equiv/index donc selon les moment d'exécution celà peut provoquer des problèmes?
Dans ce cas il suffirait dans une macro par exemple, de bien placer les formules dans le bon ordre chronologique ?

merci pour vos infos

skun


Edit: Catrice , j'ai testé ton fichier, c'est super ca marche, mais vu la complixité des formules que j'utilise, et mon niveau déplorable en VBA, je suis incapable de traduire ces formules en VBA, est-il possible de garder la forme: "=RC[-1]+RC[-2]" dans la macro et n'afficher que les résultats?
 
Dernière édition:

skun

XLDnaute Occasionnel
Re : macro: plage variable & application formules

Re,

j'ai combiné vos 2 codes, avec un bout d'enregistrement de macro pour en arriver là:

Code:
Sub Test()
    Range("A10:" & Range("A2000").End(xlUp).Address).Offset(0, 5) = "=RC[-1]+RC[-2]"
    Range("F10:F" & Range("A2000").End(xlUp).Row).Select
        Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Range("A1").Select
End Sub

j'ai le résultat souhaité, mais est il possible (tout en gardant la forme "=RC[-1]+RC[-2]" dans le code) d'arriver directement au résultat sans passer par ces étapes?
 

Gael

XLDnaute Barbatruc
Re : macro: plage variable & application formules

Rebonjour à tous,

Essaye le code suivant qui mettra directement le résultat dans les cellules:

Code:
    For Each cell In Range("F10:F" & Range("A2000").End(xlUp).Row)
    cell.Value = cell.Offset(0, -1) + cell.Offset(0, -2)
    Next

@+

Gael
 

skun

XLDnaute Occasionnel
Re : macro: plage variable & application formules

Re Gael,
merci pour ta réponse, mais j'ai du mal m'exprimer :eek:

mon problème est que j'ai des formules qui sont pour moi trés compliquées, et que j'aimerai les appliquer à l'aide d'une macro.
Car étant sur les cellules, elles font ralentir le fichier, et provoquent des messages d'erreur (problème de liaison, comme quoi il y a trop d'éléments selectionnés...)

Je vous joint deux nouveaux fichiers joints plus représentatif de ma problématique (il faut d'abord ouvrir "Test" puis "Exemple" sinon ca va poser problème ^^)

Vu mon niveau en VBA, la complexité et la multitude de formules je pense que le moins compliqué serait d'utiliser une macro qui:

-appliquerai des formules dans les plages correspondantes.
-Copier/coller (en valeur, afin d'éviter les problèmes de ralentissement & liaisons etc..)

avec une méthode de ce style:

Code:
Range("A10:" & Range("A2000").End(xlUp).Address).Offset(0, 5) = "=RC[-1]+RC[-2]"
    Range("F10:F" & Range("A2000").End(xlUp).Row).Select
        Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Range("A1").Select
Le problème c'est que j'ai essayer avec l'enregistreur de macro, d'enregistrer la saisie de ces formules, mais ca me marque: "enregistrement impossible" :(

merci pour vos conseil

skun
 

Pièces jointes

  • test.zip
    18.8 KB · Affichages: 49
  • test.zip
    18.8 KB · Affichages: 45
  • test.zip
    18.8 KB · Affichages: 42
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : macro: plage variable & application formules

Re,

Ci-joint un exemple.

Sub Test2()
With Range("A10:" & Range("A65536").End(xlUp).Address).Offset(0, 5)
.Formula = "=RC[-1]+RC[-2]"
.Value = .Value
End With
End Sub

Ce code te permet de saisir la formule et remplace la formule par son resultat.
 

Pièces jointes

  • Exemple.xls
    32.5 KB · Affichages: 104
  • Exemple.xls
    32.5 KB · Affichages: 113
  • Exemple.xls
    32.5 KB · Affichages: 112

skun

XLDnaute Occasionnel
Re : macro: plage variable & application formules

Euh ..
enfaite jsuis tombé sur un os, je pense que vu que c'est une matrice, la manip Ctrl +shift + Entrée ne s'active pas. Aurais tu une idée de comment faire?

Code:
Sub test2()
With Range("A10:" & Range("A65536").End(xlUp).Address).Offset(0, 10)
.Formula = "=IF(OR(AND(R1C1<>""camion"",R[-4]C[-8]=""""),(R[-4]C[-8]="""")),"""",IF(R1C1=""camion"",MAX(([Test.xls]Feuil1!R2C3:R65536C3=R1C2)*(([Test.xls]Feuil1!R2C2:R65536C2+[Test.xls]Feuil1!R2C1:R65536C1)<=(R[-4]C[-10]+(R[-4]C[-6]+0.5/24)))*([Test.xls]Feuil1!R2C1:R65536C1+[Test.xls]Feuil1!R2C2:R65536C2)),MAX(([Test.xls]Feuil1!R2C3:R65536C3=R[-4]C[-8])*(([Test.xls]Feuil1!R2C2:R65536C2+[Test.xls]Feuil1!R2C1:R65536C1)<=(R[-4]C[-10]+(R[-4]C[-6]+0.5/24)))*([Test.xls]Feuil1!R2C1:R65536C1+[Test.xls]Feuil1!R2C2:R65536C2))))"
.Value = .Value
End With
End Sub

merci


skun
 
Dernière édition:

skun

XLDnaute Occasionnel
Re : macro: plage variable & application formules

Salut Pierrot93,

enfaite j'avais déjà essayé et ca marche pas, je viens de re tester toujours rien, bon bin peut etre que l'erreur vient d'ailleurs je vais chercher.

merci quand meme :)

skun
 

skun

XLDnaute Occasionnel
Re : macro: plage variable & application formules

re,

Donc avant d'utiliser .FormulaArray ca ne m'affiche rien surment dûe à la non activation et avec ca me dit: "Impossible de définir la propriété FormulaArray de la classe Range. Erreur d'exécution '1004'"

si tu as une idée?

merci

A+

skun
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : macro: plage variable & application formules

Re

d'après le message d'erreur, un nom de plage nommée, de feuille ou de classeur qui ne correspondrait pas... maintenant suis pas un formuliste... dernière idée, essaye avec l'enregistreur de macro, pour voir la formule qu'il en sortirait....

bonne soirée
@+
 

Discussions similaires

Statistiques des forums

Discussions
312 372
Messages
2 087 717
Membres
103 653
dernier inscrit
Valentine