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 :

Problème avec Range(Cells(),Cells() [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2022
    Messages : 6
    Par défaut Problème avec Range(Cells(),Cells()
    Bonjour,

    Je suis nouvelle sur ce forum débutante en vba, je m'excuse d'avance si je n'expose pas mon problème de la meilleure des façons.

    J'ai une erreur sur ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'cette ligne de code me renvoie une erreur 1004 :
    Set Maplage = Worksheets("Calendrier scolaire").Range(Cells(2, 2), Cells(Semaines_P1 + 1, 3))
     
    'alors que cette ligne de code fonctionne :
    Set Maplage = Worksheets("Calendrier scolaire").Range("B2:C" & (Semaines_P1 + 1))
    Ce code est dans un module. J'ai déclaré MaPlage as Range.
    J'aimerais pouvoir utiliser l'écriture en Cells plutôt que celle avec le nom des colonnes en lettre car je souhaite piloter mes plages de cellules via des variables Integer. Pourriez-vous m'expliquer la différence entre mes 2 lignes de code qui génère une erreur sur la 1ère et pas sur la 2ème ligne ?

    ___________________________________________________________________________

    J'ai réussi à contourner le problème en écrivant le code ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'cette partie de code fonctionne bien
    With ThisWorkbook.Worksheets("Calendrier scolaire")
        Set MaPlage = .Range(.Cells(2, 2), .Cells(Semaines_P1 + 1, 3))
    End With
    MaPlage.Copy
    With Worksheets("Gestion des prets").Range("A4")
        .PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    End With

    Je poursuis mon code avec un copier-coller et je change juste de feuille. Mais j'ai de nouveau une erreur 1004 sur la partie qui suit (et si je remplace les .Cells(),.Cells() par un range("A3:H3") ça fonctionne...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With ThisWorkbook.Worksheets("Gestion des prets")
        Set MaPlage = .Range(.Cells(3, 1), .Cells(3, Semaines_P1))  'le programme s'arrête ici et me renvoie une erreur 404 alors que pour moi, c'est exactement la même écriture que les lignes du dessus qui fonctionnent.
    End With
    MaPlage.Merge
    MaPlage.Value = "Période 1"
    En vous remerciant pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Par défaut
    Vérifiez le contenu de "Semaines_P1", avant l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Maplage = Worksheets("Calendrier scolaire").Range(Cells(2, 2), Cells(Semaines_P1 + 1, 3))
    via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MsgBox Semaines_P1 'ou bien
    Debug.Print Semaines_P1

  3. #3
    Membre à l'essai
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2022
    Messages : 6
    Par défaut
    Debug.Print Semaines_P1 ne me donne rien
    MsgBox Semaines_P1 me donne 8
    Dans les variables locales il est écrit
    Semaines_P1="8" Type Variant/String
    (Semaines_P1 vient d'une InputBox)

    Je viens d'essayer de faire :
    Semaines_P1=Val(Semaines_P1) et là, ça fonctionne !
    Ce que je ne m'explique pas, c'est pourquoi cela a marché après ma modifications sur la première sélection. Mais, je suis beaucoup trop novice pour comprendre.

    En tout cas, merci beaucoup

  4. #4
    Membre à l'essai
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2022
    Messages : 6
    Par défaut
    En revanche, pourriez-vous m'expliquer pour ce code avec Cells() ne fonctionne pas (cela me renvoie une erreur 1004).
    J'ai ôté toute variable pour éliminer ce problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'cette ligne de code me renvoie une erreur 1004 :
    Set Maplage = Worksheets("Calendrier scolaire").Range(Cells(2, 2), Cells(9, 3))
     
    'alors que cette ligne de code fonctionne :
    Set Maplage = Worksheets("Calendrier scolaire").Range("B2:C9")
    Ce code est dans un module. J'ai déclaré MaPlage as Range.
    J'aimerais pouvoir utiliser l'écriture en Cells plutôt que celle avec le nom des colonnes en lettre car je souhaite piloter mes plages de cellules via des variables Integer. Pourriez-vous m'expliquer la différence entre mes 2 lignes de code qui génère une erreur sur la 1ère et pas sur la 2ème ligne ?

    Merci pour votre aide

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 122
    Par défaut
    Bonjour

    il faut connaitre l'objet auquel se réfère la propriété Cells me semble t-il!
    C'est donc Worksheets(...).Cells.
    Et à quoi se rapporte le WorkSheet, à un classeur me direz-vous, alors On peut écrire ThisWorkbook.Worksheets("ma feuille") et si on ouvre plusieurs classeurs, Workbooks("mon workbook.xls").Worksheets("ma feuille").Cells(ligne, colonne).

  6. #6
    Membre à l'essai
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2022
    Messages : 6
    Par défaut
    J'avais rajouté le Workbooks("...") mais ça ne change rien à l'erreur.
    Ensuite, avec juste une cellule donc Workbooks("mon workbook.xls").Worksheets("ma feuille").Cells(ligne, colonne) cela fonctionne.
    C'est quand je veux sélectionner une plage de cellules donc du type Workbooks("mon workbook.xls").Worksheets("ma feuille").Range(Cells(ligne, colonne),Cells(ligne,colonne)) que cela me renvoie une erreur.

    Mais peut-être n'ai-je pas interprété correctement votre réponse.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Par défaut
    Le fait que "Debug.Print Semaines_P1 ne donne rien" est source de problème.
    Vous avez raison de prendre Val(InputBox) car cells(x,y) s'attend à ce que x soit un nombre dans votre cas.
    Où en êtes-vous pour l'instant ?

  8. #8
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 086
    Par défaut
    Salut

    Citation Envoyé par erunoyobgd Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'cette partie de code fonctionne bien
    With ThisWorkbook.Worksheets("Calendrier scolaire")
        Set MaPlage = .Range(.Cells(2, 2), .Cells(Semaines_P1 + 1, 3))
    End With
    MaPlage.Copy
    With Worksheets("Gestion des prets").Range("A4")
        .PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    End With
    Je vois que dans les exemple suivant, tu sembles avoir abandonné cette écriture, tu devrais persévérer dans ce sens, il faut absolument, comme le dit fraflt69, que les cells soit rattacher à la même feuille que le range global, sinon tu auras aussi une erreur.

    Comment as-tu déclaré Semaines_P1 ? Quelle valeur est mise à l'intérieur et où est prise cette valeur?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  9. #9
    Membre à l'essai
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2022
    Messages : 6
    Par défaut
    Je vous remercie sincèrement de vos aides.
    Je n'ai pas abandonné l'écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Worksheets("Calendrier scolaire")
        Set MaPlage = .Range(.Cells(2, 2), .Cells(Semaines_P1 + 1, 3))
    End With
    Au contraire, je l'ai gardé et depuis que j'ai transformé ma variable Semaines_P1 en Integer (au lieu du String issu de l'InputBox) tout fonctionne.

    J'essaie juste de comprendre mieux les choses et de savoir pourquoi, à l'initial, mon code ci-dessous ne fonctionnait pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'cette ligne de code me renvoie une erreur 1004 :
    Set Maplage = Worksheets("Calendrier scolaire").Range(Cells(2, 2), Cells(9, 3))
     
    'alors que cette ligne de code fonctionne :
    Set Maplage = Worksheets("Calendrier scolaire").Range("B2:C9")
    Car, pour moi comprendre me permet d'apprendre...


    Quoiqu'il en soit et pour conclure, mon problème de base est résolu puisque j'ai trouvé grâce à vos réponses une solution à l'écriture de mon code. Merci beaucoup.

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 141
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'essaie juste de comprendre mieux les choses et de savoir pourquoi, à l'initial, mon code ci-dessous ne fonctionnait pas :
    'cette ligne de code me renvoie une erreur 1004 :
    Set Maplage = Worksheets("Calendrier scolaire").Range(Cells(2, 2), Cells(9, 3))
    Parce-que Cells est un objet de type Range qui a comme parent la feuille nommée "Calendrier scolaire" et que vous ne l'avez pas spécifié
    Alors que dans cette écriture la parentalité existe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("Calendrier scolaire")
      Set Maplage =  .Range(.Cells(2, 2), .Cells(9, 3))
    End With
    Idéalement, il faudrait également préciser le parent de la feuille soit le classeur

    A lire éventuellement Excel VBA - La parentalité d’un objet
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Membre à l'essai
    Femme Profil pro
    Enseignant
    Inscrit en
    Mai 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2022
    Messages : 6
    Par défaut
    Merci, je vais aller lire cette documentation.
    Je pensais qu'en écrivant Worksheets("Calendrier scolaire").Range... je définissais justement le parent de l'objet Cells.
    J'ai du chemin à parcourir !
    Bonne journée

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 141
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est le point qui précède l'objet qui le relie à son parent.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. [XL-MAC 2011] Problème avec Range (Cells(
    Par Paul Detheux dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/05/2020, 15h51
  2. [VBA - Excel - Word] Problème avec Range(Cells(1,1),Cells(10,10))
    Par Tanoffy dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/10/2014, 11h07
  3. Petit problème avec Range et Cells
    Par fdegrave dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/03/2013, 18h08
  4. copier une colonne pb avec range cells
    Par clairev dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/07/2009, 14h40
  5. problème avec les cell array
    Par fattouna dans le forum MATLAB
    Réponses: 1
    Dernier message: 02/07/2009, 21h56

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