Stockage dans un tableau - help!

Stockage dans un tableau - help! - VB/VBA/VBS - Programmation

Marsh Posté le 18-09-2007 à 19:26:49    

bonjour, après de vagues notions de lycée...  
 
      j'ai tenté de faire une macro qui a pour but de reprendre des lignes (composés de 4 cases à chaque fois: Ci à Fi) de la Feuil1. Ensuite, est généré un nouvel onglet pour chacune de ces lignes. Seulement le problème c'est que lorsque les feuilles se génèrent, il faudrait que ma macro ne fasse qu'un groupe à la fois. Je m'explique:
      La première partie (avec les if imbriqués) va compter combien de lignes ds mon gros tableau nous interesse (ici c'est le groupe "PP AV" qui sert d'exemple). En ressort un "n" avec ce nombre de lignes associé.
      La deuxième partie génère les fiches. Seulement, je souhaiterais que la macro se souvienne des lignes ou il y avait ce groupe "PP AV". C'est pourquoi j'avais pensé stoker les valeurs de i dans un tableau puis appeler les valeurs du tableau. Seulement je ne sais pas faire ca... (voir mes notations en vert)
 
Je pense que vous allez trouver ma macro un peu lourd a lire mais bon, je débute ( ou presque)! J'aurais peut etre pas du faire les deux parties ensemble..Seulement, je ne n'ai pas réussi à rappeller une procédure dans une autre.
 
Merci si vous pouvez me filer un petit coup de main  :hello:  
 
 
Sub Genere_fiches_PP_AV()
 
Dim n As Integer
Dim i As Integer
 
n = 0
 
For i = 1 To 5000
     
    If IsEmpty(Range("A" & i)) Then
        n = n
        Else
            If Range("M" & i) = "PP AV" Then
                n = n + 1 ' stoker les valeurs de i dans un tableau
                Else
                n = n
            End If
    End If
Next i
 
 
     
     
    If MsgBox("il y aura " & n & " fiches PP AV. Voulez vous les générer?", _
        vbQuestion + vbYesNo) = vbNo Then
        GoTo LastLine
    End If
     
 
 
For i = 2 To n + 1 'reprendre les valeurs de i
 
       
    Sheets("Feuil1" ).Select
    Range("C" & i, "D" & i).Select
    Selection.Copy
    Sheets("CREP" ).Select
    Range("A5 : B5" ).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
     
     
     
    Sheets("Feuil1" ).Select
    Range("E" & i, "F" & i).Select
    Selection.Copy
    Sheets("CREP" ).Select
    Range("C5 : D5" ).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
     
    Sheets("CREP" ).Select
    Application.CutCopyMode = False
    Sheets("CREP" ).Copy After:=Sheets(2)
    With ActiveCell.Characters(Start:=1, Length:=6).Font
        .Name = "Arial"
        .FontStyle = "Normal"
        .Size = 14
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
   Sheets("CREP (2)" ).Select
   Sheets("CREP (2)" ).Name = Range("A5" )
 
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
     
     
Next i
LastLine:
End Sub

Reply

Marsh Posté le 18-09-2007 à 19:26:49   

Reply

Marsh Posté le 19-09-2007 à 08:15:58    

Bonjour,
 
Juste à partir de ton code ...
ajoute au début
Dim MonTabRes(250) As Integer '250 à voir si ca suffit ...
 
'initialise ton tableau
For i=0 to 250
 MonTabRes(i)=0
next
 
'Initialise la variable de ton tableau
j=0
 
'La ou tu as mis en vert - stoker les valeurs de i dans un tableau  
MonTabRes(j)=i
j=j+1
 
'Pour reprendre les valeurs de ton tableau
avant la boucle
j=0
'a la place de ta boucle - For i = 2 To n + 1
Do while MonTabRes(j)>0
...
  j=j+1
Loop
Ca devrait fonctionner.

Reply

Marsh Posté le 19-09-2007 à 13:21:22    

Ok, ca marche nikel ! merci Paul ;)  
pour ce que ca interesse, j'ai rempacé aussi :
 
Range("C" & i, "D" & i).Select       par      Range("E" & MonTabRes(j), "F" & MonTabRes(j)).Select
 
et
 
Range("E" & i, "F" & i).Select       par      Range("E" & MonTabRes(j), "F" & MonTabRes(j)).Select  
 
 
juste pour la culture est il possible de selectionner C D E F d'un coup au lieu de le faire en deux fois comme je l'ai fait?  :??: Car Range("C" & MonTabRes(j), "D" & MonTabRes(j), "E" & MonTabRes(j), "F" & MonTabRes(j)).Select ca marche pas..

Reply

Marsh Posté le 19-09-2007 à 13:49:54    

Je pense que tu peux faire
Range ("C" & i & ":F" & i)

Reply

Marsh Posté le 20-09-2007 à 13:31:16    

oui parfait!
 
sinon tu connaiterais un tutorial sur les menus déroulants?
 
Est-ce possible qu'une macro se génère automatiquement a parti du choix que la personne a fait a partir du menu déroulant?
Car en fait la, je suis obligé de copier coller ma macro pour chaque groupe. Pour une utilisation ultérieur de ce programme et avec de nouveau groupes, ca pourrait etre pratique que toutes les macros se génèrent elles mêmes. J'ai tenté mais c'est pas évident..

Reply

Marsh Posté le 20-09-2007 à 15:20:40    

Reply

Marsh Posté le 23-09-2007 à 09:39:32    

Pour moi plutôt que de gérer un tableau statique, j'utiliserais un tableau dynamique.
 

Code :
  1. Dim TabRes() as Integer


 
Et au milieu de la boucle mettre qqch du style
 

Code :
  1. Redim Preserve TabRes(0 to j)
  2. TabRes(j)=i


 
Bon courage
 
Dream

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed