Accéder à un Range d'une feuille sur VBA

Résolu/Fermé
Mouaffak_Mohammed Messages postés 19 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 25 mars 2015 - Modifié par crapoulou le 20/03/2015 à 12:03
Mouaffak_Mohammed Messages postés 19 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 25 mars 2015 - 23 mars 2015 à 18:48
Bonjour,

J'essaye d'accéder à des données sur la feuille "Donnees", pour pouvoir accéder à Range("I2")
Dans le code suivant ( oubliez ce qui est en commentaire ) je teste pour savoir si le while accède à la feuille "Donnees" que j'ai activée, mais il fait le calcul sur la feuille où j'appelle la fonction, du coup il considère Range("I2") sur la feuille où j'effectue le calcul et non "Donnees".
Voici mon code :

Public Function PrixUnitaire(Depot, Base_Oil, Transaction, Year, Week)
'Worksheets("Donnees").Activate
Sheets("Donnees").Activate
Dim i As Integer
Dim Sum As Double
Dim j As Integer
i = 0
Sum = 0
j = 0
While (Range("I2").Offset(i, 0) <> "")
'If Range("I2").Offset(i, -8) = Depot And Range("I2").Offset(i, -7) = Base_Oil And Range("I2").Offset(i, -5) = Transaction And Range("I2").Offset(i, -2) = Year And Range("I2").Offset(i, 0) = Week Then
'Sum = Sum + Range("I2").Offset(i, 7)
'j = j + 1
'End If
i = i + 1
Wend
'PrixUnitaire = Sum / j
PrixUnitaire = i
End Function



Merci infiniment pour votre aide.
A voir également:

2 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
20 mars 2015 à 15:19
Bonjour,

Si les valeurs se trouvent sur la feuille "Donnees", essaies :
Public Function PrixUnitaire(Depot, Base_Oil, Transaction, Year, Week)
Dim w As Worksheet
Dim i As Integer
Dim Sum As Double
Dim j As Integer

  Set w = Worksheets("Donnees")
  i = 0
  Sum = 0
  j = 0
  With w
    While .Range("I2").Offset(i, 0) <> ""
      'If .Range("I2").Offset(i, -8) = Depot And .Range("I2").Offset(i, -7) = Base_Oil And .Range("I2").Offset(i, -5) = Transaction And .Range("I2").Offset(i, -2) = Year And .Range("I2").Offset(i, 0) = Week Then
      'Sum = Sum + .Range("I2").Offset(i, 7)
      'j = j + 1
      'End If
      i = i + 1
    Wend
  End With
  'PrixUnitaire = Sum / j
  PrixUnitaire = i
End Function


0
Mouaffak_Mohammed Messages postés 19 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 25 mars 2015
20 mars 2015 à 18:02
Bonjour;
Merci de votre réponse.
J'ai testé votre Code tel qu'il est mais ça m'affiche une erreur " #Value "
Normalement votre code et le mien devrait marcher !! je n'ai aucune idée où l'erreur peut être.
J'attends vos retours, Merci.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
21 mars 2015 à 23:17
Peut-être que ...
Dim i As Long
0
Mouaffak_Mohammed Messages postés 19 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 25 mars 2015
23 mars 2015 à 18:48
Excellent , J'ai pas pensé à ça.Merci .
0