Ecriture de formule en VBA puis copie valeur

isywybad

XLDnaute Nouveau
Hello Hello Excedownloader,

ci-dessous mon problème ;

J'ai une table avec un nombre de ligne conséquent, pour récupérer une information j'ai dans une colonne que l'on va appeler X la formule suivante :

=SIERREUR(INDEX(S_Sim_ER;EQUIV(1;(S_Sim_Nom=$A2)*(DECALER(S_Sim_DateRef;;EQUIV($B2;S_Sim_Chrono;0)-1)<>0);0));"AUTRE")


Je tire cette formule sur toutes les lignes mais vu le nombre les temps de calcul sont très long.

Est-ce que VBA peut répondre à mon besoin : Gain de temps ? Et si oui, comment cela se traduirait - il ?

Est il possible d'appliquer la formule à l'ensemble des lignes puis ensuite de la copier en valeur ?

Merci pour votre aide

Isy
 

laurent950

XLDnaute Accro
Re : Ecriture de formule en VBA puis copie valeur

Bonsoir,

Pourquoi ne pas stocker votre formule dans une variable tableau
et au lieu de la glisser définir la zone a coller et le tous en une fois.

Pour coller en une fois sur 30000 cellules d'une feuille excel c'est
c'est très rapide pour pas dir imédiat

exemple :
VB:
Sub Macro1()

' Tableau copie formule
Dim T() As Variant
ReDim T(1 To 10000, 1 To 3)

For i = 1 To UBound(T, 1)
For j = 1 To UBound(T, 2)
T(i, j) = "=IFERROR(INDEX(S_Sim_ER,MATCH(1,(S_Sim_Nom=R[1]C1)*( OFFSET(S_Sim_DateRef,,MATCH(R[1]C2,S_Sim_Chrono,0)-1)<>0),0)),""AUTRE"")"
Next j
Next i

[A1].Resize(UBound(T, 1), UBound(T, 2)) = T()

End Sub
Laurent
 

isywybad

XLDnaute Nouveau
Re : Ecriture de formule en VBA puis copie valeur

Bonjour Laurent,

Merci pour votre réponse.

Si je comprends bien, la formule définie une sorte de tableau virtuelle dans lequel elle réalise les calculs, puis elle me colle tout cela dans mon onglet. Est-ce la dernière ligne qui le fait ?


Comment puis je insérer une variable supplémentaire dans votre formule qui permettrait de s'adapter à mon tableau initial qui peut varier en nombre de ligne ?

En vous remerciant par avance.

Cdlt

Isy
 

isywybad

XLDnaute Nouveau
Re : Ecriture de formule en VBA puis copie valeur

Laurent,

En faisant joujou avec le code j'ai compris les Ubound. Merci bien.

Par contre, comment puis je ajouter une nouvelle colonne avec une formule différente de la première mais qui suivrait le même principe (elle devra être coller sur toutes les lignes.

Merci par avance.

Isy
 

laurent950

XLDnaute Accro
Re : Ecriture de formule en VBA puis copie valeur

Bonsoir,

Si je comprends bien, la formule définie une sorte de tableau virtuelle dans lequel elle réalise les calculs, puis elle me colle tout cela dans mon onglet. Est-ce la dernière ligne qui le fait ?
Oui (c’est la dernière ligne qui le fait ? = [A1].Resize(UBound(T, 1), UBound(T, 2)) = T()
En fait l’astuce, vous faite une fonction (formule) via excel est avec l’enregistreur de macro vous faite une fois la formule crée dans la cellule excel: *choix avec l’Enregistreur de macro
1) Non de la macro
2) Appuyer sur enregistrer
3) Clique dans la cellule ou il y a la formule
4) Appuyer sur Enter
5) Arrêter l’enregistrement de la macro
Votre formule crée est transformer en formule VBA.
Dim T() As Variant
ReDim T(1 To 10000, 1 To 3)
Traduction = ReDim (Dimensionne le tableau T “T()”
Traduction = 1 To 10000 (Ligne 1 à 1000) dimension 1
Traduction = 1 To 3 (Colonne 1 à 3) dimension 2
Soit : Par contre, comment puis je ajouter une nouvelle colonne avec une formule différente de la première mais qui suivrait le même principe (elle devra être coller sur toutes les lignes.
Traduction = Redim Preserve (Garde le tableau en mémoire avec toute les données intinitial et ajoute une ou des colonnes au tableau T “T()”
DONC = ReDim Preserve T(1 To 10000, 1 To 5)
Ont ajoute deux colonnes au tableau déja existant avec des données
Soit les colonnes 4 est 5 sont vides en méméoire
T(1,4) = Formule de votre *choix de votre formule II
T(1,5) = Formule de votre *choix de votre formule III
T(1,1) = Votre formule déjà en mémoire
T(1,2) = Votre formule déjà en mémoire
T(1,3) = Votre formule déjà en mémoire
Rappel T est un tableau a Deux dimension soit
1 = La ligne
Est 4,5,1,2,3 = Les colonnes

Laurent
 

Discussions similaires

Réponses
7
Affichages
372
Réponses
17
Affichages
1 K

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 520
dernier inscrit
Azise