Dupliquer formule sur un nombre de ligne variable

Bonjour,

Je bloque actuellement sur la conception d'une macro afin de convertir des données issues d'une application interne.

J'obtiens de cette application les mois au format texte et cherche à convertir ceux-ci au format numérique.

La macro que j'ai codé grâce au cours présent sur ce site, me donne un résultat probant pour la case B2.

Néanmoins, je n'arrive pas à voir comment structurer la suite pour étendre cette conversion à l'ensemble de la colonne.

J'ai dans l'idée de devoir créer une boucle, mais la difficulté qui se présente est la dernière ligne à analyser.

Celle-ci variera chaque mois passant de 50 lignes à 3000 par exemple au fil du temps.

J'ai regardé du côté d'un sujet similaire concernant la duplication sur un nombre de ligne variable. Mais je n'arrive pas à aboutir dans mes essais.

Je vous mets à disposition en pièce jointe un exemple du traitement en cours et vous remercie par avance pour vos idées et conseils.

3test.xlsm (14.56 Ko)

Bonjour,

Une proposition.

Cdlt.

3test-2.xlsm (14.10 Ko)
Public Sub NumMonths()
Dim tbl, arr(), i As Long
    With ActiveSheet
        tbl = .Cells(1).CurrentRegion.Value
        For i = 2 To UBound(tbl)
            tbl(i, 2) = month("1/" & tbl(i, 1))
        Next i
        .Cells(1).CurrentRegion.Value = tbl
    End With
End Sub

Bonjour,

Merci pour votre code vba qui raccourcit grandement celui que j'ai élaboré lors de mes tests.

J’essaie de comprendre d'avantage le fonctionnement du code proposé au lieu de le reprendre bêtement.

Public Sub NumMonths()
Dim tbl, arr(), i As Long
    With ActiveSheet
        tbl = .Cells(1).CurrentRegion.Value
        For i = 2 To UBound(tbl)
            tbl(i, 2) = month("1/" & tbl(i, 1))
        Next i
        .Cells(1).CurrentRegion.Value = tbl
    End With
End Sub

La seconde ligne, j'ai compris la définition des variables, la première (tbl) en tant que tableau, la seconde (i) en tant que valeur numérique.

Ensuite on travail sur la feuille active.

Si je comprends correctement la suite du code, on demande en VBA à lire le contenu de la cellule 1 d'Excel afin de récupérer la plus grande valeur non vide de la colonne A (UBound), mais comment Excel détermine la colonne de travail ? Est-ce à cause de Cells(1) ?

La suite avec le For i = 2 indique de démarrer la boucle à la ligne 2 jusqu'à la dernière ligne trouvé avec UBound précédemment ?

Et dernière ligne ou je pêche dans sa compréhension : tbl(i, 2) = month("1/" & tbl(i, 1))

Comment cette ligne parvient-elle à associer le mois en lettre à un chiffre correspondant ? Je n'arrive pas à assimiler son fonctionnement.

Merci à vous.

Re,

Un début d'explications.

Cdlt.

6test-2.xlsm (15.63 Ko)
Public Sub NumMonths()
Dim tbl, i As Long
    With ActiveSheet
        'Range("A1").CurrentRegion = A1:B43 dans l'exemple
        'tbl= tableau de x lignes et 2 colonnes
        tbl = .Range("A1").CurrentRegion.Value
        For i = 2 To UBound(tbl)    'nombre de lignes
            'Equivalent à Cells(i,"B") ou Cells(i,2)
            tbl(i, 2) = month("1/" & tbl(i, 1))
        Next i
        'Restitution dans la feuille de calcul
        .Range("A1").CurrentRegion.Value = tbl
    End With
End Sub

Bonjour,

Merci pour les détails supplémentaires qui m'aide à mieux comprendre le code proposé.

Il me reste à analyser la ligne qui retourne le mois en chiffre.

tbl(i, 2) = month("1/" & tbl(i, 1))

Je vous remercie pour votre aide.

Rechercher des sujets similaires à "dupliquer formule nombre ligne variable"