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 :

CurrentRegion: coder à sa sauce


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Points : 102
    Points
    102
    Par défaut CurrentRegion: coder à sa sauce
    Bonjour le forum,

    Avant de découvrir CurrentRegion, j'ai essayé de coder moi même quelques lignes permettant de faire exactement la même code. Cepedant, cela ne fonctionne pas.
    J'ai vraiment l'impression que c'est une erreur de débutant qui m'a bloqué, mais je sollicite néanmoins votre aide. Ainsi dans un autre contexte, je ne me planterai pas

    Mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim Plage As Range
    Dim Cell As Range, Borne1 As Range, Borne2 As Range
     
     
        Set Cell = ThisWorkbook.Sheets(2).Range("H50") 
     
        Set Borne1 = ThisWorkbook.Sheets(2).Cells(Cell.End(xlUp).Row, Cell.End(xlLeft).Column)
        Set Borne2 = ThisWorkbook.Sheets(2).Cells(Cell.End(xlDown).Row, Cell.End(xlToRight).Column)
     
        Set Plage = Range(Borne1, Borne2)
    Merci d'avance !

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Voici ton code modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
    Dim Plage As Range, Cell As Range, Borne1 As Range, Borne2 As Range
        With ThisWorkbook.Sheets(2)
            Set Cell = .Range("H50")
            Set Borne1 = .Cells(Cell.End(xlUp).Row, Cell.End(xlToLeft).Column)
            Set Borne2 = .Cells(Cell.End(xlDown).Row, Cell.End(xlToRight).Column)
            Set Plage = .Range(Borne1, Borne2)
        End With
    End Sub
    Je te laisse effectuer des tests pour constater que le résultat n'est pas exactement identique à celui obtenu avec CurrentRegion .

    Cordialement.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Points : 102
    Points
    102
    Par défaut Re
    Salut,


    Ton code fonctionne à la perfection en effet. Mais maintenant la question à mille points ... Pourquoi ? Je veux dire, mon code me semble identique au tiens non ? Mis à part pour "Plage".

    Comment se fait-il qu'un simple changement de structure fasse que le code fonctionne ?


    Pour ce qui est de la différence avec CurrentRegion, la différence est que: si la cellule en question se trouve dans un tableau (ListObject), les en-têtes ne seront pas sélectionnées, c'est bien ça ?

    Quoi qu'il en soit, merci pour la réponse

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Comme tu l'écris joliment, mis à part pour "Plage" il y a également xlToLeft qui diffère de xlLeft.

    La propriété CurrentRegion permet de définir une plage limitée par toute combinaison de lignes et de colonnes vides, ce qui correspond à la notion de zone en cours.
    Le problème de ta procédure, c'est qu'elle prend en compte les limites indiquées par la colonne H et la ligne 50. En cas de présence de cellules vides dans cette colonne ou cette ligne, la plage n'est plus représentative.

    Cordialement.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Points : 102
    Points
    102
    Par défaut Utilisation CurrentRegion
    Re,

    De fait, je n'avais pas remarqué les "xlToLeft" etc et je n'avais pas non plus remarqué la limitation possible en cas de cellule vide !

    Par contre, j'ai un petit problème d'utilisation de CurrentRegion... Impossible de récupérer l'adresse/Range de CurrentRegion.

    J'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Plage as Range, Cell1 as Range
     
    Set Cell1 = ThisWorkbook.Sheets("Données Provisoires Sygma").Range("A1")
    Cell1.CurrentRegion.Select
     
    Plage = Selection
    Et aussi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Plage as Range, Cell1 as Range
     
    Set Cell1 = ThisWorkbook.Sheets("Données Provisoires Sygma").Range("A1")
    Plage = Cell1.CurrentRegion.Address
    Mais rien n'y fait, j'ai toujours l'erreur: "Variable objet ou variable de bloc With non définie"


    Je ne comprends vraiment pas :/

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    pour le code 1
    erreur basique : on instancie un Objet Range avec l'instruction Set

    pour le code 2
    erreur basique : en plus de l'erreur du code 1, on ne peut pas mettre un String (.Address) dans une variable Range (Plage)


    solution :

    code 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Plage as Range, Cell1 as Range
     
    Set Cell1 = ThisWorkbook.Sheets("Données Provisoires Sygma").Range("A1")
    Cell1.CurrentRegion.Select
     
    Set Plage = Selection
    D'ailleurs, on peut tout faire tenir en une seule ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = ThisWorkbook.Sheets("Données Provisoires Sygma").Range("A1").CurrentRegion

    code 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim PlageAdresse As String, Cell1 As Range
     
    Set Cell1 = ThisWorkbook.Sheets("Données Provisoires Sygma").Range("A1")
    PlageAdresse = Cell1.CurrentRegion.Address

  7. #7
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Tu peux même aller directement au but avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim PlageAdresse As String
    PlageAdresse = ThisWorkbook.Sheets("Données Provisoires Sygma").Range("A1").CurrentRegion.Address
    Cordialement.

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Points : 102
    Points
    102
    Par défaut
    Re bonjour,


    De fait, je n'y avais pas pensé !

    Entre temps j'ai trouvé une autre solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set Cell1 = ThisWorkbook.Sheets("Données Provisoires Sygma").Range("A1")
     
    Set Plage = Cell1.CurrentRegion
    Aussi simple que ça :p

    Merci de ton aide dans tous les cas

  9. #9
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Mon message n'a servi à rien ...

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Points : 102
    Points
    102
    Par défaut
    Oufti sorry Joe ! Je n'avais pas vu ton message !

    Par contre j'ai quand même une question sur ce que tu as dit:

    pour le code 1
    erreur basique : on instancie un Objet Range avec l'instruction Set
    L'erreur c'est d'instancier un Objet Range avec l'instruction Set ou il faut instancier un objet Range avec une instruction set ?


    En tout cas merci pour ta réponse détaillée et mille fois sorry d'avoir zappé ta réponse ! ^^

  11. #11
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    non, l'erreur c'est de ne pas faire ce que j'indique justement

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

Discussions similaires

  1. Comment coder une tabulation pour cut ?
    Par ggnore dans le forum Linux
    Réponses: 2
    Dernier message: 26/11/2004, 11h31
  2. Réponses: 5
    Dernier message: 08/10/2004, 15h40
  3. Coder un binaire PE sans étape de linkage
    Par Asmx86 dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 12/04/2004, 00h07
  4. Réponses: 13
    Dernier message: 07/04/2004, 15h25
  5. Comment coder guillemets et cotes ?
    Par Vow dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 14/05/2003, 13h11

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