Boucle de Calcul sous VBA

Djawelle Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
 marie -
Bonjour,

J'ai quelques soucis sous VBA car je débute complétement et j'aurai besoin de votre aide. Je souhaite réaliser une macro qui remplira totalement une grille (B39:L65).
J'ai effectué 2 fois de suite l'enregistrement de la macro, le tout étant de créer une seule macro avec une boucle à l'intérieure qui change mes copie/colle/valeur finale.
Je joins ci-dessous 2 boucles que j'ai créé avec les commentaires des cellules.
Un immense merci pour votre aide!
Djawelle

Sub calcul_CGRP_1()
'
' calcul_CGRP_1 Macro
' Macro enregistrée le 17/08/2006 par gaelle.monnier
'

'
Range("A39").Select
'Il faut que ça fonctionne de A39 jusqu'à A65
Selection.Copy
Range("B13").Select
'Toujours coller dans cette case
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B38").Select
'Il faut que ça fonctionne de B38 jusqu'à L38
Application.CutCopyMode = False
Selection.Copy
Range("B10").Select
'Toujours coller dans cette case
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B22").Select
'Toujours coller dans cette case
Application.CutCopyMode = False
Selection.Copy
Range("B39").Select
'Retour de la valeur finale dans la grille B39:L65
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Version 2, la suite!!!
Range("A40").Select
Selection.Copy
Range("B13").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("C38").Select
Application.CutCopyMode = False
Selection.Copy
Range("B10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B22").Select
Application.CutCopyMode = False
Selection.Copy
Range("B40").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

End Sub
A voir également:

5 réponses

balou311 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   87
 
Salut,

je ne comprends pas vraiment ce que tu veux faire et à mon avis un petit bout de code peut remplacer tout ça de manière bien plus simple.

peux tu expliquer ce que tu veux faire que je puisse te griffoner un bout de code.
0
Djawelle Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Merci!
Alors j'ai une grille fixe avec des données dans une colonne (A39 à A65, nommons la A) et sur une ligne (B38 à L38, nommons la B). Je souhaite remplir "l'intérieur" de cette grille de la manière suivante:
Copier une cellule de la colonne A et la coller valeur au dessus en B13 (j'ai une suite de calcul) + Copier une cellule de la ligne B et la coller valeur au dessus en B10 (suite de calcul).
Là un résultat est calculé en B22. Je copie ce résultat et le colle/valeur dans la grille B39:L65

Je ne sais pas si mes explications sont plus claires... J'espère!
Merci en tout cas!
0
balou311 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   87 > Djawelle Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
alors si j'ai bien compris:
tu prends une valeur de ta colonne A on va appeler cette valeur val_col_A
tu prends une valeur de ta ligne B on va appeler cette valeur val_row_B

tu fais une operation qui inclu val_col_A et val_row_B pour te donner un résultat : result

et tu veux ranger dans la case correspondant à l'intersection de la ligne à laquelle appartient val_col_A et la colonne à laquelle appartient val_row_B la valeur de result

c'est ça?

si oui donnes moi l'opération à effectuer car t'as pas besoin de faire tous tes copier coller....

0
Djawelle Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   > Djawelle Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
C'est exactement ça, sauf que je suis obligée de passer par des copier coller car j'ai 3 feuilles de sortie XLS derrière qui réunissent des données très lourdes... et pas mal de croisés dynamiques.
Le coup des copier coller est vraiment trop galère à mettre en Macro?
Merci,
0
balou311 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   87 > Djawelle Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
c'est à dir que tu récupère le contenu de ta cellue B22 dans d'autre feuille c'est ça?
si oui ya tjs pas besoin de copier coller
0
Djawelle Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
En fait ma grille se remplit avec des valeurs de la colonne val_col_A qui croise les val_row_B. Exemple: en colonne coût d'un produit, et en ligne nombre de produit. On peut donc croiser tout les prix, avec tout les nombres de produits. Et cette valeur de "croisement", est une formule Sommeprod() mais qui met en jeu les 2 données précédentes, d'où le copier/coller. Dommage, j'e n'ai pas moyen de te joindre l'onglet, ça aurait pu être plus simple.
Merci!
0
balou311 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   87
 
re,

c'est dommage j'avais gribouillé un bout de code mais je l'ai oublié ou boulot.
cela dit je reste persuadé qu'il n'y a pas besoin de copier coller.
lol
je t'envoie ma proposition dans une 15 aine de min faut que je la réécrive...

a tt
0
balou311 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   87
 
essaye ça.
ya pas de copier coller mais je pense aue sa répond à tes attentes...
oui je sais je suis têtu...

Sub macro()
i = 39
While i < 66
    val_col = Cells(i, "A")
    j = 2
    While j < 13
        val_row = Cells(38, j)
                
        Cells(13, "B") = val_col
        Cells(10, "B") = val_row
        result = Cells(22, "B")
        
        Cells(i, j) = result
        
        j = j + 1
    Wend
    i = i + 1
Wend

End Sub
0
Djawelle Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Un immense merci! Surtout à ton côté têtu! Car en effet les copier/coller étaient inutiles et le script que tu m'a fourni fonctionne très bien, et bien plus esthétique que ce que je voulais faire!
A présent je vais étudier ton script, je ferai ainsi des progrès en VBA!
Merci et bonne journée!
0
balou311 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   87
 
en fait fait plutôt comme ça:
Sub macro()
i = 39
While i < 66
    val_col = Cells(i, "A")
    j = 2
    While j < 13
        val_row = Cells(38, j)
                
        'ici tu pourrais faire directement l'opération dans la macro
        'et mettre le résultat dans le "tableau" et tout autre cellule
        'ca t'éviterai que ta formule puisse être modifié et tu 
        'pourrais faire tes cumules en même temps enfin après
        'c'est toi qui vois
       
        Range("B13") = val_col
        Range("B10") = val_row
        result = Range("B22")
        
        Cells(i, j) = result   
        j = j + 1
    Wend
    i = i + 1
Wend

End Sub


je l'ai tester je te le certifie en état de marche.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
marie
 
bonjour
Function AA(Vl As Variant, sigma As Double, mu As Double, datevalo As Date, datecheance As Date) As Variant
Dim pas As Single
Dim delta As Variant
Dim normu As Variant
Dim norsigma As Variant
Dim normsimule As Variant
Dim j As Integer
pas = 7 / 365
delta = (datecheance - datevalo) / 7
normu = (mu - 0.5 * sigma ^ 2) * pas
norsigma = sigma * Sqr(pas)
For j = 1 To delta
Randomize
normsimule = Application.NormSInv(Rand)
Vl = Vl * Exp(normu + normsimule * norsigma)
Next j
AA = Vl
End Function
quelqu'un peut m'aider pour savoir pk ça marche pas??
0