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 :

[VBA] Convertir une chaine en Range pour une sélection de colonnes [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 9
    Points
    9
    Par défaut [VBA] Convertir une chaine en Range pour une sélection de colonnes
    Bonjour les internautes,

    Je rencontre une petite difficulté au niveau de mon script VBA qui a pour but de créer une série de graphiques en fonction du nombre de mesures que contient le fichier texte.

    Mon soucis est que je souhaite faire mes propres sélections pour éditer mes graphiques puisque la colonne 'Temps' est tout le temps utilisée. Pour ceci, je concatène des éléments pour obtenir une chaîne de caractères de la forme "C:C,E:E" par exemple. La variable maSelection contient bien l'exemple donné précédemment.
    Ensuite je souhaite donc sélectionner ces colonnes en faisant Range(maSelection).Select ou Columns(maSelection).Select pour éditer mon graphique.

    Cependant, Range(maSelection).Select ou Columns(maSelection).Select donnent une erreur et me sortent de mon programme. Avez-vous une autre méthode pour la sélection de mes colonnes via une chaîne de caractères???

    Merci pour votre aide,

    Aurelangelo

  2. #2
    Membre habitué Avatar de PUARAI
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 191
    Points : 145
    Points
    145
    Par défaut
    Donne moi un exemple

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    Exemple :

    J'ai un fichier texte qui comporte des données sur 5 colonnes et je veux effectuer un graphique en utilisant la colonne C (pour les x) et E (pour les y).
    Donc, je dois en effet sélectionner ces deux colonnes pour pouvoir éditer mon graphique ce qui doit donner quelques choses du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    xl.Columns("C:C,E:E"). select ' pour la sélection des colonnes
    xl.Charts.Add ' pour créer le graphique qui n'est pas un problème
    Cependant pour effectuer la chaine "B:B,D:D", j'utilise un script me permettant de la créer puisque mon fichier peut contenir plus de 5 colonnes (et donc plus de mesures) et la colonne B reste la colonne utilisée pour les abscisses. Donc je pourrais très bien avoir dans ma chaîne de caractères "B:C,D:D" ou "C:C,E:E" ou "C:C,..."
    Pour faire ceci je construis ma chaîne de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim selection as String
    selection = "C:C," & Chr(Asc("A") + (numCol - 1)) & ":" & Chr(Asc("A") + (numCol - 1))    ' la chaîne contient bien un des exemples ci-dessus
    xl.Columns(selection).Select ' sélection des colonnes déterminer par la chaîne ci dessus
    Cependant, mon programme plante toujours au niveau du columns car il ne doit pas accepter ma chaîne selection. Alors si vous avez une idée, je suis totalement preneur ! merci

  4. #4
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour,

    Selection n'est-il pas un mot réservé pour VBA ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    J'ai changé selection en maPlage et j'obtiens le même problème donc ce n'était pas une soucis ...

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Quand j'exécute ton code, j'ai dans selection :

    "C:C,@:@"

    Que veux tu obtenir comme plage ?

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    ça doit être normal si tu as pas un numéro à numCol.
    Mais numCol=4 et tu verras normalement tu auras la même chose que moi.

  8. #8
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Et en remplaçant column par Range
    Perso je n'arrive pas a sélectionner plusieurs colonne avec column mais range ca marche très bien

    En faisant ceci je créé mon graphique sans problème (la création du graphique vien de l'enregistreur de macro c'est un bordel monstre mon fichier test )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    numCol = 5
     
        Charts.Add
        ActiveChart.ChartType = xlXYScatter
        ActiveChart.SetSourceData Source:=Sheets("Feuil2").Range("C:C," & Chr(Asc("A") + (numCol - 1)) & ":" & Chr(Asc("A") + (numCol - 1))), PlotBy:=xlColumns
        ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil2"

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    je comprends vraiment pas puisque je viens de faire la même chose et ça ne fonctionne pas du tout !
    Par contre si je fais un test : Range("C:D") et bien là ça fonctionne parfaitement :s

  10. #10
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Pour selectionner les colonnes la syntaxe :


    Mais numCol=4 et tu verras normalement tu auras la même chose que moi.
    Oups, tu as raison

  11. #11
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Qu'est ce qui ne fonctionne pas du tout?
    Ou est l'erreur?
    Au hasard (j'ai pas trop le choix) je dirais que tu n'as pas d'onglet appelé feuil2

  12. #12
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    je récupère le titre de mon onglet et donc je remplace ton feuil2 par ma variable titre

    et je sais que mon partie graphique fonctionne puisque j'ai essayé en mettant range(C) et des que j'essaie avec ma nouvelle formule ça ne marche pas

  13. #13
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Si range(C:E) fonctionne remplacon le Range(C:C;E:E) par Range(C:E) (D n'est pas un bon exemple )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    numCol = 5
     
        Charts.Add
        ActiveChart.ChartType = xlXYScatter
        ActiveChart.SetSourceData Source:=Sheets("Feuil2").Range("C:" & Chr(Asc("A") + (numCol - 1))), PlotBy:=xlColumns
        ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil2"
    Si ca ne marche pas je ne pourais pas t'aider d'avantage vu que ce code fonctionne très bien chez moi

  14. #14
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    Le range(C:E) n'est pas possible car il va prendre les 3 colonnes en compte et donc faire deux courbes sur le même graphique. Je ne souhaite qu'une courbe par graphique. Merci tout de même pour le coup de main quand même

  15. #15
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Si range(C:E) fonctionne remplacon le Range(C:C;E:E) par Range(C:E) (D n'est pas un bon exemple )
    Je crois que ce n'était qu'une blague

    Les deux points et le D dans les citations donnent un smiley.

    En adaptant le code de Krovax, tout devrait fonctionner.

  16. #16
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    j'avais compris (pour le smileys) mais son code fonctionne mais il ne fait pas ce que je veux. Puisque dans son code, il peut englober plusieurs colonnes donc plusieurs courbes sur un même graphique et j'en souhaite une seule.

    enfin bon si tu veux sélectionner la colonne C et E et pas la D et bien la je suis bloqué

  17. #17
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Ce que je ne comprend pas c'est pourquoi celui là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    numCol = 5
     
        Charts.Add
        ActiveChart.ChartType = xlXYScatter
        ActiveChart.SetSourceData Source:=Sheets("Feuil2").Range("C:C," & Chr(Asc("A") + (numCol - 1)) & ":" & Chr(Asc("A") + (numCol - 1))), PlotBy:=xlColumns
        ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil2"
    ne marche pas
    Chez moi il prend bien la colonne C et la colonne E uniquement

    ca serais possible d'avoir tout ton code de création de graph stp

    ps j'ai beaucoup aimé le Chr(Asc("A") + (numCol - 1)). Jolie trouvaille

  18. #18
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    Voici le code qui bug :

    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
     
    Private Sub graphique(ByVal numCol As Integer)
    '
        With xl
     
            Dim selection As String
            ' selection me permet de faire un point de vérif en mode pas à pas
             selection = "C:C," & Chr(Asc("A") + (numCol - 1)) & ":" & Chr(Asc("A") + (numCol - 1))
             duree = 1.2 * .Cells(4, 4).Value
             titre = .ActiveSheet.Name
             '.Range("C:D").EntireColumn.Select
             '.Columns(selection).Select
             .Charts.Add
             .ActiveChart.ChartType = xlXYScatterSmooth
             .ActiveChart.SetSourceData Source:=.Sheets(titre).Range("C:C," & Chr(Asc("A") + (numCol - 1)) & ":" & Chr(Asc("A") + (numCol - 1))), PlotBy:=xlColumns
             .ActiveChart.Location Where:=xlLocationAsObject, Name:=titre
        End With
    End Sub

  19. #19
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    commence par virer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            Dim selection As String
            ' selection me permet de faire un point de vérif en mode pas à pas
             selection=....
    Ou change le nom de la variable selection
    Selection est un mot protégé a ne pas utilisé comme variable (question de principe )

    Ensuite dit nous à quel moment du code il plante ou si c'est la compilation qui plante

    Chez moi ce code marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Workbooks("test.xls")
             .Charts.Add
             .ActiveChart.ChartType = xlXYScatterSmooth
             .ActiveChart.SetSourceData Source:=.Sheets("feuil2").Range("C:C," & Chr(Asc("A") + (numCol - 1)) & ":" & Chr(Asc("A") + (numCol - 1))), PlotBy:=xlColumns
             .ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil2"
        End With
    End Sub
    Parcontre je ne comprend pas ce que représente xl chez toi

  20. #20
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    En fait, xl est un objet que j'instancie dès le départ de mon application car ma macro se lance sur l'appui d'un bouton présent sur une feuille excel.

    Ensuite, je demande le fichier Texte que l'utilisateur veut ouvrir et donc ça m'ouvre une seconde fenêtre excel d'où l'objet xl qui me permet de travailler sur cette fenêtre.


    Sinon il plante au niveau de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .ActiveChart.SetSourceData Source:=.Sheets("feuil2").Range("C:C," & Chr(Asc("A") + (numCol - 1)) & ":" & Chr(Asc("A") + (numCol - 1))), PlotBy:=xlColumns
    J'ai l'impression que c'est ma formule qu'il accepte pas car si je mets Range(C:D) en dur et bien aucun soucis !!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/08/2013, 21h57
  2. Réponses: 3
    Dernier message: 22/08/2010, 17h40
  3. erreur pour une insertion d'une chaine de caractere dans une cellule
    Par amel95140 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2006, 09h09
  4. Et pour une chaine ?
    Par mick030118 dans le forum C
    Réponses: 7
    Dernier message: 12/03/2006, 11h19
  5. result: chaine de caractère pour une DLL
    Par Sephiroth Lune dans le forum Langage
    Réponses: 7
    Dernier message: 27/07/2004, 23h05

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