Une petie question sur un code...

Pygouv

XLDnaute Occasionnel
bonjour le forum!

J'utilise ce code ci dessous pour transformer mes mois en chiffres : janvier = 1, etc...

le code fonctionne bien jusqu'à la ligne 15842, mais mon document est plus long et ca ne fonctionne pas ensuite...

Savez ou comment dimenssioner le code jusqu'à la dernière cellule non vide de mon tableau?

Merci à tous!




Sub Feuil5_Bouton1_Clic()
Application.ScreenUpdating = False


Dim I&, T As Variant, Plg As Range
Dim Month As Object

Set Month = CreateObject("Scripting.Dictionary")
Set Plg = Range(Cells(10, 4), Cells(Rows.Count, 4).End(3))

Month("jan") = 1: Month("feb") = 2: Month("mar") = 3
Month("apr") = 4: Month("may") = 5: Month("jun") = 6
Month("jul") = 7: Month("aug") = 8: Month("sep") = 9
Month("oct") = 10: Month("nov") = 11: Month("dec") = 12
T = Plg

For I = LBound(T, 1) To UBound(T, 1)
T(I, 1) = Month(T(I, 1))
Next I

Plg = T
End Sub
 

Jam

XLDnaute Accro
Re : Une petie question sur un code...

Salut Pygouv, Pierrot,

Bon d'abord je ne peut-être d'accord qu'avec Pierrot: pas d'utilisation de nom réservés en guise de variable...c'est bug assuré.
Je te propose le petit code suivant :
VB:
Sub Test()
Dim myArray As Variant
Dim myRange As Range
Dim arrMonth As Variant
Dim i As Long

'Array: c'est mieux que d'attribuer les données d'un tableau comme tu l'as fait...et plus pratique
arrMonth = Array("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec")


'Là c'est la sélection qui devait te manquer ;)
ActiveSheet.Range("D10", ActiveSheet.Range("D65536").End(xlUp)).Select
Set myRange = Selection
myArray = myRange.Value

'La petite boucle miracle qui simplifie tout le reste
For i = 0 To UBound(myArray, 1)
    If Not IsError(Application.Match(myArray(i, 1), arrMonth, 0)) Then
        myArray(i, 1) = Application.Match(myArray(i, 1), arrMonth, 0)
    End If
Next

myRange.Value = myArray

End Sub

Bon courage
 

Pygouv

XLDnaute Occasionnel
Re : Une petie question sur un code...

Bonjour,

merci pour ton aide.

on me dit qu'il y a un soucis ici :

For i = 0 To UBound(myArray, 1)
If Not IsError(Application.Match(myArray(i, 1), arrMonth, 0)) Then
myArray(i, 1) = Application.Match(myArray(i, 1), arrMonth, 0)
End If
Next

pour info, mon premier mois est en à modifier est en D10...

merci beaucoup
 

Jam

XLDnaute Accro
Re : Une petie question sur un code...

Re,

D10...c'est bien ce que j'ai mis dans le code :)

Pour l'erreur, c'est facile c'est de ma faute :p j'avais mis un Option Base 1 en en-tête de module.
Pour corriger, il suffit de change le For i = 0 en For i = 1.

Bon courage
 

Si...

XLDnaute Barbatruc
Re : Une petie question sur un code...

salut

Hein ? Quoi ! Comment....c'est pas possible :eek:

il y a peut-être des espaces, en début ou en fin, indésirables.
Autre proposition :
Code:
Sub Feuil5_Bouton1_Clic()
  Application.ScreenUpdating = False
  Dim Plg As Range, T(), Mois(), L As Long, n As Byte
  Set Plg = Range("D10", Cells(Rows.Count, 4).End(xlUp))
  T = Plg
  Mois = Array("", "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec")
  For L = 1 To UBound(T, 1)
    For n = 0 To 12
      If Trim(T(L, 1)) = Mois(n) Then T(L, 1) = n: Exit For
    Next
  Next
  Plg = T
End Sub
 

Jam

XLDnaute Accro
Re : Une petie question sur un code...

Salut Si...

il y a peut-être des espaces, en début ou en fin, indésirables.


Je ne pense pas que ce soit le problème, car le code que je propose ne modifie pas la valeur si il y a une erreur.
de plus si c'était le cas pour quelques valeur, la suite ne s'arrêterai pas à 1553 alors qu'il y a plus de 15000 cellules.

Bon courage
 

Discussions similaires

Statistiques des forums

Discussions
314 659
Messages
2 111 624
Membres
111 237
dernier inscrit
vinthi