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
Membre à l'essai
 
Homme Philippe
technicien
Inscription : janvier 2010
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 48
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : technicien
Secteur : Santé

Informations forums :
Inscription : janvier 2010
Messages : 54
Points : 23
Points : 23
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 00
Vieux 07/02/2010, 13h40   #2
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 431
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 31
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 431
Points : 4 042
Points : 4 042
Envoyer un message via MSN à Qwazerty
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 :
1
2
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 monde dans lequel on vit
HammerFest
Score PowerBall Gyroscope Green : 11847
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2010, 14h07   #3
Membre à l'essai
 
Homme Philippe
technicien
Inscription : janvier 2010
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 48
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : technicien
Secteur : Santé

Informations forums :
Inscription : janvier 2010
Messages : 54
Points : 23
Points : 23
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

Dernière modification par AlainTech ; 25/04/2010 à 09h35. Motif: Suppression de la citation
tremens est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2010, 19h37   #4
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 431
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 31
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 431
Points : 4 042
Points : 4 042
Envoyer un message via MSN à Qwazerty
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 monde dans lequel on vit
HammerFest
Score PowerBall Gyroscope Green : 11847
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2010, 21h18   #5
Membre à l'essai
 
Homme Philippe
technicien
Inscription : janvier 2010
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 48
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : technicien
Secteur : Santé

Informations forums :
Inscription : janvier 2010
Messages : 54
Points : 23
Points : 23
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

Dernière modification par AlainTech ; 25/04/2010 à 09h36. Motif: Suppression de la citation
tremens est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2010, 22h45   #6
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 431
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 31
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 431
Points : 4 042
Points : 4 042
Envoyer un message via MSN à Qwazerty
Salut
Alors voila un bout de code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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 :
1
2
3
4
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 monde dans lequel on vit
HammerFest
Score PowerBall Gyroscope Green : 11847
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2010, 23h10   #7
Membre à l'essai
 
Homme Philippe
technicien
Inscription : janvier 2010
Messages : 54
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 48
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : technicien
Secteur : Santé

Informations forums :
Inscription : janvier 2010
Messages : 54
Points : 23
Points : 23
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 00
Vieux 08/02/2010, 06h46   #8
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 431
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 31
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 431
Points : 4 042
Points : 4 042
Envoyer un message via MSN à Qwazerty
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 monde dans lequel on vit
HammerFest
Score PowerBall Gyroscope Green : 11847
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 13h05.


 
 
 
 
Partenaires

Hébergement Web