Référencer une variable range dans un range

dannzka Messages postés 4 Statut Membre -  
dannzka Messages postés 4 Statut Membre -
Bonjour,

Je vous explique un peu le contexte:

Je cherche à obtenir des données statistiques financières à partir d'un onglet data.

J'ai un onglet avec des paramètres modifiables (parameters) où je change la date de début et de fin de l'étude statistique. Le data est stocké dans l'onglet historical_data. La date du dit data est en colonne "A". Je cherche à compter le nombre de lignes séparant la cellule "A2" des dates de début et de fin de l'étude statistique.

Voilà mon code:

Dim str_startdate As String, str_enddate As String
Dim rng_startdate As Range, rng_enddate As Range
Dim lng_startdate As Long, lng_enddate As Long

str_startdate = Worksheets("Parameters").Range("G11").Value
str_enddate = Worksheets("Parameters").Range("G12").Value

Set rng_startdate = Worksheets("Historical_Data").Range("A2:A49").Find(what:=str_startdate)
Set rng_enddate = Worksheets("Historical_Data").Range("A2:A49").Find(what:=str_enddate)

lng_startdate = Worksheets("Historical_Data").Range("A2" & ":" & rng_stardate).Rows.Count
lng_enddate = Worksheets("Historical_Data").Range("A2" & ":" & rng_enddate).Rows.Count

J'ai une erreur au niveau des deux dernières lignes. "error 1004: application-defined or object-defined error".

J'ai aussi essayé le code suivant:

lng_startdate = Worksheets("Historical_Data").Range("A2", rng_stardate).Rows.Count
lng_enddate = Worksheets("Historical_Data").Range("A2", rng_enddate).Rows.Count
qui me donne la même erreur.

Des idées pour m'aider?
Merci beaucoup.

7 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Essaies :
    Option Explicit
    Private Sub x()
    
    Dim dat_StartDate As Date, dat_EndDate As Date
    Dim cel_StartDate As Range, cel_EndDate As Range, rng_Dates As Range
        
    dat_StartDate = Worksheets("Parameters").Range("G11").Value
    dat_EndDate = Worksheets("Parameters").Range("G12").Value
    Set cel_StartDate = Worksheets("Historical_Data").Range("A2:A49").Find(what:=dat_StartDate)
    Set cel_EndDate = Worksheets("Historical_Data").Range("A2:A49").Find(what:=dat_EndDate)
    If Not cel_StartDate Is Nothing And Not cel_EndDate Is Nothing Then
      Set rng_Dates = Range(cel_StartDate, cel_EndDate)
      'traitement ...  par exemple :
      MsgBox rng_Dates.Rows.Count
    End If
    
    End Sub


    Cordialement
    Patrice
    1
    1. dannzka Messages postés 4 Statut Membre
       
      Là j'ai droit à une error 91:object variable not set, alors que rng_startdate est set à la ligne du dessus...

      Mais merci de toutes vos réponses, je me sens moins seul :)
      0
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
       
      Vérifier le nom de la feuille et l'existence des dates (pas des textes)
      0
  2. Gyrus Messages postés 3360 Statut Membre 526
     
    Si tu as l'erreur 1004, c'est certainement que la valeur recherchée n'a pas été trouvée.
    Essaie comme cela :

    Dim str_startdate As String, str_enddate As String
    Dim rng_startdate As Range, rng_enddate As Range
    Dim lng_startdate As Long, lng_enddate As Long
    With Worksheets("Parameters")
    str_startdate = .Range("G11").Value
    str_enddate = .Range("G12").Value
    End With
    With Worksheets("Historical_Data")
    Set rng_startdate = .Range("A2:A49").Find(what:=str_startdate)
    If Not rng_startdate Is Nothing Then
    lng_startdate = .Range(.Range("A2"), rng_startdate).Rows.Count
    Else
    MsgBox "La valeur " & str_startdate & " n'a pas été trouvée."
    End If
    Set rng_enddate = .Range("A2:A49").Find(what:=str_enddate)
    If Not rng_enddate Is Nothing Then
    lng_enddate = .Range(.Range("A2"), rng_enddate).Rows.Count
    Else
    MsgBox "La valeur " & str_enddate & " n'a pas été trouvée."
    End If
    End With


    A+
    1
  3. Gyrus Messages postés 3360 Statut Membre 526
     
    Bonjour,

    Essaie comme cela :

    Dim str_startdate As String, str_enddate As String
    Dim rng_startdate As Range, rng_enddate As Range
    Dim lng_startdate As Long, lng_enddate As Long
    With Worksheets("Parameters")
    str_startdate = .Range("G11").Value
    str_enddate = .Range("G12").Value
    End With
    With Worksheets("Historical_Data")
    Set rng_startdate = .Range("A2:A49").Find(what:=str_startdate)
    Set rng_enddate = .Range("A2:A49").Find(what:=str_enddate)
    lng_startdate = .Range(.Range("A2"), rng_startdate).Rows.Count
    lng_enddate = .Range(.Range("A2"), rng_enddate).Rows.Count
    End With


    A+
    0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Tu lui passes un range là où il attend un n° de ligne (un nombre)
    Si tu veux la ligne de rng_startdate c'est rng_startdate.row
    Mais est-ce que tu trouves vraiment le bon rng_startdate ? J'ai un doute vu qu'il s'agit d'une date et que c'est particulier. Contrôle cette variable en mettant un Stop.

    eric

    En essayant continuellement, on finit par réussir.
    Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
    En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dannzka Messages postés 4 Statut Membre
     
    @Gyrus, en faisant ça j'ai toujours la même erreur 1004 :/

    @Eriiic, j'ai donc remplacé
    lng_startdate = Worksheets("Historical_Data").Range("A2", rng_stardate).Rows.Count

    par
    lng_startdate = Worksheets("Historical_Data").rng_startdate.Row

    mais ça me donne un error 438: Object doesnt support this property or method, pourtant c'est bien dimensionné en range...

    Sinon peut être quelque chose pour convertir mon range en string?

    En tout cas, merci de vos réponse rapides.
    0
  7. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Je n'avais pas dit :
    lng_startdate = Worksheets("Historical_Data").rng_startdate.Row
    mais :
    lng_startdate = rng_startdate.Row puisque rng_startdate est un range.

    Et comme ta date est un string, mets-là as Date comme proposé par Patrice, ou bien :
    Set rng_startdate = Worksheets("Historical_Data").Range("A2:A49").Find(what:=CDate(str_startdate), LookIn:=xlFormulas)

    Pour les dates je te conseille d'ajouter toujours le paramètre LookIn:=xlFormulas

    eric
    0
  8. dannzka Messages postés 4 Statut Membre
     
    Bonjour tout le monde, j'espère que vous avez passé un bon week-end.

    J'ai utilisé le code de Gyrus en dimensionnant la date comme une Date et non comme un String et ça a marché. Sinon ça me mettait valeur introuvable alors que les valeurs existaient.

    Merci à tous pour votre aide précieuse et votre réactivité.
    0