Je n'arrive pas à rentrer une commande dans une cellule :x

Bonjour,

Je n’y connais rien en VBA je tâtonne a vrai dire mais j’aimerai arriver à un résultat.

J’ai le Code suivant.

Sub RemplireFeuille1()

'i pour utiliser "For" vitrage 1
'y pour utiliser "For" vitrage 2
'j pour utiliser "For" intercalaire
'r pour localiser la ligne ou on édite
's pour editer un texte dans la cellule

Dim i As Integer
Dim y As Integer
Dim j As Integer
Dim r As Integer

r = 2

Dim s As Variant

Dim Table1 As Variant
Dim Table2 As Variant
Dim Table3 As Variant

Table1 = Array("4 VIPLUS 1.1", "6 VIPLUS 1.1", "4 VIPLUS 1.0", "44/6 iplus 1.1", "33/2 IPLUS, 44/2 IPLUS", "G4", "G5", "G6", "G8", "G10", "4 SUN 70/39", "6 SUNCOOL 50/25", "6 VISOL 40/22", "44/6 ou SP10", "33/2", "33/2 OPALE", "44/2", "44/2 OPALE", "44/2 SILENCE", "44/2 STOPSOL CLAIR", "44/2 G200", "55/2", "66/8 ( vitrine)", "66/2, G200 4mm", "G200 6mm", "cathedral klein", "Dépoli acide 4mm", "Delta clair", "Delta mat")
Table2 = Array("G4", "G5", "G6", "G8", "G10", "4 SUN 70/39", "6 SUNCOOL 50/25", "6 VISOL 40/22", "44/6 ou SP10", "33/2", "33/2 OPALE", "44/2", "44/2 OPALE", "44/2 SILENCE", "44/2 STOPSOL CLAIR", "44/2 G200", "55/2", "66/8 ( vitrine)", "66/2, G200 4mm", "G200 6mm", "cathedral klein", "Dépoli acide 4mm", "Delta clair", "Delta mat")
Table3 = Array("06N", "08N", "10N", "12N", "14N", "16N", "18N", "20N", "22N", "24N", "06I", "08I", "10I", "12I", "14I", "16I", "18I", "20I", "22I", "24I")

'table1 tout les vitrages
'table2 tout les vitrages sauf ceux à faible émissivités(non missible)
'table3 tout les intercalaire Inox et noir


For i = 0 To 30
    For y = 0 To 24
        For j = 0 To 19
   
            's = "RECHERCHEV(" + Table1(i) + ";Tarif!$A$53:$I$88;9;0)+RECHERCHEV(" + Table3(i) + ";Tarif!$K2$:$N21$;1;0)" + RECHERCHEV(" + Table2(i) + ";Tarif!$A$53:$I$88;9;0)"
            Worksheets("Feuil1").Cells(r, 1).Formula = "RECHERCHEV(s;Tarif!$A$53:$I$88;9;0)"
            r = r + 1
            s = " + Table1(i) + "

    
    
        Next j
    Next y
Next i

End Sub

Cela fonctionne tant que je ne mets pas de égal avant le RECHERCHEV :
Ca fonctionne ==> Worksheets(« Feuil1 »).Cells(r, 1).Formula = « RECHERCHEV(s;Tarif!$A$53:$I$88;9;0) »
ça ne fonctionne plus ==> Worksheets(« Feuil1 »).Cells(r, 1).Formula = « =RECHERCHEV(s;Tarif!$A$53:$I$88;9;0) »

J’ai tenté tout le week end sans succès de résolver cette énigme, avez vous une idée ?.

Bonjour

Je ne sais pas ce que tu cherches à réaliser
Peut être nous exposer tout le contexte de la démarche et de te proposer une approche la plus adaptée pour obtenir le résultat souhaité
Ta procédure bien que fonctionnant me semble lourde (3 boucles imbriquées avec au total un nombre impressionnant de combinatoires (plus de 15500 cellules alimentées)

Toujours est 'il que pour la faire fonctionner il faut mettre ta ligne comme ceci :

Worksheets(« Feuil1 »).Cells(r, 1).FormulaLocal = « =RECHERCHEV(s;Tarif!$A$53:$I$88;9;0) »

C’est ce que j’ai fait et le code est allé jusqu’à son terme

Essaies et dis moi

MACRO VITRAGE.xlsm (254,1 Ko)

Encore Vous « FFO » ^^.

Pour vous expliquer, je souhaite créer une base de données à partir des éléments dans le tableau ci joint.

J’ai une feuille qui se nomme base de donnée

Dans la colonne A, je souhaite retrouver la codification du vitrage qui se compose pour exemple d’un double vitrage type 4/16 Argon et Warm Edge Inox/4VIplus 1.1 :
Le code du vitrage 4 (1A) le Code de l’intercalaire 16 Argon WarmEdge Inox (16I) Le code du vitrage 4 IPlus 1.1 (1B) ==> 1A16I1B

Et ce pour toute les composition possible selon Table 1, 2, 3 de la macro

Et la même chose avec :
Le prix (colonne F)
Les données d’épaisseur (colonne E)
Les données de poids (Colonne S)
Créer la désignation (Colonne B) type « 4 / 16 Argon Warm Edge Inox / 4 VIplus 1.1 » pour reprendre l’exemple.

Le tout pointé sur les informations en Feuille « Tarif », de façon à ce que si je modifie les prix des vitrages dans Tarif, la base de données se mette a jour automatiquement.

Peut être modifier les tables avec les cellules au lieu des textes exemple « A53 » au lieu de « G4 ».

Je dois m’absenter ce jour
Je regarde dès que possible et te réponds
Un peu de patience
merci

Aucun problème je vous remercie déjà de tout l’investissement déjà fourni.

TEST MACRO VITRAGE.xlsm (191,2 Ko)
FFO !

J’ai avancé sur la macro, il ne me manque plus qu’a regler pourquoi ma table1 bloque sur la première réf et après normalement c’est tout bon ^^.

Si tu sais, je suis preneur.

Cordialement.

Bonjour

Belle prouesse !!!

Ton bug viens de la déclaration des 2 premières boucles :

For i = 0 To 30
For y = 0 To 24

Chacune d’elle fait appel à 1 séries de tableaux définies en début de procédure :

Table1 et Table2

la première possède 30 éléments la deuxième 24
Or chacune d’elle démarre à partir de 0

Pour cibler l’intégralité de celles-ci partant de 0 il faut déterminer la dernière de leur nombre-1
donc tu dois écrire ceci :

For i = 0 To 29
For y = 0 To 23

Et de balayer l’ensemble de leur composition soit les 30 parties pour Table1 et 24 parties pour Table2

Ainsi plus de plantage

Il faudra adapter ces déclarations en fonction de l’ajout ou suppression de parties dans ce même esprit

J’ai rajouté dans ton code :

Pour une exécution plus rapide ces 2 lignes en tout début et en toute fin :

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

Et pour réaliser un nettoyage de l’onglet « TESTMACRO » avant l’enrichissement de celui-ci par le traitement :

Worksheets(« TESTMACRO »).Range(« A2 », « X » & Worksheets(« TESTMACRO »).Range(« A » & Rows.Count).End(xlUp).Row + 1).ClearContents

Je te joint ton fichier avec toutes ces adaptations

Testes et dis moi

TEST MACRO VITRAGE.xlsm (653,3 Ko)

Merci grâce à toi ma macro VBA fait entièrement le taff,

Même malgré tes craintes, le fichier se génère assez rapidement, (en 2 3 minutes).

Je n’aies pas utilisé xlCalculationManual et xlCalculationAutomatique, est ce vraiment nécessaire ?

Merci pour ton retour

Ravi de t’avoir satisfait

les instructions en début et fin de code :

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

Permettent un gain de temps non négligeable

Chez moi avec leur utilisation sur ton fichier le traitement en 10 secondes est réalisé alors que sans il atteint presque la minute

Et bien sur ceci s’accroit de manière exponentielle en lien avec l’accroissement du nombre d’enregistrements à traiter

Leur présence ne nuit en rien et permet un exécution beaucoup plus rapide

A toi de voir

Fais déjà un essai pour te rendre compte après tu feras ton choix

Tiens moi informé