Problème avec des matrices dynamiques

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Magic_Doctor

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

J’ai une colonne de 20 cellules contenant des dates.
J’ai nommé chaque cellule : « Cumple1 », « Cumple2 », … , « Cumple20 ».
J’ai rédigé dans un premier temps la macro suivante qui marche très bien :

Sub Zaza ()
Dim i As Byte, dn(20) As Date, mdn(20) As Byte, jdn(20) As Byte ‘3 matrices statiques
For i = 1 To 20
dn(i) = Range("Cumple" & i).Value
mdn(i) = Month(dn(i)) ‘je récupère le numéro du mois de la date
jdn(i) = Day(dn(i)) ‘je récupère le numéro du jour de la date
Next i
Etc.
End Sub

Supposons maintenant que la colonne au lieu d’avoir 20 cellules en ait 200 ; je ne me vois pas nommer individuellement 200 cellules ! (au-delà, bien évidemment, je déclarerais mes variables %)
J’ai nommé la colonne entière “ListeDatesCumples” et ai tenté ceci :

Sub Zaza ()
Dim cell As Range, i As Byte, dn() As Date, mdn() As Byte, jdn() As Byte ‘3 matrices dynamiques
For Each cell In [ListeDatesCumples]
ReDim Preserve mdn(i) As Byte
ReDim Preserve jdn(i) As Byte
i = i + 1
dn(i) = cell.Value
mdn(i) = Month(dn(i))
jdn(i) = Day(dn(i))
Next cell
Etc.
End Sub

Ça me paraissait pourtant logique. Et bien non. Echec retentissant.
Où est donc l’erreur ?

Merci de me corriger.
 
Re : Problème avec des matrices dynamiques

Salut,

Oui logique sauf que tu oublis de redimensionner dn. et que l'increment de ton i est trop haut (a moins que tu sois en base 1).

Code:
Sub Zaza()
    Dim cell As Range, i As Byte, dn() As Date, mdn() As Byte, jdn() As Byte '3 matrices dynamiques
    
    For Each cell In Range("A1:G20")
      ReDim Preserve dn(i) As Date
      ReDim Preserve mdn(i) As Byte
      ReDim Preserve jdn(i) As Byte
      
      dn(i) = cell.Value
      mdn(i) = Month(dn(i))
      jdn(i) = Day(dn(i))
      i = i + 1
    Next cell
End Sub
++
Minick
 
Re : Problème avec des matrices dynamiques

Merci Minick pour ta solution.
Malheureusement ça ne marche toujours pas.
Tu me demandes si je suis en base 1, et bien oui. Pour un problème d'Array j'avais dû choisir cette option.
Détail, en fait il ne s'agit pas d'une macro mais d'une fonction. Quoi qu'il en soit, le langage est toujours le même.
 
Re : Problème avec des matrices dynamiques

Pour clore ce fil j'envoie la solution :

For Each cell In [ListeDatesCumples]
i = i + 1 ' ---> marche !!!
ReDim Preserve dn(i) As Date
ReDim Preserve mdn(i) As Byte
ReDim Preserve jdn(i) As Byte

'i = i + 1 ---> marche pas
dn(i) = cell.Value
mdn(i) = Month(dn(i))
jdn(i) = Day(dn(i))
'i = i + 1 ---> marche pas
Next cell

qui marche !
Je suis en base 1
J'ai donc déplacé i = i + 1 comme me l'a conseillé winick, et fini par trouver quel devait être son bon emplacement. En revanche je n'ai pas compris la subtilité.
Bon, l'essentiel c'est que ça marche !
 
Re : Problème avec des matrices dynamiques

Pourquoi a cet endroit tout simplement parce que quand tu initialises ta variable i
elle prend comme valeur 0 donc pour pouvoir initialiser pour la 1ere fois tes
tableaux, il faut incrementer i de 1 (du a l'option base 1).
[si tu avais ete en base 0, ma solution (avec increment de i en fin de boucle) fonctionnait]

++
Minick
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
40
Affichages
3 K
O
  • Question Question
Réponses
0
Affichages
732
okotcha
O
D
Réponses
0
Affichages
1 K
D
Retour