Conversion XL4 à VBA

Adn_n Messages postés 1 Date d'inscription vendredi 12 mai 2017 Statut Membre Dernière intervention 12 mai 2017 - 12 mai 2017 à 10:19
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 12 mai 2017 à 16:29
Bonjour à tous,

Je viens de m'inscrire car j'ai un problème avec une macro XL4 que je dois traduire en VBA. Cette macro doit normalement calculer des coefficients de polynômes afin de lisser une série de données.

J'ai déjà traduit une grosse partie de la macro mais j'ai un problème sur 3 fonctions qui sont utilisées car je ne sais pas à quoi elles correspondent :

=DEFINIR.NOM("")
=POSER.NOM("";CELLULE.ACTIVE())
=CALCULER.DOCUMENT()

La macro en entière est la suivante :

=ECRAN(FAUX)
=SELECTIONNER("L13C1:L500C1")
=EFFACER(3)
=SELECTIONNER("L13C4:L500C7")
=EFFACER(3)


Val_1=('Calcul Coef'!L(-2)C(1)-'Calcul Coef'!L(-3)C(1))/'Calcul Coef'!L(-4)C(1)
Cpt_1='Calcul Coef'!L(-4)C(1)

=SELECTIONNER("L13C1")
=FORMULE(Cpt_1)

=TANT.QUE(Cpt_1<'Calcul Coef'!L(-8)C(1))
=SELECTIONNER(DECALER(CELLULE.ACTIVE();1;0))
=FORMULE(Cpt_1+'Calcul Coef'!L(-12)C(1))
Cpt_1=Cpt_1+'Calcul Coef'!L(-13)C(1)

=SUIVANT()

=SELECTIONNER("L13C1")

=TANT.QUE(CELLULE.ACTIVE()<>"")
=DEFINIR.NOM("Pos_1")
=POSER.NOM("Pos_1";CELLULE.ACTIVE())

=SELECTIONNER("L11C9")
=FORMULE(Pos_1)

=SELECTIONNER(DECALER(CELLULE.ACTIVE();2;0))
=TANT.QUE(CELLULE.ACTIVE()<Pos_1)
=SELECTIONNER(DECALER(CELLULE.ACTIVE();1;0))
=SUIVANT()

=DEFINIR.NOM("Pos_2")
=POSER.NOM("Pos_2";CELLULE.ACTIVE())
=SELECTIONNER("L(-1)C:LC")
=COPIER()
=SELECTIONNER("Pos_1")
=SELECTIONNER(DECALER(CELLULE.ACTIVE();0;1))
=COLLAGE.SPECIAL(3;1;FAUX;VRAI)

=SELECTIONNER("Pos_2")
=SELECTIONNER("L(-1)C(2):L(-1)C(5)")
=COPIER()
=SELECTIONNER("Pos_1")
=SELECTIONNER(DECALER(CELLULE.ACTIVE();0;3))
=COLLAGE.SPECIAL(3;1;FAUX;FAUX)
=SELECTIONNER(DECALER(CELLULE.ACTIVE();1;-3))

=SUIVANT()

=CALCULER.DOCUMENT()
=SELECTIONNER("L1C1")
=ECRAN(VRAI)
=RETOUR()

Et si quelqu'un sait pourquoi il y a un 3 pour les lignes =EFFACER(3), je suis preneur aussi.

Merci d'avance !

4 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
12 mai 2017 à 16:24
Pour EFFACER, voici la syntaxe

Syntaxe

EFFACER(no_type)
EFFACER?(no_type)
No_type est un nombre de 1 à 4 qui spécifie ce qui doit être effacé. Seules les valeurs 1, 2 et 3 sont valides si l'élément sélectionné est un graphique.
Dans une feuille de calcul ou une feuille macro, ou si tout le graphique est sélectionné, voici ce qui se produit :

No_type Efface

1 Tout
2 Les formats (s'il s'agit d'un graphique, efface le format du graphique ou les images)
3 Les formules ou le contenu d'une cellule (s'il s'agit d'un graphique, efface toutes les séries de données)
4 Les annotations (y compris les annotations sonores; ceci ne s'applique pas aux graphiques)


Cherche sur le Web pour un fichier nommé MACROFUN.HLP
Il explique chaque fonction xl4
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
12 mai 2017 à 16:26
Equivaut, dans le menu Insertion, à choisir Nom puis Définir. Définit un nom pour la feuille ou la feuille macro active. Utilisez DEFINIR.NOM au lieu de POSER.NOM quand vous voulez définir un nom dans la feuille active.

Syntaxe

DEFINIR.NOM(nom_texte; réfère_à; type_macro; raccourci_texte; masqué; catégorie; local)
DEFINIR.NOM?(nom_texte; réfère_à; type_macro; raccourci_texte; masqué; catégorie; local)
Nom_texte est le texte que vous voulez utiliser comme nom. Les noms ne peuvent pas contenir d'espace et ne peuvent pas s'apparenter à des références de cellule.
Réfère_à décrit ce à quoi nom_texte doit faire référence et peut prendre les valeurs suivantes.

Si réfère_à est Alors nom_texte est

Un nombre, du texte ou une valeur logique Défini pour faire référence à cette valeur
Une référence externe, telle que !$A$1 ou Ventes!$A$1:$C$3 Défini pour faire référence à ces cellules
Une formule sous forme de texte, telle que "=2*PI()/360" (Si la formule contient des références, elles doivent être de style L1C1, par exemple "=L2C2*(1+LC(-1)")) Défini pour faire référence à cette formule
Omis Défini pour faire référence à la sélection en cours
Les deux arguments suivants, type_macro et raccourci_texte, ne sont valides que si la feuille de la fenêtre active est une feuille macro.
Type_macro est un nombre de 1 à 3 qui indique le type de macro.

Type_macro Type de macro

1 Fonction personnalisée (macro-fonction)
2 Macro-commande
3 ou omis Aucun (c'est-à-dire que nom_texte ne fait pas référence à une macro)
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
12 mai 2017 à 16:28
Feuilles macro uniquement
Equivaut à choisir le bouton "Calculer document" dans l'onglet Calcul dans la boîte de dialogue Options qui apparaît à l'écran lorsque vous choisissez, dans le menu Outils, la commande Options. Calcule seulement la feuille de calcul active.

Syntaxe

CALCULER.DOCUMENT( )

Remarques

Si un graphique est actif, CALCULER.DOCUMENT renvoie la valeur d'erreur #VALEUR!.

Ça doit être comme CALCULATE pour forcer le recalcul si en mode manuel
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
12 mai 2017 à 16:29
Feuilles macro uniquement
Cette fonction définit un nom dans une feuille macro pour faire référence à une valeur. La fonction POSER.NOM est utile pour stocker des valeurs pendant les calculs de la macro.

Syntaxe

POSER.NOM(nom_texte; valeur)

Nom_texte représente le nom, sous forme de texte, qui fait référence à l'argument valeur.
Valeur représente la valeur à stocker dans l'argument nom_texte.
Si l'argument valeur est omis, le nom de l'argument nom_texte est supprimé.
Si l'argument valeur est une référence, l'argument nom_texte est défini pour y faire référence.

Remarques

Si vous voulez définir un nom sous la forme d'une valeur constante, vous pouvez utiliser la syntaxe suivante plutôt que la fonction POSER.NOM :

nom_texte=valeur
Reportez-vous aux deux premiers exemples suivants.

La fonction POSER.NOM définit les noms sous forme de références absolues, même si une référence relative est spécifiée. Reportez-vous aux troisième et quatrième exemples suivants.
Si vous voulez que l'argument nom_texte se réfère en permanence à la valeur de la cellule indiquée plutôt qu'à la référence elle-même, vous devez utiliser la fonction DEREF. L'utilisation de la fonction DEREF empêche l'argument nom_texte de faire référence à une nouvelle valeur chaque fois que le contenu de la cellule indiquée par la référence change. Reportez-vous au dernier exemple suivant.

Conseils

Si vous devez renvoyer une matrice à une feuille macro (par exemple, si la macro a besoin d'une liste de toutes les fenêtres ouvertes), attribuez un nom à la matrice au lieu de placer ses données dans une plage de cellules. Par exemple :

POSER.NOM("OuvreDocuments";FENETRES()) ou
POSER.NOM("OuvreDocuments";{"FEUIL1";"FEUIL2"})
Vous avez alors la possibilité d'utiliser la fonction INDEX avec le nom que vous avez défini pour accéder aux éléments de la matrice stockée dans ce nom.

Lorsque vous déboguez une macro et que vous voulez connaître la valeur en cours affectée à un nom créé par la fonction POSER.NOM, vous pouvez interrompre la macro, et dans le menu Insertion choisir Nom puis la commande Définir. Sélectionnez ensuite le nom dans la boîte de dialogue Définir un nom.

Exemples

Chacune de ces formules définit le nom Compteur pour faire référence à la valeur constante 1 dans la feuille macro :

POSER.NOM("Compteur";1)
Compteur=1


Chacune de ces formules redéfinit Compteur pour qu'il fasse référence à la valeur en cours de Compteur plus 1 :

POSER.NOM("Compteur";Compteur+1)
Compteur=Compteur+1


La formule macro suivante définit le nom Référence pour faire référence à la cellule $A$1 :

POSER.NOM("Référence";A1)


La formule macro suivante définit le nom Résultats pour faire référence aux cellules $A$1:$C$3 :

POSER.NOM("Résultats";A1:C3)


La formule macro suivante définit le nom Plage pour désigner la sélection en cours :

POSER.NOM("Plage";SELECTION())


Si $A$1 contient la valeur 2, la formule macro suivante définit le nom Index pour faire référence à la valeur constante 2 :

POSER.NOM("Index";DEREF(A1)
0
Rejoignez-nous