Aurelangelo
Messages postés12Date d'inscriptionvendredi 19 mai 2006StatutMembreDernière intervention14 avril 2009
-
8 avril 2009 à 15:51
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
14 avril 2009 à 15:51
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.
Ensuite je souhaite donc sélectionner ces colonnes en faisant Range(maSelection).Select pour éditer mon graphique.
Cependant, Range(maSelection).Select donne une erreur et sort de mon programme car ce n'est surement pas la bonne méthode. Avez-vous une autre méthode ???
Aurelangelo
Messages postés12Date d'inscriptionvendredi 19 mai 2006StatutMembreDernière intervention14 avril 2009 8 avril 2009 à 16:18
ma variable maSelection contient "C:C,E:E"
donc au niveau du range j'ai : Range("C:C,E:E").Select et c'est ça qui ne marche pas ! et je ne vois pas pourquoi
Aurelangelo
Messages postés12Date d'inscriptionvendredi 19 mai 2006StatutMembreDernière intervention14 avril 2009 9 avril 2009 à 08:52
Voila comment je construis ma chaine :
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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 avril 2009 à 13:14
Re
Ah bah voilà, c'est mieux quand on déploie le vrai code :
Ta variable s'appelle "selection" qui est un mot clé de VB --> Incompatible
Appelle la maSelection, comme écrit dans tes exemples précédents
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 avril 2009 à 15:17
Fais une chose :
Ouvre un nouveau classeur Excel et copie/colle le code que j'ai mis dans ma deuxième réponse.
Associe ce code à un bouton que tu places sur ta feuille et clique dessus
Tu verras que cela fonctionne très bien.
Donc, il y a fort à parier que le problème est dans ton code.
Si cela t'ai possible, copie/colle nous ton vrai code (pas un roman, juste la Sub
Jette un oeil voir si tu n'aurais pas dimensionné une variable en type Private ou Public qui utiliserait un mot réservé du langage, cela peut avoir des conséquences bizarr, des fois; d'où l'intérêt d'utiliser une norme d'appellation des variables et fonctions dite "à la hongroise".
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Aurelangelo
Messages postés12Date d'inscriptionvendredi 19 mai 2006StatutMembreDernière intervention14 avril 2009 9 avril 2009 à 15:39
Oui en effet, ça fonctionne très bien tant que je suis sur la même fenêtre.
Par contre, mon programme ouvre un fichier texte (demandé sur clic bouton d'une première fenêtre excel) dans une autre fenêtre Excel et là ça doit être mon code qui merdouille un poil alors je le poste en partie :
Dim chemin As String ' chemin du fichier
Dim nomfichier As String ' nom du fichier
Dim xl As Excel.Application ' application excel
Dim xlsClass As Excel.Workbook ' classeur excel
Dim xlsFeuille As Excel.Worksheet ' feuille excel
Dim colonne As Integer
Sub TraiterDonnees_Clic()
' ouverture du fichier de mesures
Set xl = CreateObject("Excel.Application")
On Error Resume Next
chemin = xl.GetOpenFilename
xl.Workbooks.OpenText (chemin)
' récupération du nom du fichier
Dim TabSplit() As String
TabSplit = Split(chemin, "")
nomfichier = TabSplit(UBound(TabSplit))
'affichage du résultat
xl.Visible = True
' dépouillement d'un essai puissance
Call depouille_un_essai_puissance
On Error GoTo 0
End Sub
Private Sub depouille_un_essai_puissance()
Call Depouillement
Call SousEchantillonnage
Call miseenforme
For n = 4 To colonne
Call graphique(n)
Next n
End Sub
Private Sub graphique(ByVal numCol As Integer)
'
With xl
Dim maSelection As String
maSelection = "C:C," & Chr(Asc("A") + (numCol - 1)) & ":" & Chr(Asc("A") + (numCol - 1))
duree = 1.2 * .Cells(4, 4).Value
titre = .ActiveSheet.Name
.Range(maSelection).Select
'.Columns(selection).Select
.Charts.Add
.ActiveChart.ChartType = xlXYScatterSmooth
.ActiveChart.SetSourceData Source:=.Sheets(titre).Range(maSelection), PlotBy:=xlColumns
.ActiveChart.Location Where:=xlLocationAsObject, Name:=titre
With .ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = titre
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Temps(S)"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Puissance (kW)"
End With
End With
End Sub
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 avril 2009 à 16:02
Bah comme je te le disait lors de ma 3ème réponse, il faut bien sûr s'assurer que l'ordre sera bien donné à la bonne feuille.
Une sélection de la feuille est facile à faire, non ?
même si la feuille appartient à un autre classeur, il suffit de respecter la syntaxe
Mais de toute façon, la macro ne marcherait pas, certes, mais elle n'engendrerait pas d'erreur.
Juste avant cette ligne qui pose problème
.Range(maSelection).Select
peux-tu ajouter
Debug.Print Titre
Debug.Print maSelection
Vérifie que la feuille actuellement sélectée est bien la bonne + être sûr et certain que ta variable maSelection n'a pas d'erreur de syntaxe
As-tu demander la déclaration obligatoire des variables dans les options ?
Cela ajoute Option Explicit en tête de toute nouvelle page de code (ajoute le à la main pour les pages de codes existantes)
Je te le recommande fortement pour palier aux problème des erreurs de saisie bêtes et méchantes
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Aurelangelo
Messages postés12Date d'inscriptionvendredi 19 mai 2006StatutMembreDernière intervention14 avril 2009 9 avril 2009 à 16:19
Je viens d'effectuer ce que tu viens de dire et toujours la même chose.
Erreur au niveau du .Range(maSelection).Select dans la fonction graphique alors que la variable maSelection contient ce qu'il faut (C:C,D:D) et que la fenêtre active est bien celle desirée.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 avril 2009 à 18:42
Détail : Si maSelection contient (C:C,D:D) il y a un problème : parenthèses en trop !
Désolé, mais je suis à court d'idée ... à moins que :
Le With x1 s'adresse à l'application et pas à la feuille !
Peut-être que .ActiveSheet.Range(... marcherait mieux !
lol, tellement gros qui'on ne l'a pas vu
En plus, tu aurais dû t'en apercevoir parce que l'intellisense ne doit pas fonctionner puisque c'est pas le bon objet.
Aurelangelo
Messages postés12Date d'inscriptionvendredi 19 mai 2006StatutMembreDernière intervention14 avril 2009 10 avril 2009 à 00:20
Précision :
maSelection contient la chaine "C:C,D:D"
j'utilise xl dans toute ma macro et ça fonctionne parfaitement sauf à cet endroit ou je fais une sélection des colonnes
Aurelangelo
Messages postés12Date d'inscriptionvendredi 19 mai 2006StatutMembreDernière intervention14 avril 2009 14 avril 2009 à 11:38
Je relance un peu le sujet car j'en suis toujours au même point !
Je veux obtenir un graphique contenant une courbe de chaque mesure
contenue dans mon fichier texte (courbe en fonction du temps).
Dans mes courbes, la colonne C est toujours sélectionnée et l'autre est soit la D, la E, ... (selon le nombre de mesures).
Je récapitule mon projet et les étapes successives à faire :
- j'ouvre un fichier .xls qui contient ma macro et un bouton
- Au clic sur le bouton, ma macro s'exécute et demande un fichier à analyser
- le fichier choisi, une autre fenêtre excel s'ouvre avec les données
- Il s'en suit toute une série de traitement (échantillonnage, ajout de colonnes, mise en forme, ...)
- le dernier traitement est l'édition des graphiques (une courbe par graphique) ==> A partir de cette étape, je rencontre un problème de sélection de colonnes.
Diverses solutions testées :
- J'ai regardé le code créé par l'éditeur de macros et adapter à mon cas ==> code erreur sur la sélection des plages
- Essayer en utilisant une sélection par défaut, par exemple sélection des colonnes C et D soit C:D en excel et là : OK
- Essayer en utilisant une sélection par défaut, par exemple sélection des colonnes C et D soit C:C,D:D en excel et là : Ne fonctionne pas, pourtant l'enregistreur de macro préconise cette solution
Alors je cherche pourquoi ça ne veut pas alors que dans un cas, cela fonctionne !
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 14 avril 2009 à 14:05
Re
J'ai relu tous nos échanges, mais je ne trouve pas trace de l'erreur elle même : que dit-elle ? (n° et texte)
As-tu un "ption Explicit" en haut de chacune de tes pages de code ? (voir options vb "déclaration obligatoire de toutes les variables")