Remplacer worksheet

Fermé
jad73 Messages postés 29 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 4 février 2020 - 24 mars 2014 à 16:25
Coco_Tehier Messages postés 7 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 26 mars 2014 - 24 mars 2014 à 23:05
Bonjour le forum
j'ai une macro excel que j'essaie de faire fonctionner sous access, j'ai une erreur de compilation et c'est la phrase "w As worksheet" qui est bleuie. par quoi la remplace t-on pour access.
voici le code, merci

Sub Main()
Dim Ta&(), Tc&(), Tb&(), w As Worksheet, NbA&, NbB&, NbC#, i&, j&, k&, h&, Lg&, Co&, M As Byte, R As Byte
Set w = Worksheets("Combi")
w.Range(w.Cells(3, 1), w.Cells(Rows.Count, 22)).ClearContents
NbA = w.Cells(1, Columns.Count).End(xlToLeft).Column - 1
On Error Resume Next
NbB = w.Cells(2, 2)
On Error GoTo 0
If NbB = 0 Then MsgBox "Inscrire le nombre de n° par combinaisons en B2": Exit Sub
If NbB > 10 Then MsgBox "Nombre de n° par combinaisons en B2 <= 10": Exit Sub
If NbB > NbA Then MsgBox "Pas assez de n° trouvés en ligne A": Exit Sub
On Error Resume Next
NbC = CmbNb(NbA, NbB)
On Error GoTo 0
If NbC = 0 Or NbC > Rows.Count Then MsgBox "Trops de combinaisons": Exit Sub
ReDim Ta(1 To NbA)
For i = 1 To NbA
On Error Resume Next
Ta(i) = w.Cells(1, i + 1)
On Error GoTo 0
If Ta(i) = 0 Then MsgBox "Anomalie en cellule ligne 1, colonne " & (i + 1): Exit Sub
For j = 1 To i - 1
If Not Ta(i) > Ta(j) Then MsgBox "Anomalie : doublon ou mauvais rangement en ligne 1": Exit Sub
Next j, i
Tc = CmbTab(NbA, NbB)
For i = 1 To NbC
For j = 1 To NbB
Tc(i, j) = Ta(Tc(i, j))
Next j
Next i
Erase Ta
w.Range(w.Cells(3, 2), w.Cells(2 + NbC, 1 + NbB)) = Tc
Lg = w.Cells(Rows.Count, 23).End(xlUp).Row - 2
Co = w.Cells(3, Columns.Count).End(xlToLeft).Column - 22
ReDim Ta(1 To Lg, 1 To Co)
For i = 1 To Lg
For j = 1 To Co
Ta(i, j) = w.Cells(i + 2, j + 22)
For k = 1 To j - 1
If Not Ta(i, j) > Ta(i, k) Then MsgBox "Anomalie : doublon ou mauvais rangement en ligne " & (i + 2): Exit Sub
Next k
Next j, i
ReDim Tb(1 To NbC, NbB)
For i = 1 To NbC
For j = 1 To Lg
M = 0
R = 1
For k = 1 To NbB
For h = R To Co
If Tc(i, k) = Ta(j, h) Then M = M + 1: R = h + 1: Exit For
Next h
Next k
Tb(i, M) = Tb(i, M) + 1
Next j
Next i
Erase Tc
w.Range(w.Cells(3, 12), w.Cells(2 + NbC, 11 + NbB + 1)) = Tb
End Sub

Sub RAZ()
Dim w As Worksheet
Set w = Worksheets("Combi")
w.Range(w.Cells(3, 1), w.Cells(Rows.Count, 22)).ClearContents
End Sub

'----------------------------------------------------------------------------------------------------------------
'Nombre de combinaisons de b éléments pris parmis a éléments*****************************************************
'Input : a, b****************************************************************************************************
'----------------------------------------------------------------------------------------------------------------
Function CmbNb(ByVal a&, ByVal b&) As Variant
Dim c&
On Error GoTo ErrTrp
If Not a < 0 And Not b < 0 And Not b > a Then
c = a - b
If c = 0 Then
CmbNb = 1
Else
If b < c Then c = b
CmbNb = FactLim(a, c) / FactLim(c)
End If
Else
CmbNb = CVErr(xlErrNum)
End If
Exit Function
ErrTrp:
On Error GoTo 0
CmbNb = CVErr(xlErrNum)
End Function
'----------------------------------------------------------------------------------------------------------------
'Factorielle de Lg***********************************************************************************************
'Option : limiter le nombre d'itérations*************************************************************************
'----------------------------------------------------------------------------------------------------------------
Function FactLim(ByVal Lg&, Optional NbIter) As Variant
Dim i&, n&
On Error GoTo ErrTrp
If Not Lg < 0 Then
If Not IsMissing(NbIter) Then n = CLng(NbIter) Else n = Lg
If n > Lg Or n < 0 Then
GoTo ErrTrp
Else
FactLim = 1
If Lg > 0 Then
For i = 0 To n - 1: FactLim = FactLim * (Lg - i): Next i
End If
End If
Else
FactLim = CVErr(xlErrNA)
End If
Exit Function
ErrTrp:
On Error GoTo 0
FactLim = CVErr(xlErrNum)
End Function
'----------------------------------------------------------------------------------------------------------------
'combinaisons b parmi a******************************************************************************************
'Input : longs***************************************************************************************************
'Output : tableau long*******************************************************************************************
'Rem : taille max varie selon systèmes, si erreur ubound(t)=0****************************************************
'----------------------------------------------------------------------------------------------------------------
Function CmbTab(ByVal a&, ByVal b&) As Long()
Dim n&, t&(), c&, i&, j&, v As Variant
If Not a < 1 And Not b < 1 And Not b > a Then
On Error GoTo ErrTrp
n = CLng(CmbNb(a, b))
ReDim t(1 To n, 1 To b)
c = a - b
For i = 1 To b
t(1, i) = i
Next i
For i = 2 To n
If b = 1 Then t(i, 1) = t(i - 1, 1) - (b = 1) Else t(i, 1) = t(i - 1, 1) + (t(i - 1, 2) = c + 2) * (b <> 1)
For j = 2 To b - 1
If t(i - 1, j + 1) = c + j + 1 Then
If t(i - 1, j) = c + j Then t(i, j) = t(i, j - 1) + 1 Else t(i, j) = t(i - 1, j) + 1
Else
t(i, j) = t(i - 1, j)
End If
Next j
If t(i - 1, b) = a Then t(i, b) = t(i, b - 1) + 1 Else t(i, b) = t(i - 1, b) + 1
Next i
CmbTab = t
Else
ErrTrp:
On Error GoTo 0
ReDim t(0)
CmbTab = t
End If
End Function


A voir également:

2 réponses

Bonsoir,
Telle qu'est posée la question, il n'y a pas de réponse parce qu'en la circonstance Excel et Access n'ont rien à voir l'un avec l'autre.
Excel est un tableur qui fait travailler les cellules d'un tableau comme son appellation l'indique.
Access compile des données groupées dans des enregistrements distincts les uns vis à vis des autres.
Le fait que les enregistrements de Access puissent apparaître sous forme de tableau n'est qu'une facilité technique; il n'en reste pas moins que les enregistrements (une ligne) sont tous indépendants.
Pour approfondir, à voir les tutoriels de Access, y compris sur CCM
Bonne suite.
0
Coco_Tehier Messages postés 7 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 26 mars 2014 1
24 mars 2014 à 23:05
Bonsoir,
Pour compléter, tu peux dans access faire des macros qui ressemble à celle d'excel par contre elle ne peuvent pas être 100% identiques : worksheets est un onglet ou feuille dans excel et cela n'existe pas dans access d'ou le message.
Je confirme les tutos sont tes amis...
0