bonjour le forum
j'ai un message "erreur d'execution'6' depassement de capacité" dans mon code vba
que je joints
c'est la ligne "DeltaV = Application.WorksheetFunction.Max(rg)" qui est surligné en jaune,comme je ne connais pas grand chose au code vba ou se trouve l'erreur.
Sub jad()
Dim wsData As Worksheet, wsR1 As Worksheet, wsR2 As Worksheet, wsR3 As Worksheet, wsR4 As Worksheet, wsR5 As Worksheet, wsR6 As Worksheet, rg As Range
Dim larg As Integer, Série1 As Variant, Série2 As Variant
Dim i%, j%, k%, nLg%, jmax%, DeltaV%, Départ%, rCol%
Dim rmax%, rLig() As Integer
'----------- Lignes à modifier selon convenance --------------
Départ = 2 'N° de la première ligne des résultats
Set wsData = Worksheets("keno") ' feuille contenant les données
Set wsR1 = Worksheets("k1")
Set wsR2 = Worksheets("k2") ' feuille contenant les réultats
Set wsR3 = Worksheets("k3")
Set wsR4 = Worksheets("k4")
Set wsR5 = Worksheets("k5")
Set wsR6 = Worksheets("k6") ' feuille contenant les réultats
wsData.Range("C1") = "Données" ' impose un titre à la base de données
'------------------------------------------------------------
i = 2 'N° de la première ligne des données
Application.ScreenUpdating = False
With wsData
Set rg = .Range("C2").CurrentRegion
Set rg = rg.Offset(1, 0).Resize(rg.Rows.Count - 1, rg.Columns.Count)
larg = rg.Columns.Count 'nbre de données sur une ligne
DeltaV = Application.WorksheetFunction.Max(rg)
ReDim rLig(DeltaV)
' inscription du N° des blocs de résultats
For j = 1 To DeltaV: rLig(j) = Départ - 1
If j < Int(255 / (larg + 1) + 1) Then
wsR1.Cells(rLig(j), (larg + 1) * (j - 1) + 1) = j: jmax = j
Else
k = k + 1: wsR2.Cells(rLig(j), (larg + 1) * (k - 1) + 1) = j
End If
Next j
Série1 = .Range(.Cells(i, 1), .Cells(i, larg)).Value
rmax = (jmax - 1) * (larg + 1) + 1
'For j = 1 To DeltaV: rLig(j) = Départ - 1: wsR.Cells(rLig(j), (larg + 1) * (j - 1) + 1) = j: Next j
'Série1 = .Range(.Cells(i, 1), .Cells(i, larg)).Value
' répartition des données dans les blocs
While i <= rg.Rows.Count
i = i + 1
Série2 = .Range(.Cells(i, 1), .Cells(i, larg)).Value
For j = LBound(Série1, 2) To UBound(Série1, 2)
rLig(Série1(1, j)) = rLig(Série1(1, j)) + 1
nLg = rLig(Série1(1, j))
rCol = (Série1(1, j) - 1) * (larg + 1) + 1
If rCol <= 0 Then MsgBox "Pas de valeur nulle dans les données. Veuillez corrigez.": Exit Sub
If rCol <= rmax Then
wsR1.Range(wsR1.Cells(nLg, rCol), wsR1.Cells(nLg, rCol + larg - 1)) = Série2
Else
k = rCol - rmax - larg: wsR2.Range(wsR2.Cells(nLg, k), wsR2.Cells(nLg, k + larg - 1)) = Série2
End If
Next j
Série1 = Série2
Wend
End With
Application.ScreenUpdating = True
End Sub
merci
j'ai un message "erreur d'execution'6' depassement de capacité" dans mon code vba
que je joints
c'est la ligne "DeltaV = Application.WorksheetFunction.Max(rg)" qui est surligné en jaune,comme je ne connais pas grand chose au code vba ou se trouve l'erreur.
Sub jad()
Dim wsData As Worksheet, wsR1 As Worksheet, wsR2 As Worksheet, wsR3 As Worksheet, wsR4 As Worksheet, wsR5 As Worksheet, wsR6 As Worksheet, rg As Range
Dim larg As Integer, Série1 As Variant, Série2 As Variant
Dim i%, j%, k%, nLg%, jmax%, DeltaV%, Départ%, rCol%
Dim rmax%, rLig() As Integer
'----------- Lignes à modifier selon convenance --------------
Départ = 2 'N° de la première ligne des résultats
Set wsData = Worksheets("keno") ' feuille contenant les données
Set wsR1 = Worksheets("k1")
Set wsR2 = Worksheets("k2") ' feuille contenant les réultats
Set wsR3 = Worksheets("k3")
Set wsR4 = Worksheets("k4")
Set wsR5 = Worksheets("k5")
Set wsR6 = Worksheets("k6") ' feuille contenant les réultats
wsData.Range("C1") = "Données" ' impose un titre à la base de données
'------------------------------------------------------------
i = 2 'N° de la première ligne des données
Application.ScreenUpdating = False
With wsData
Set rg = .Range("C2").CurrentRegion
Set rg = rg.Offset(1, 0).Resize(rg.Rows.Count - 1, rg.Columns.Count)
larg = rg.Columns.Count 'nbre de données sur une ligne
DeltaV = Application.WorksheetFunction.Max(rg)
ReDim rLig(DeltaV)
' inscription du N° des blocs de résultats
For j = 1 To DeltaV: rLig(j) = Départ - 1
If j < Int(255 / (larg + 1) + 1) Then
wsR1.Cells(rLig(j), (larg + 1) * (j - 1) + 1) = j: jmax = j
Else
k = k + 1: wsR2.Cells(rLig(j), (larg + 1) * (k - 1) + 1) = j
End If
Next j
Série1 = .Range(.Cells(i, 1), .Cells(i, larg)).Value
rmax = (jmax - 1) * (larg + 1) + 1
'For j = 1 To DeltaV: rLig(j) = Départ - 1: wsR.Cells(rLig(j), (larg + 1) * (j - 1) + 1) = j: Next j
'Série1 = .Range(.Cells(i, 1), .Cells(i, larg)).Value
' répartition des données dans les blocs
While i <= rg.Rows.Count
i = i + 1
Série2 = .Range(.Cells(i, 1), .Cells(i, larg)).Value
For j = LBound(Série1, 2) To UBound(Série1, 2)
rLig(Série1(1, j)) = rLig(Série1(1, j)) + 1
nLg = rLig(Série1(1, j))
rCol = (Série1(1, j) - 1) * (larg + 1) + 1
If rCol <= 0 Then MsgBox "Pas de valeur nulle dans les données. Veuillez corrigez.": Exit Sub
If rCol <= rmax Then
wsR1.Range(wsR1.Cells(nLg, rCol), wsR1.Cells(nLg, rCol + larg - 1)) = Série2
Else
k = rCol - rmax - larg: wsR2.Range(wsR2.Cells(nLg, k), wsR2.Cells(nLg, k + larg - 1)) = Série2
End If
Next j
Série1 = Série2
Wend
End With
Application.ScreenUpdating = True
End Sub
merci