Créer une Macro Boucle - VB/VBA/VBS - Programmation
Marsh Posté le 18-08-2006 à 10:55:34
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 ?
Marsh Posté le 18-08-2006 à 11:05:10
Bonjour,
Citation : tu obtiens un resultat en B22 que tu colles en C39, ou en B40 ?? à précisier |
Bonne question !
A+
Marsh Posté le 18-08-2006 à 11:10:14
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!
Marsh Posté le 18-08-2006 à 11:19:23
esssaie ca...
Code :
|
Marsh Posté le 18-08-2006 à 11:32:44
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+
Marsh Posté le 18-08-2006 à 11:42:42
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
Marsh Posté le 18-08-2006 à 12:05:35
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
Marsh Posté le 18-08-2006 à 12:07:52
j'ai pas compris grand chose à tes explications...
et pourtant :
Code :
|
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+
Marsh Posté le 18-08-2006 à 10:35:14
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