Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 07/02/2010, 11h06   #1 (permalink)
Invité régulier
 
Nom : Philippe
Date d'inscription: janvier 2010
Messages: 13
Par défaut sélection séries pour graphique

Bonjour,

je sollicite votre aide pour une ligne de code, cela doit être simple, mais à force j'ai des peaux de sauss dans les yeux...!
je veux sélectionner un tableau pour faire un graphique. je ne connais le nombre de ligne et le nombre de colonne. Je pense avoir trouvé le code pour trouver ces 2 nombres, reste la sélection des cellules pour le graphique...et là je plante...

voici mon bout de code:

Code :
Dim ligne As Long
Dim Feuil1 As Worksheet
  Dim i As Integer
Dim compt As Integer
Dim ncol As Integer
 
'détection nombre de colonnes
 
 
compt = 0
Cells(13, 6).Select
For i = 7 To 11
If Cells(13, i).Value <> "" Then
compt = compt + 1
End If
Next i
ncol = compt + 6
 
'detection nombre lignes
    ligne = Worksheets("Feuil1").Range("A35536").End(xlUp).Row
    MsgBox Worksheets("Feuil1").Cells(ligne, 1)
 
    Range(Cells(13, 6), Cells(ligne, ncol)).Select
    Charts.Add
    ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
    ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range(Cells(13, 6), Cells(ligne, ncol)).Select, PlotBy _
        :=xlColumns
 
Bon, je pense que mon code n'est pas académique, mais je débute...je vous suis tout ouï.

Merci

Tremens

Dernière modification par Philippe JOCHMANS ; 07/02/2010 à 15h36. Motif: Ajout des balises codes (sélection du code + bouton # dans la fenêtre de rédaction des messages)
tremens est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/02/2010, 13h40   #2 (permalink)
Membre Expert
 
Avatar de Qwazerty
 
Date d'inscription: avril 2002
Localisation: (03) - Allier - Chez les fous ^^
Âge: 29
Messages: 1 499
Envoyer un message via MSN à Qwazerty
Par défaut

Salut
En regle general il faut eviter l'utilisation des "select", ils sont trés souvent superflu, une cellule n'a pas besoin d'etre selectionnée pour qu'on modifie sa valeur.

Je pense que l'erreur dans ton code se situe ici
Code :
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range(Cells(13, 6), Cells(ligne, ncol)).Select, PlotBy _
        :=xlColumns
Le .Select est en trop, la sélection, si besoin de sélectionner il y a, voir remarque au dessus, doit se faire avant ou après l'appel a une function, mais jamais pendant.

Une autre remarque tu testes tes colonne une a une est compte le nombre de cellule non vide dans une boucle, mais imagine qu'une cellule soit vide, tu va compter seulement les cellule non vide et faire ta sélection, donc tu vas décaler ta sélection d'une colonne et perdre les données contenu dans la dernière colonne de ton tableau.
On peut donc supposer que les cellules ne sont jamais vide? si c'est le cas ton code fonctionne mais du coup pourquoi ne pas utiliser End(xlleft) comme tu as fait pour les lignes?

A++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le méchant Qwaz sur Msn ... inutile de me rajouter sur msn pour que je fasse votre boulot (les concernés sont au courant, les autres relax )
Le monde dans lequel on vit
HammerFest
Score PowerBall Gyroscope Green : 11847
Qwazerty est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 07/02/2010, 14h07   #3 (permalink)
Invité régulier
 
Nom : Philippe
Date d'inscription: janvier 2010
Messages: 13
Par défaut

Citation:
Envoyé par Qwazerty Voir le message
Salut
En regle general il faut eviter l'utilisation des "select", ils sont trés souvent superflu, une cellule n'a pas besoin d'etre selectionnée pour qu'on modifie sa valeur.

Je pense que l'erreur dans ton code se situe ici
Code :
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range(Cells(13, 6), Cells(ligne, ncol)).Select, PlotBy _
        :=xlColumns
Le .Select est en trop, la sélection, si besoin de sélectionner il y a, voir remarque au dessus, doit se faire avant ou après l'appel a une function, mais jamais pendant.

Une autre remarque tu testes tes colonne une a une est compte le nombre de cellule non vide dans une boucle, mais imagine qu'une cellule soit vide, tu va compter seulement les cellule non vide et faire ta sélection, donc tu vas décaler ta sélection d'une colonne et perdre les données contenu dans la dernière colonne de ton tableau.
On peut donc supposer que les cellules ne sont jamais vide? si c'est le cas ton code fonctionne mais du coup pourquoi ne pas utiliser End(xlleft) comme tu as fait pour les lignes?

A++
Qwaz
Merci Qwazerty de me venir en aide,

J'ai mis cette boucle pour connaitre le nombre de voies d'acquisition. ce nombre varie de 1 à 5 et l'appli qui me permet de récupérer les valeurs pour les exporter en fichiers excel, enregistre les voies de façon continu (colonne) meme si par exemple j'ai la voie 0 et la voie 4 connectées.
je viens de tester la macro sans select, car plus haut comme tu l'a écris j'avais déja sélectionné la zone pour le graphique...mais cela ne marche pas!
enfin pas comme je le veux. Il me crée un graphique dans une feuille graphique or je le veux dans la feuille de calcul.

Quel autre moyen ai-je pour sélectionner des series?

Tremens
tremens est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/02/2010, 19h37   #4 (permalink)
Membre Expert
 
Avatar de Qwazerty
 
Date d'inscription: avril 2002
Localisation: (03) - Allier - Chez les fous ^^
Âge: 29
Messages: 1 499
Envoyer un message via MSN à Qwazerty
Par défaut

Salut et bienvenu au fait
Je n'ai pas Excel sous la main actuellement, le plus simple pour avoir le résulta que tu recherches c'est d'enregistrer une macro, tu lances l'enregistrement, tu sélectionnes ta plage de données et crées ton graphique.
Ensuite tu regardes le code généré par Excel pour créer le graphique associé aux données.
A++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le méchant Qwaz sur Msn ... inutile de me rajouter sur msn pour que je fasse votre boulot (les concernés sont au courant, les autres relax )
Le monde dans lequel on vit
HammerFest
Score PowerBall Gyroscope Green : 11847
Qwazerty est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 07/02/2010, 21h18   #5 (permalink)
Invité régulier
 
Nom : Philippe
Date d'inscription: janvier 2010
Messages: 13
Par défaut

Citation:
Envoyé par Qwazerty Voir le message
Salut et bienvenu au fait
Je n'ai pas Excel sous la main actuellement, le plus simple pour avoir le résulta que tu recherches c'est d'enregistrer une macro, tu lances l'enregistrement, tu sélectionnes ta plage de données et crées ton graphique.
Ensuite tu regardes le code généré par Excel pour créer le graphique associé aux données.
A++
Qwaz
merci,

J'ai commencé par la, ca marche pour un nombre de ligne donné, en revanche ça se corse quand je veux mettre une variable à la place du nombre de ligne.

je continu de cherche, mais j'en perds mon latin...

Sera-t-il possible que je vous donne ma macro, une fois fini, pour avoir votre avis et me donner les points à améliorer?

Tremens
tremens est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/02/2010, 22h45   #6 (permalink)
Membre Expert
 
Avatar de Qwazerty
 
Date d'inscription: avril 2002
Localisation: (03) - Allier - Chez les fous ^^
Âge: 29
Messages: 1 499
Envoyer un message via MSN à Qwazerty
Par défaut

Salut
Alors voila un bout de code
Code :
Sub test()
Dim ligne As Long
'Dim Feuil1 As Worksheet 'Surtout pas! Feuil1 est déjà déclaré puisqu'il existe dans ton classeur Excel
'Dim i As Integer
'Dim compt As Integer
Dim ncol As Integer
Dim Sh As Worksheet
'détection nombre de colonnes
 
 
'compt = 0
'Cells(13, 6).Select
'For i = 7 To 11
'If Cells(13, i).Value <> "" Then
'compt = compt + 1
'End If
'Next i
'ncol = compt + 6
 
Set Sh = Worksheets("Feuil1") 'permet de faire reference a la feuille sans avoir a tout taper
 
'detection nombre lignes & colonnes
ncol = Sh.Cells(13, Columns.Count).End(xlToLeft).Column
ligne = Sh.Cells(Rows.Count, "F").End(xlUp).Row 'je suppose que tu testes en colonne F (6)
 
'MsgBox Sh.Cells(ligne, 1)
 
'Range(Cells(13, 6), Cells(ligne, ncol)).Select
With Charts.Add
    .ChartType = xlXYScatterSmoothNoMarkers
    'penser à faire reference à la feuille à l'interieur de Range()
    .SetSourceData Source:=Sh.Range("F13", Sh.Cells(ligne, ncol)), PlotBy:=xlColumns
    .Location Where:=xlLocationAsObject, Name:="Feuil1"
End With
End Sub
 
 
Je l'ai retravaillé un peu
Attention, Feuil1 n'a pas besoin d'être déclarée, puisque celle ci existe dans ton classeur.
Chart.Location te permet de placer ton graphic ou tu le souhaites.
Quand tu recherches la dernière ligne non vide, tu te placé sur la colonne A, tes données ne commence t'elle pas en colonne F? j'ai pris la liberté de me placer en F, a toi de modifier au besoin.
J'ai pris en compte la dernière cellule non vide de la ligne 13 pour avoir le nombre de colonnes utilisées.
Il est preferable de faire reference a la feuille dans le corp de la "funtion" Range()
Code :
Feuil.Range(cells(r,c),cells(r2,c2))
Feuil.Range(Feuil.cells(r,c),Feuil.cells(r2,c2))
'Dans ce cas encore mieux
Feuil.Range("F13",,Feuil.cells(r2,c2))
 
A++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le méchant Qwaz sur Msn ... inutile de me rajouter sur msn pour que je fasse votre boulot (les concernés sont au courant, les autres relax )
Le monde dans lequel on vit
HammerFest
Score PowerBall Gyroscope Green : 11847
Qwazerty est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 07/02/2010, 23h10   #7 (permalink)
Invité régulier
 
Nom : Philippe
Date d'inscription: janvier 2010
Messages: 13
Par défaut

J'ai bidouillez tout l'après midi, résultat nada (normal) si ce n'ai un mal de crane...
bravo pour le code un peu travaillé , il marche à merveille...je mesure le travail qui me reste à faire pour en arriver la.

je vais m'en servir pour apprendre...

le seul hic avec la recherche de la dernière colonne, c'est qu'en AW, j'ai une liste ...je la déplacerai...

Je réitère ma proposition pour vous faire par de mon code final pour avoir votre avis et me donner les points à améliorer?

Bonne nuit

Merci encore

Tremens
tremens est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/02/2010, 06h46   #8 (permalink)
Membre Expert
 
Avatar de Qwazerty
 
Date d'inscription: avril 2002
Localisation: (03) - Allier - Chez les fous ^^
Âge: 29
Messages: 1 499
Envoyer un message via MSN à Qwazerty
Par défaut

Salut
Bien sur nous serons toujours disponible pour corrigé ou améliorer un code, c'est une des raisons de vivre du forum, pour ma part (et je doute etre le seul) je préfère corriger un code qu'une personne a eu du mal a faire, qu'avoir un post qui me demande du code tout cuit.

Pour ton histoire de colonne modifie cette ligne
Code :
ncol = Sh.Cells(13, "AV").End(xlToLeft).Column
comme ça tu n'auras rien a déplacer

Si ton problème est résolu, n'oublie pas le tag
A++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le méchant Qwaz sur Msn ... inutile de me rajouter sur msn pour que je fasse votre boulot (les concernés sont au courant, les autres relax )
Le monde dans lequel on vit
HammerFest
Score PowerBall Gyroscope Green : 11847
Qwazerty est actuellement connecté   Envoyer un message privé Réponse avec citation
NEWS EXCELF.A.Q EXCELTUTORIELS EXCELSOURCES EXCELOUTILS EXCELLIVRES EXCELOFFICE 2010

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 23h31.


Vos questions techniques : forum d'entraide Excel - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.