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 :

Range avec colonnes variables [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Controleur de gestion
    Inscrit en
    Janvier 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Controleur de gestion

    Informations forums :
    Inscription : Janvier 2017
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Range avec colonnes variables
    Bonjour

    J'ai une macro qui boucler sur des colonnes
    je bugue sur un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c =  Sheets("Données mensuelles").Range(Cells(45, Colonne), Cells(1044, Colonne)).Find(CodeMarque, LookAt:=xlWhole)
    si je le remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c = Sheets("Données mensuelles").Range("BH45:BH1044").Find(CodeMarque, LookAt:=xlWhole)
    ça fonctionne mais mon numéro de colonne doit être variable...

    vue plus large du code :

    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
    For Colonne = ColonneCodeMarqueDeb To ColonneCodeMarqueFin Step 70
     
            Set c =  Sheets("Données mensuelles").Range(Cells(45, Colonne), Cells(1044, Colonne)).Find(CodeMarque, LookAt:=xlWhole)
     
            If Not c Is Nothing Then
                   FirstAddress = c.Address
                   Do
                          ....
     
     
                          Set c = Sheets("Données mensuelles").Range("BH45:BH1044").FindNext(c)
     
                    Loop While Not c Is Nothing And c.Address <> FirstAddress
            End If
     
    Next Colonne
    Si vous avez une solution, je vous en remercie d'avance

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Tu n'indiques pas à quelle feuille appartiennent les Cells.

    Remplace ton code par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c =  Sheets("Données mensuelles").Range(Sheets("Données mensuelles").Cells(45, Colonne), Sheets("Données mensuelles").Cells(1044, Colonne)).Find(CodeMarque, LookAt:=xlWhole)
    Mais il serait plus propre d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("Données mensuelles")
       Set c =  .Range(.Cells(45, Colonne), .Cells(1044, Colonne)).Find(CodeMarque, LookAt:=xlWhole) 
    End With

  3. #3
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Bonjour,

    A première vue la syntaxe est bonne, il faut donc probablement chercher du côté des valeurs (ColonneCodeMarqueDeb, ColonneCodeMarqueFin et donc Colonne)

    En faisant un pas à pas le problème devrait facilement être identifié.

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Bonjour Fvandermeulen
    C'est là, que le demandeur cherche la raison d'un bug
    je bugue sur un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c = Sheets("Données mensuelles").Range(Cells(45, Colonne), Cells(1044, Colonne)).Find(CodeMarque, LookAt:=xlWhole)
    Et comme le précise clairement Menhir, que je salue : il y aura bug si la feuille active au moment de l'exécution de cette ligne de code n'est pas la feuille "Données Mensuelles"

    La notation Range et la notation Cells sont des notations distinctes d'un objet Range. La seconde impose la spécification de la feuille (si elle n'est pas celle active)

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par unparia Voir le message
    il y aura bug si la feuille active au moment de l'exécution de cette ligne de code n'est pas la feuille "Données Mensuelles"
    Si c'était le cas, le Sheets("Données mensuelles") avant le Range serait inutile.
    Donc la nécessité de le mettre aussi devant les Cells semble logique.

    Il y aurait une autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim CurRange As Range
     
    Set c =  Sheets("Données mensuelles").Range("A45:A1044").Offset(0, ColonneCodeMarqueDeb - 1)
     
    While CurRange.Column <= ColonneCodeMarqueFin
            Set c =  CurRange.Find(CodeMarque, LookAt:=xlWhole)
     
            If Not c Is Nothing Then
                ...
            End If
     
            Set CurRange = CurRange.Offset(0, 70)
    Wend

  6. #6
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour Fvandermeulen
    C'est là, que le demandeur cherche la raison d'un bug

    Et comme le précise clairement Menhir, que je salue : il y aura bug si la feuille active au moment de l'exécution de cette ligne de code n'est pas la feuille "Données Mensuelles"

    La notation Range et la notation Cells sont des notations distinctes d'un objet Range. La seconde impose la spécification de la feuille (si elle n'est pas celle active)
    En effet, je n'ai pas été attentif...désolé pour la pollution du post

  7. #7
    Candidat au Club
    Femme Profil pro
    Controleur de gestion
    Inscrit en
    Janvier 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Controleur de gestion

    Informations forums :
    Inscription : Janvier 2017
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Tu n'indiques pas à quelle feuille appartiennent les Cells.

    Remplace ton code par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c =  Sheets("Données mensuelles").Range(Sheets("Données mensuelles").Cells(45, Colonne), Sheets("Données mensuelles").Cells(1044, Colonne)).Find(CodeMarque, LookAt:=xlWhole)
    Mais il serait plus propre d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("Données mensuelles")
       Set c =  .Range(.Cells(45, Colonne), .Cells(1044, Colonne)).Find(CodeMarque, LookAt:=xlWhole) 
    End With
    Merci beaucoup Menhir,
    tu as solutionné mon pb, je manquais clairement de recul

    le bon code (en effet l'idée est de ne pas activer la feuille "Données mensuelles"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    For Colonne = ColonneCodeMarqueDeb To ColonneCodeMarqueFin Step 70
     
                    With Sheets("Données mensuelles")
                        Set c = .Range(.Cells(45, Colonne), .Cells(1044, Colonne)).Find(CodeMarque, LookAt:=xlWhole)
     
                        If Not c Is Nothing Then
                            FirstAddress = c.Address
                            Do
                                ...
                                Set c = .Range(.Cells(45, Colonne), .Cells(1044, Colonne)).FindNext(c)
                            Loop While Not c Is Nothing And c.Address <> FirstAddress
                        End If
                    End With
     Next Colonne

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

Discussions similaires

  1. [XL-2007] range de colonne variable dans macros vba
    Par Lbn23 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/03/2012, 15h03
  2. [XL-2007] rechercheV avec colonne variable
    Par lokura dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2012, 17h58
  3. GridView UpdateMethod avec colonnes variables
    Par laurent_diep dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/10/2010, 23h26
  4. Syntaxe Range avec une variable pour la colonne
    Par Spykerman dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/06/2008, 13h50
  5. DTS venant d'une table avec colonnes variables
    Par Poussy-Puce dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/08/2007, 23h29

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