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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Stockage dans un tableau - help!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Stockage dans un tableau - help!

n°1612742
Bobslebret​on
Posté le 18-09-2007 à 19:26:49  profilanswer
 

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

mood
Publicité
Posté le 18-09-2007 à 19:26:49  profilanswer
 

n°1612818
Paul Hood
Posté le 19-09-2007 à 08:15:58  profilanswer
 

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.

n°1612970
Bobslebret​on
Posté le 19-09-2007 à 13:21:22  profilanswer
 

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..

n°1612984
Paul Hood
Posté le 19-09-2007 à 13:49:54  profilanswer
 

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

n°1613425
Bobslebret​on
Posté le 20-09-2007 à 13:31:16  profilanswer
 

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..

n°1613482
kiki29
Posté le 20-09-2007 à 15:20:40  profilanswer
 
n°1614179
dreameddea​th
Posté le 23-09-2007 à 09:39:32  profilanswer
 

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


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

  Stockage dans un tableau - help!

 

Sujets relatifs
Help!!!!!!! Probleme d'application en DelphiDébutant =) -> différence entre cadre et tableau
help!!Définir message d'abence du bureau [vba]
[regexp] Extraire les lignes d'un tableau d'une page htmldurée de vie d'un tableau
simplexml object dans un tableau: asXML n'existe plus :sTableau croisé et VBA
extraire une valeur d'un tableau en retour de fonctionProblème pour une mise en page sous forme de tableau
Plus de sujets relatifs à : Stockage dans un tableau - help!


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