Suspendre l'execution de la macro+problème de stockage.

Signaler
Messages postés
46
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
18 décembre 2007
-
Messages postés
46
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
18 décembre 2007
-
Bonjour, je réalise des tests sur un échantillon important, suite au lancement de ma macro je depasserai certainement les 256 colonnes et les 65636 lignes.
J'aurai aimé savoir comment je peux augmenter le nombre de colonne et ensuite comment je peux stpper l'execution du programme lorsque l'affichage arrive a 65636 pour pouvoir réaliser mes tests puis la relancer d'ou je me suis arreter pour afficher les nouveau resultats et realiser les nouveaux tests et ainsi de suite.
Merci d'avance et bonne journée.

<!-- / message -->

5 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Augmenter le nombre de lignes ou les colonnes tu ne peux pas avec Excel 2003 ou inférieur. Par pour Excel 2007 ces limites ont été repoussées. Je ne connais pas les nouvelles limites mais c'est bien au delà.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
salut,
(salut Casy)

bah la dernière fois j'ai donné le nombre approximatif de lignes, là j'ai moins la flemme donc j'ai ouvert XL 2007 :
Nb de lignes : 1 048 576
Nb de Colonnes : 16 384

Avec les versions inférieures, pas d'autres choix que de travailler sur plusieurs onglets !

@++

(
Messages postés
46
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
18 décembre 2007

Niveau colonnes avec excel 2007 çà ira largement mais niveau ligne moins sur.lol.Car je réalise sur des combinaisons donc n!/(p!*(n-p)!) çà monte vite.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Excel n'est pas une base de données à l'origine mais un tableur.
Utilise Access pour ce genre de besoin

@++

(
Messages postés
46
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
18 décembre 2007

Il serait peut être possible d'ajouter une feuille à chaque fois que la macro arrive à la dernière ligne, amis en même temps je suis un peu perdu dans les commandes car je suis débutant en VBA.
Voici ma macro

'1. En A1, écrire c ou p ; (Combinaison ou Permutation)
  '2. En A2, écrire la valeur de p ;(p tirés parmi N)
  '3. Sous A2, écrire la liste des N éléments ;
  '4. Sélectionner A1 et activer la procédure.


'Exemple:
'A1 c
'A2 3
'A3 1
'A4 2
'A5 Excel
'A6 4
'A7 *
'A8 6
'
'La procédure donne alors la liste de toutes les combinaisons
'possibles de 3 éléments choisis parmi 6.




Option Explicit


Dim vAllItems As Variant
Dim Buffer() As String
Dim BufferPtr As Long
Dim Results As Worksheet


                         
                             




Sub ListPermutations()
Worksheets("combinaisons").Select
Range("A1").Select
  Dim Rng As Range
  Dim PopSize As Integer
  Dim SetSize As Integer
  Dim Which As String
  Dim N As Double
  Dim message As Integer
  Dim nom As String
  Dim sh As Worksheet, trouvé As Boolean
  trouvé = False
 
  message = InputBox("nombre d'éléments p?", "Combinaison des élements p parmi N", 3)
  Range("A2") = message
  Const BufferSize As Long = 65535


  Set Rng = Selection.Columns(1).Cells
  If Rng.Cells.Count = 1 Then
    Set Rng = Range(Rng, Rng.End(xlDown))
  End If


  PopSize = Rng.Cells.Count - 2
  If PopSize < 2 Then GoTo DataError


  SetSize = Rng.Cells(2).Value
  If SetSize > PopSize Then GoTo DataError


  Which = UCase$(Rng.Cells(1).Value)
  Select Case Which
  Case "C"
    N = Application.WorksheetFunction.Combin(PopSize, SetSize)
  Case "P"
    N = Application.WorksheetFunction.Permut(PopSize, SetSize)
  Case Else
    GoTo DataError
  End Select
  If N > Cells.Count Then GoTo DataError


  Application.ScreenUpdating = False




 
  nom = "résultats"
  Set Results = Worksheets.Add
  On Error Resume Next
  Application.DisplayAlerts = False
  Sheets("résultats").Delete
  Application.DisplayAlerts = True
  Results.Name = nom


  vAllItems = Rng.Offset(2, 0).Resize(PopSize).Value
  ReDim Buffer(1 To BufferSize) As String
  BufferPtr = 0


  If Which = "C" Then
    AddCombination PopSize, SetSize
  Else
    AddPermutation PopSize, SetSize
  End If
  vAllItems = 0


  Application.ScreenUpdating = True
  Exit Sub


DataError:
  If N = 0 Then
    Which = "Enter your data in a vertical range of at least 4 cells. " _
      & String$(2, 10) _
      & "Top cell must contain the letter C or P, 2nd cell is the number" _
      & "of items in a subset, the cells below are the values from which" _
      & "the subset is to be chosen."
  Else
    Which = "This requires " & Format$(N, "#,##0") & _
      " cells, more than are available on the worksheet!"
  End If
  MsgBox Which, vbOKOnly, "DATA ERROR"
  Exit Sub
End Sub


Private Sub AddPermutation(Optional PopSize As Integer = 0, _
  Optional SetSize As Integer = 0, _
  Optional NextMember As Integer = 0)


  Static iPopSize As Integer
  Static iSetSize As Integer
  Static SetMembers() As Integer
  Static Used() As Integer
  Dim i As Integer


  If PopSize <> 0 Then
    iPopSize = PopSize
    iSetSize = SetSize
    ReDim SetMembers(1 To iSetSize) As Integer
    ReDim Used(1 To iPopSize) As Integer
    NextMember = 1
  End If


  For i = 1 To iPopSize
    If Used(i) = 0 Then
      SetMembers(NextMember) = i
      If NextMember <> iSetSize Then
        Used(i) = True
        AddPermutation , , NextMember + 1
        Used(i) = False
      Else
        SavePermutation SetMembers()
      End If
    End If
  Next i


  If NextMember = 1 Then
    SavePermutation SetMembers(), True
    Erase SetMembers
    Erase Used
  End If


End Sub  'AddPermutation


Private Sub AddCombination(Optional PopSize As Integer = 0, _
  Optional SetSize As Integer = 0, _
  Optional NextMember As Integer = 0, _
  Optional NextItem As Integer = 0)


  Static iPopSize As Integer
  Static iSetSize As Integer
  Static SetMembers() As Integer
  Dim i As Integer


  If PopSize <> 0 Then
    iPopSize = PopSize
    iSetSize = SetSize
    ReDim SetMembers(1 To iSetSize) As Integer
    NextMember = 1
    NextItem = 1
  End If


  For i = NextItem To iPopSize
    SetMembers(NextMember) = i
    If NextMember <> iSetSize Then
      AddCombination , , NextMember + 1, i + 1
    Else
      SavePermutation SetMembers()
    End If
  Next i


  If NextMember = 1 Then
    SavePermutation SetMembers(), True
    Erase SetMembers
  End If


End Sub  'AddCombination


Private Sub SavePermutation(ItemsChosen() As Integer, _
  Optional FlushBuffer As Boolean = False)


  Dim i As Integer, sValue As String
  Dim j As Integer, w As Long, k As Long
  Dim message As Integer
  Dim ChaineASeparer


 
  Static RowNum As Long, ColNum As Long


  If RowNum 0 Then RowNum 1  If ColNum 0 Then ColNum 1


  If FlushBuffer True Or BufferPtr UBound(Buffer()) Then
    If BufferPtr > 0 Then
      If (RowNum + BufferPtr - 1) > Rows.Count Then
        RowNum = 1
        ColNum = ColNum + 1
        If ColNum > 256 Then Exit Sub
      End If


    '
    For k = 1 To BufferPtr
      ChaineASeparer = Split(Buffer(k), ",")
        If (RowNum + BufferPtr - 1) > Rows.Count Then
          RowNum = 1
          ColNum = Range("A1").End(xlToRight).Column + 1
        End If
        For w = 0 To UBound(ChaineASeparer)
          Results.Cells(RowNum + k - 1, ColNum + w).Value _
            = ChaineASeparer(w)
      Next
    Next
      'Results.Cells(RowNum, ColNum).Resize(BufferPtr, 1).Value _
        = Application.WorksheetFunction.Transpose(Buffer())
      'RowNum = RowNum + BufferPtr
    End If


    BufferPtr = 0
    If FlushBuffer = True Then
      Erase Buffer
      RowNum = 0
      ColNum = 0
      Exit Sub
    Else
      ReDim Buffer(1 To UBound(Buffer))
    End If


  End If
  'construct the next set
  For i = 1 To UBound(ItemsChosen)
  j = 1
  sValue = sValue & ", " & vAllItems(ItemsChosen(i), 1)
  'and save it in the buffer
  Next i
  BufferPtr = BufferPtr + 1
  Buffer(BufferPtr) = Mid$(sValue, 3)
  End Sub

Merci beaucoup