Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1610 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Créer une Macro Boucle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Créer une Macro Boucle

n°1427039
djawelle
Posté le 18-08-2006 à 10:35:14  profilanswer
 

Bonjour!  
Je suis complétement perdu sous VBA et j'aurai besoin d'un petit coup de pouce!  
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.  
Le principe de ma grille est:  
Colonne (Col_A) a une suite de prix  
Ligne (Row_B) a une suite de quantité  
Le placement de ces 2 valeurs dans 2 autres cellule déclenchent des mise à jour dans d'autres calcules et j'obtiens un résultat final, que je souhaite coller dans la grille de départ, à l'intersection de Val_A et de Row_B que j'avais sélectionné.  
Un grand merci!  
   
 
 
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

mood
Publicité
Posté le 18-08-2006 à 10:35:14  profilanswer
 

n°1427054
karoli
Posté le 18-08-2006 à 10:55:34  profilanswer
 

Salut,
 
pour resumer/clarifier :
 
tour de boucle 1 :
tu selectionnes A39, tu colles en B13
tu selectionnes B38, tu colles en B10
tu obtiens un resultat en B22 que tu colles en B39
 
tour de boucle 2 :
tu selectionnes A40, tu colles en B13
tu selectionnes C38, tu colles en B10
tu obtiens un resultat en B22 que tu colles en C39, ou en B40 ?? à précisier
 
tour de boucle 3 :
tu selectionnes A41, tu colles en B13
tu selectionnes D38, tu colles en B10
tu obtiens un resultat en B22 que tu colles en C40, ou en B41 ?? à précisier
 
En gros, ta grille de destination finale B39:L65, dans quelle ordre tu la remplis ?
 
edit : autre chose, quand on arrive en L38 (soit apres 11 tours de boucle), qu'est-ce qu'on fait des cellules A51 à A65 ?


Message édité par karoli le 18-08-2006 à 10:58:52
n°1427063
galopin01
Posté le 18-08-2006 à 11:05:10  profilanswer
 

Bonjour,  

Citation :

tu obtiens un resultat en B22 que tu colles en C39, ou en B40 ?? à précisier


 
Bonne question !
 
A+


Message édité par galopin01 le 18-08-2006 à 11:10:43
n°1427066
djawelle
Posté le 18-08-2006 à 11:10:14  profilanswer
 

Salut!
La grille de destination finale est en effet B39:L65. Le remplissage de la grille n'a aucune importance, ligne par ligne ou colonne par colonne.
Partons sur colonne par colonne:
Boucle 1: A39/B38 et résultat en B39
Boucle 2: A40/B38 et résultat en B40
Boucle 3: A41/B38 et résultat en B41
(.....)
Boucle x: A65/B38 et résultat en B65
Ensuite on attaque la même chose (A39/A40...A65) avec C38. on colle les résultats en C39/C40...C65
Pour répondre à tes questions: Boucle 2 tu colles en C40
Boucle 3 tu colles D41
Quand on arrive en L38 (on a croisé la A39 avec toutes les cellules de B38 à L38) la 1er ligne est donc remplie. On passe alors en A40 et on recommence..
En espérant être plus clair.... C'est pas facile!
Merci! ;)

n°1427073
karoli
Posté le 18-08-2006 à 11:19:23  profilanswer
 

esssaie ca...
 

Code :
  1. for i = 2 to 12
  2.         cells(i,38).copy
  3.         Range("B10" ).Select
  4.         Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False, Transpose:=False
  5.         Application.CutCopyMode = False
  6.         for j = 39 to 65
  7.              cells(1,j).copy
  8.              Range("B13" ).Select
  9.              Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False, Transpose:=False
  10.              Application.CutCopyMode = False
  11.            
  12.              Range("B22" ).copy
  13.              cells(i,j).Select
  14.              Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False, Transpose:=False
  15.              Application.CutCopyMode = False
  16.         next
  17. next

n°1427084
galopin01
Posté le 18-08-2006 à 11:32:44  profilanswer
 

Bonjour,
Ces dernières explications ne m'inspirent pas plus.
Si je me contente de résumer ton enregistrement je trouve :
 
Sub test()
Dim i%, j%, k%
For i = 39 To 65
  Cells(i, 1).Copy: Range("B13" ).PasteSpecial Paste:=xlPasteValues
  For j = 2 To 12
    Cells(38, j).Copy: Range("B10" ).PasteSpecial Paste:=xlPasteValues
      For k = 39 To 65
        Range("B22" ).Copy: Cells(k, 2).PasteSpecial Paste:=xlPasteValues
      Next
  Next
Next
End Sub
 
A+

n°1427091
djawelle
Posté le 18-08-2006 à 11:42:42  profilanswer
 

J'ai modifié ton script car j'ai effacé certaines lignes dans mon tableau.
Mais le script ne fonctionne pas...
J'obtiens bien une grille remplie mais à l'emplacement:
Et le résultat est fixe, c'est celui du croisement de 2 cellule vide: comme si B8=0 et B11=0
De plus la grille se définit en AI 2: BI 12, je ne sais pas pourquoi....
Voici ton script modifié avec les bonnes cellules:
  For i = 2 To 12
          Cells(i, 34).Copy
          Range("B8" ).Select
          Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
          Application.CutCopyMode = False
         For j = 35 To 61
               Cells(1, j).Copy
               Range("B11" ).Select
               Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
             Application.CutCopyMode = False
 
              Range("B18" ).Copy
              Cells(i, j).Select
              Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
              Application.CutCopyMode = False
         Next
 Next
 
 
End Sub

n°1427106
djawelle
Posté le 18-08-2006 à 12:05:35  profilanswer
 

Je m'en suis sortie en utilsant ce script qui évite copie/colle, merci pr votre aide précieuse!
i = 35
While i < 62
    val_col = Cells(i, "A" )
    j = 2
    While j < 13
        val_row = Cells(34, j)
                 
        Cells(11, "B" ) = val_col
        Cells(8, "B" ) = val_row
        result = Cells(18, "B" )
         
        Cells(i, j) = result
         
        j = j + 1
    Wend
    i = i + 1
Wend
 
End Sub

n°1427109
karoli
Posté le 18-08-2006 à 12:07:52  profilanswer
 

j'ai pas compris grand chose à tes explications... :/
 
et pourtant :

Code :
  1. For i = 2 To 12 #on boucle de la colonne B à L (= on recup les valeurs de B34, C34...L34)
  2.           Cells(i, 34).Copy : Range("B8" ).PasteSpecial Paste:=xlPasteValues
  3.           Application.CutCopyMode = False
  4.          
  5.           For j = 35 To 61 #pour chaque colonne, on boucle de la ligne 35 à 61 (= on recup les valeurs de A35, A36...A61)
  6.               Cells(1, j).Copy : Range("B11" ).PasteSpecial Paste:=xlPasteValues
  7.               Application.CutCopyMode = False
  8.               Range("B18" ).Copy : Cells(i, j).PasteSpecial Paste:=xlPasteValues
  9.               Application.CutCopyMode = False
  10.           Next
  11. Next


 
tu es sure que ton calcul dans la cellule B18 se fait en auto ??
 
edit : bon, grillé :/
l'important c'est que ca marche
 
A+


Message édité par karoli le 18-08-2006 à 12:08:46

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Créer une Macro Boucle

 

Sujets relatifs
plusieurs condition dans une boucle while[Résolu]Signe non reconnu dans une boucle
Créer un programme s'éxécutant sans OS ?combien ca coute de faire creer son site web marchand?
Besoin aide pour créer un pop-up ou une image en 1er planMacro vba apres un tri sous excel
Creer une chaine de connexion en c#comment créer une page a partir d'un lien ?
[Macro Word] Ouvrir Un fichier csv sous Excel par une macro Wordprobleme de boucle
Plus de sujets relatifs à : Créer une Macro Boucle


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR