Macro qui fonctionne pas

Youri

XLDnaute Occasionnel
Bonjour à tous,

Comment faire pour que la macro suivante fonctionne ? :
Code:
Option Explicit
Option Base 1
Sub test()
Dim variablenonvide(4, 4) As Variant
Dim saut_vertical As Integer
Dim saut_horizontal As Byte
Dim variablecompte As Variant
Dim cel As Variant
For saut_vertical = 58 To 103 Step 15
    For saut_horizontal = 3 To 6 Step 1
        If Cells(saut_vertical, saut_horizontal).Value <> 0 And Cells(saut_vertical, saut_horizontal).Value <> "" Then
        variablenonvide(((saut_vertical - 43) / 15), (saut_horizontal - 3)) = Cells(saut_vertical, saut_horizontal).Address
        Else
        variablenonvide(((saut_vertical - 43) / 15), (saut_horizontal - 3)) = 0
        End If
    Next
Next
For Each variablecompte In variablenonvide(4, 4)
    If variablecompte <> 0 Then variablecompte = variablecompte + 1
Next
MsgBox variablecompte
End Sub
Ca me fait l'erreur : l'indice n'appartient pas à la sélection ... je ne comprends pas.

Merci à l'avance pour votre aide,
Youri
 
Dernière édition:

wilfried_42

XLDnaute Barbatruc
Re : Macro qui fonctionne pas

bonjour youri

je ne sais pas si ca vient de là :

Option Explicit
Option Base 1
Sub test()
Dim variablenonvide(4, 4) As Variant
Dim saut_vertical As Integer
Dim saut_horizontal As Byte
Dim variablecompte As Variant
Dim cel As Variant
For saut_vertical = 58 To 103 Step 15
For saut_horizontal = 3 To 6 Step 1
If Cells(saut_vertical, saut_horizontal).Value <> 0 And Cells(saut_vertical, saut_horizontal).Value <> "" Then
variablenonvide(((saut_vertical - 43) / 15), (saut_horizontal - 3)) = Cells(saut_vertical, saut_horizontal).Address
Else
variablenonvide(((saut_vertical - 43) / 15), (saut_horizontal - 3)) = 0
End If
Next
Next
For Each variablecompte In variablenonvide(4, 4)
If variablecompte <> 0 Then variablecompte = variablecompte + 1
Next
MsgBox variablecompte
End Sub

mais le resultat pour la premiere occurence est de 3-3 soit 0
essaye en mettant 2 à la place de 3

j'ai vu autre chose : tu mets dans variablenonvide, l'adresse de la cellule est non pas la celllule
essaye de remplacer (Sans assurance)
variablenonvide(((saut_vertical - 43) / 15), (saut_horizontal - 3)) = Cells(saut_vertical, saut_horizontal).Address
par :
set variablenonvide(((saut_vertical - 43) / 15), (saut_horizontal - 3)) = Cells(saut_vertical, saut_horizontal)
 

Youri

XLDnaute Occasionnel
Re : Macro qui fonctionne pas

Bonjour Wilfried,

Tu avais effectivement raison pour les chiffres. J'avais pourtant marqué sur ma feuille 2 et pas 3 (faut que j'apprenne à lire) ... Bref, maintenant que ce problème est réglé, j'en ai un nouveau ! Désormais, j'ai une incompatibilité de type dans cette partie du code :
Code:
For Each variablecompte In variablenonvide(4, 4)
    If variablecompte <> 0 Then variablecompte = variablecompte + 1
Next
MsgBox variablecompte
End Sub

Je vous remercie à l'avance,
Youri
 

wilfried_42

XLDnaute Barbatruc
Re : Macro qui fonctionne pas

re:

tu as essayé la 2eme partie ? cela correspondrait

Je suppose que dans ton code tu desires affecter une cellule à ton tableau or tu y affectes seulement une addresse
essaye ce que je t'ai mis si ca ne marche pas, j'ai une autre idée lol
 

Youri

XLDnaute Occasionnel
Re : Macro qui fonctionne pas

re

Merci Wilfried pour ton aide, mais je m'en suis tiré en réalisant le code suivant :
Code:
Option Explicit
Option Base 1
Private Sub Worksheet_Change(ByVal Target As Range)
Dim variablenonvide(4, 4) As Variant
Dim saut_vertical As Integer
Dim saut_horizontal As Byte
Dim variablecompte As Byte
Dim cel As Variant
Dim i As Byte
Dim j As Byte
For saut_vertical = 58 To 103 Step 15
    For saut_horizontal = 3 To 6 Step 1
        If Cells(saut_vertical, saut_horizontal).Value = "Oui" Then
        variablenonvide(((saut_vertical - 43) / 15), (saut_horizontal - 2)) = Cells(saut_vertical, saut_horizontal).Address
        Else
        variablenonvide(((saut_vertical - 43) / 15), (saut_horizontal - 2)) = 0
        End If
    Next
Next
For i = 1 To 4
    For j = 1 To 4
        If variablenonvide(i, j) <> 0 Then variablecompte = variablecompte + 1
    Next
Next
If variablecompte > 12 Then
    If Rows("105:147").EntireRow.Hidden = True Then
    Rows("105:147").EntireRow.Hidden = False
    End If
End If
If variablecompte > 8 And variablecompte < 13 Then
    If Rows("105:137").EntireRow.Hidden = True Then
    Rows("105:137").EntireRow.Hidden = False
    End If
End If
If variablecompte > 4 And variablecompte < 9 Then
    If Rows("105:127").EntireRow.Hidden = True Then
    Rows("105:127").EntireRow.Hidden = False
    End If
End If
If variablecompte > 0 And variablecompte < 5 Then
    If Rows("105:117").EntireRow.Hidden = True Then
    Rows("105:117").EntireRow.Hidden = False
    End If
End If
If variablecompte = 0 Then
    If Rows("105:147").EntireRow.Hidden = False Then
    Rows("105:147").EntireRow.Hidden = True
    End If
End If
End Sub

y'en a qui aime se faire des noeuds avec les boyeaux de la tête
;)

Merci à tous,
Youri
 

Discussions similaires

Réponses
2
Affichages
273

Statistiques des forums

Discussions
312 345
Messages
2 087 464
Membres
103 548
dernier inscrit
civpol