IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Différence entre Worksheets("").Range et Sheets(1).Range


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Points : 249
    Points
    249
    Par défaut Différence entre Worksheets("").Range et Sheets(1).Range
    Bonjour,

    J'aimerais savoir quelle est la différence entre Worksheets("").Range et Sheets("").Range !

    En fait, j'ai créé une fonction qui calcule les éléments d'une colonne après un filtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Sub Calcul_EngClientOk()
     
    Dim ListeTitre()
    Dim ListeParam()
    Dim DateDebut As Date
    Dim DateFin As Date
    Dim Nbl, St As Integer
    Dim ShSources As Worksheet
     
    Mt = Month(Date) - 1
    DateDebut = "01/01/" & Year(Date)
    DateFin = "01/" & Month(Date) & "/" & Year(Date)
     
    Worksheets("tarifé 2015").Activate
    Set ShSources = ThisWorkbook.Worksheets("tarifé 2015")
    Nbl = Worksheets("tarifé 2015").Range("A1").CurrentRegion.Rows.Count
     
    ' on boucle sur chaque colonne cherchée ' et on filtre sur son paramètre dédié
     
     
            Set c = Nothing
            Set c = ShSources.Rows(1).Find("Date de réponse demandée", , xlValues, xlWhole)
            If Not c Is Nothing Then ShSources.Range("A1").AutoFilter c.Column, ">=" & DateDebut, xlAnd, "<" & Format(DateFin, "mm/dd/yyyy")
     
            Set e = Nothing
            Set e = ShSources.Rows(1).Find("DELAI CLIENT", , xlValues, xlWhole)
            If Not e Is Nothing Then ShSources.Range("A1").AutoFilter e.Column, "1"
     
            Set d = Nothing
            Set d = ShSources.Rows(1).Find("Nombre", , xlValues, xlWhole)
            If Not d Is Nothing Then M = Application.WorksheetFunction.Subtotal(9, Range(Cells(2, d.Column), Cells(Nbl, d.Column)))
     
     
            ThisWorkbook.Worksheets("eng_client").Range("D2").Value = M
            Sheets(5).Range("D2").Value = M
     
    End Sub
    Mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'ça ne fonctionne pas
            ThisWorkbook.Worksheets("eng_client").Range("D2").Value = M
    'ça fonctionne :
            Sheets(5).Range("D2").Value = M
    Ce qui m'amène à demander quelle est la différence et aussi comment pourrais je utiliser le nom de la feuille comme indice de la feuille pour récupérer les valeurs ?

    Merci d'avance pour votre aide
    Lorsque vous avez obtenu une réponse satisfaisante à votre discussion, N'oubliez pas de cliquer sur

    L'erreur n'annule pas la valeur de l'effort accompli.

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par aziz1015 Voir le message
    Bonjour,

    Mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    'ça ne fonctionne pas
            ThisWorkbook.Worksheets("eng_client").Range("D2").Value = M
    Cela devrait marcher à la condition que le classeur qui contient la macro (ThisWorkBook) contienne vraiment une feuille qui s'appelle vraiment eng_client. Si eng_client est une variable (je n'ai pas regardé), il faut enlever les guillemets


    Tu peux aussi essayer cette variante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim UneFeuille as worksheet
    dim UneCellule as range
    dim UneValeur as double
    set UneFeuille = ThisWorkbook.sheets("eng_client")
    set UneCellule=UneFeuille.range("D2")
    UneValeur = UneCellule.value
    D'une manière plus générale, il faut faire une certaine différence entre les objets sheet et worksheet.

    Un objet sheet comprend tous les objets qu'Excel peut considérer comme une feuille. On parle d'une feuille de calcul, une feuille de macros Excel 4-5, une feuille graphique et peut-être d'autres types de feuille que j'ignore.

    Un objet Worksheet est une feuille de calcul uniquement. Donc un classeur avec 3 feuilles de calcul et une feuille graphique contient 4 objets Sheet, mais 3 objets Worksheet.

    Tant qu'il n'y a que des feuilles de calcul dans un classeur, on peut utiliser indifféremment Sheet ou Worksheet. Mais dès que le classeur contient des types différents de feuilles, là, il faut faire plus attention.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Points : 249
    Points
    249
    Par défaut
    Merci, cela marche effectivement, je ne sais pas pourquoi ça ne marchait pas ! J'ai supprimé la feuille et recréé par la suite une feuille avec le même nom et ça passe ! Merci pour vos précisions sur la différence !
    Lorsque vous avez obtenu une réponse satisfaisante à votre discussion, N'oubliez pas de cliquer sur

    L'erreur n'annule pas la valeur de l'effort accompli.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre Range et cells
    Par bibvba dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/06/2017, 12h36
  2. Différence entre sheets et worksheets
    Par guigol dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/07/2014, 17h19
  3. Différence entre %STR et %QUOTE
    Par fafabzh6 dans le forum Macro
    Réponses: 10
    Dernier message: 14/03/2011, 17h43
  4. Différence entre sheets et worksheets
    Par delphine35 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/08/2010, 17h28
  5. Différence entre sheets et worksheets
    Par naty76 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/02/2009, 18h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo