Range.offset: valeurs d'offset dans des variables

Bonjour!

j’ai des données quotidiennes dans un tableau ou les mois sont en colonnes et les jours en ligne.

L’idée est d’activer le coin supérieur gauche du tableau et de trouver le bon emplacement par activecell.offset(jour,mois).select mais les valeurs de jour et mois sont dans des variables qui ne sont pas acceptées en l’état . Que faire?

Merci

Bonjour Farka,

Sans fichier exemple cela va être compliqué, si les variables sont bien définies en “Integer” il n’y a pas de raison que ça ne fonctionne pas :thinking:

Par contre le code n’est pas correcte pour moi

MaDonnée = Range("A1").Offset(Jour, Mois).Value

A+

Binjour DucOn45!

Mais non, Ca ne marche pas! mes variables jour et mois sont bien en integer et ça ne marche pas

Un petit bout de mon script ci-dessous

Range(« C23 »).Select ’ c’est la valeur à copier
zzz = ActiveCell.Value

Range(« G9 »).Select ‘c’est le coin supérieur gauche jusrte à l’extérieur
Dim jjour As Integer
Dim mmois As Integer
ActiveCell.Offset(jjour, mmois).Select ‘c’est cette commande qui ne marche pas
ActiveCell.Value = zzz

Voilà pour l’instant!!!

Bon vote, Lionel

Bonjour,

Si j’ai bien compris :

Dim jjour As Integer
Dim mmois As Integer
[G9].Offset(jjour - 1, mmois - 1) = zzz

Daniel

ce serait plutôt (impossible d’écrire correctement donc 3 commandes par ligne

dim jjj as integer; dim jjour as integer; jjj=jjour ‘ jjour est une valeur à l’étude

dim mmm as integer; dim mmois as integer ; mmm=mmois ‘mmois, une valeur à l’étude

[G9].offset(jjj,mmm)=zzz ‘pas de “-1”

c’est toujours ce variables, même integer, qui ne sont pas lues

Bon, poste le classeur, on comprendra mieux.

Daniel

Sub M_Ajouter()
'****************************************************
'Tableau structuré « BDD » avec les jours en ligne et les mois en colonnes
'****************************************************
Range(« BDD »).Cells(Day(Date), Month(Date)).Value = 123
End Sub

Farka.xlsm (18,7 Ko)

Bonsoir à tous. Pour clarifier ci joint a) copie d’écran de la feuille ou je travaille et b) le script que j’essaye de faire marcher Toujours le même problème: offset ne fonctionne qu’avec une seule variable! J’ai essayé un offset en deux temps [offset(0, mois)] mais cela ne donne rien.
Dans la copie d’écran, à gauche les données initiales et les données calculées dans une autre feuille. A droite un tableau contenant les données quotidiennes (jours en ligne, mois en colonne) ceci pour simplifier les relevés avant transfert vers une feuille de comparaison avec les relevés de production en vue d’établir un coefficient de réfaction “nuage, neige, etc” J’ai fait plusieurs relevés à la main mais c’est trop lourd!

Toute critique ou suggestion bienvenues!

Lionel

2026.04.07_macro.pdf (37,6 Ko)

2026.04.07_Transfert données_01.pdf (67,7 Ko)

Il serait plus simple de mettre un fichier EXCEL, même anonymisé, au lieu de mettre des PDF…

Bonjour,

Inexact, bien sûr. Reporte-toi à l’aide VBA.

Daniel

Je persiste :

Dim jjour As Integer
Dim mmois As Integer
mmois=6  'par exemple
jjour=15
zzz="blabla"
[G9].Offset(jjour, mmois) = zzz

Mets “aaa” en N24 (si je vise bien).

Daniel

PS. Si tu veux que l’on modifie ton code, colle les lignes du code plutôt qu’une image des lignes.

pour vous donner un idée, une macro “test”

PS. plus tard,il faut éviter tout les “select” et “activate”, cela ne sert à rien et ralentit la macro

Sub Test()
     Dim MaDate As Long, Mois, Jour
     For MaDate = DateSerial(2026, 1, 1) To DateSerial(2026, 12, 31) 'boucler tous les jours de 2026
          Mois = Month(MaDate) 'son mois
          Jour = Day(MaDate) 'son jour
          Range("H9").Offset(Jour, Mois).Value = MaDate 'écrire la date dans cette cellule en décalage
          If Jour = 1 Then Range("H9").Offset(, Mois).Value = WorksheetFunction.Text(MaDate, "[$-fr-fr]mmmm") 'au dessus on écrit le mois avec un variable
          If Mois = 1 Then Range("H9").Offset(Jour).Value = Jour 'à gauche, on ecrit le jour avec un variable
     Next
     
     With Range("H9").Offset(1, 1).Resize(31, 12) 'pour toute la plage
          .NumberFormat = "ddd dd/mm/yyyy" 'modifier le format de la cellule en "date"
          .EntireColumn.AutoFit 'ajuster largeur des colonnes
     End With
End Sub

Edit : salut Daniel77