Boucle de Calcul sous VBA

Djawelle Messages postés 6 Statut Membre -  
 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

5 réponses

  1. balou311 Messages postés 766 Statut Membre 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
    1. Djawelle Messages postés 6 Statut Membre
       
      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
      1. balou311 Messages postés 766 Statut Membre 87 > Djawelle Messages postés 6 Statut Membre
         
        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
      2. Djawelle Messages postés 6 Statut Membre > Djawelle Messages postés 6 Statut Membre
         
        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
      3. balou311 Messages postés 766 Statut Membre 87 > Djawelle Messages postés 6 Statut Membre
         
        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
  2. Djawelle Messages postés 6 Statut Membre
     
    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
  3. balou311 Messages postés 766 Statut Membre 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
    1. balou311 Messages postés 766 Statut Membre 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
    2. Djawelle Messages postés 6 Statut Membre
       
      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
  4. balou311 Messages postés 766 Statut Membre 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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