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 :

Probleme code Vba graphique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 30
    Par défaut Probleme code Vba graphique
    Bonjour,

    j'essaie de réaliser une macro pour faire un graph selon les horaires indiqués dans un tableau. Je pense avoir bien avancer mais quand je la lance j'ai un message d'erreur incompatibilité de type. Pouvez vous m'aider ?
    j'ai joint un exemple de fichier.
    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Sub Graphique()
    Dim cDebut As Range, cFin As Range, Plage As Range
    Dim Debut As Date, Fin As Date
    Dim Ch As Chart
    Dim i As Long
     
    Application.ScreenUpdating = False
    With ThisWorkbook.Worksheets("Données analyseurs")
        Debut = .Range("D3")
        Fin = .Range("E3")
    End With
     
    With ThisWorkbook.Worksheets("données corrigées")
        Set cDebut = .Columns(2).Find(Debut, LookIn:=xlFormulas, LookAt:=xlWhole)
        If Not cDebut Is Nothing Then
            Set cFin = .Columns(2).Find(Fin, LookIn:=xlFormulas, LookAt:=xlWhole)
            If Not cFin Is Nothing Then
                Set Plage = cDebut.Resize(cFin.Row - cDebut.Row + 1, 14)
                Set cDebut = Nothing
                Set cFin = Nothing
            End If
        End If
    End With
     
    If Not Plage Is Nothing Then
        Set Ch = ThisWorkbook.Charts.Add
        Ch.ChartType = xlXYScatterLinesNoMarkers
     
        For i = 2 To 7                               'adapte
            With Ch.SeriesCollection.NewSeries
                .Name = ThisWorkbook.Worksheets("données corrigées").Cells(10, i + 2)
                .Values = Plage.Offset(0, i).Resize(, 1)
                .XValues = Plage.Resize(, 1)
            End With
        Next i
        Set Ch = Nothing
        Set Plage = Nothing
    End If
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 30
    Par défaut
    Merci,
    je viens de l'essayer ça fonctionne sur le fichier exemple que j'ai fourni mais pas sur mon fichier réel, on dirai que l'heure n'est pas trouvé. Peut être es ce parce que la colonne dans laquelle on recheche l'heure fait référence à une autre colonne d'une autre feuille? ou parce que les autes colonnes sont remplies avec des formules faisant référence à d'autres feuilles? Malheureusement je ne peut pas vous joindre le fichier original car il est trop volumineux.
    Avez vous des hypothèses ?

    voilà j'ai réussi à réduire mon fichier original pou le joindre
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    La colonne B contient des valeurs de type Date au format 08:19:22.

    dont la valeur réelle est un nombre à virgule flottante en double précision. Précision qui n'est pas parfaite, ce qui fait que la fonction FIND et la fonction MATCH ne peuvent fonctionner.

    Je te suggère, si c'est possible, d'utiliser des formules pour trouver les valeurs Début et FIN.

    Exemple :

    Sur la feuille Données corrigées
    en I10 entre la formule
    =EQUIV('Données analyseurs'!D3;B:B)

    en J10 entre la formule
    =EQUIV('Données analyseurs'!E3;B:B)

    Dans la Sub Graphique()

    remplace la section FIND par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    LigneDebut = ThisWorkbook.Worksheets("données corrigées").Range("I10").Value
     
    LigneFin = ThisWorkbook.Worksheets("données corrigées").Range("J10").Value
     
    If Not IsError(LigneDebut) Or IsError(LigneFin) Then
     
     Set cDebut = ThisWorkbook.Worksheets("données corrigées").Cells(LigneDebut, "B")
     
     Set cFin = ThisWorkbook.Worksheets("données corrigées").Cells(LigneFin, "B")
     
      Set Plage = cDebut.Resize(cFin.Row - cDebut.Row + 1, 14)
    End If

    Cordialement

    Docmarti

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 30
    Par défaut
    Merci la solution EQUIV fonctionne tres bien par contre pour les graphiques avec les lignes de 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Sub Graphique_essai1()
    Dim cDebut1 As Range, cFin1 As Range, Plage1 As Range
    Dim LigneDebut1 As Long, LigneFin1 As Long
    Dim Ch1 As Chart
    Dim Ch2 As Chart
     
    Application.ScreenUpdating = False
        LigneDebut1 = ThisWorkbook.Worksheets("Données corrigées").Range("P5").Value
        LigneFin1 = ThisWorkbook.Worksheets("Données corrigées").Range("Q5").Value
     
    With ThisWorkbook.Worksheets("données corrigées")
        If Not IsError(LigneDebut1) Or IsError(LigneFin1) Then
         Set cDebut1 = .Cells(LigneDebut1, "B")
         Set cFin1 = .Cells(LigneFin1, "B")
        Set Plage1 = cDebut1.Resize(cFin1.Row - cDebut1.Row + 1, 1)
        End If
    End With
     
    If Not Plage1 Is Nothing Then
        Set Ch1 = ThisWorkbook.Charts.Add
        Ch1.ChartType = xlXYScatterLinesNoMarkers
     
             With Ch1.SeriesCollection.NewSeries
                .Name = ThisWorkbook.Worksheets("données corrigées").Cells(10, 5)
                .Values = Plage1.Offset(0, 3).Resize(, 1)
                .XValues = Plage1.Offset(0, -1).Resize(, 1)
             End With
             With Ch1.SeriesCollection.NewSeries
                .Name = ThisWorkbook.Worksheets("données corrigées").Cells(10, 6)
                .Values = Plage1.Offset(0, 4).Resize(, 1)
                .XValues = Plage1.Offset(0, -1).Resize(, 1)
             End With
     
        Set Ch2 = ThisWorkbook.Charts.Add
        Ch2.ChartType = xlXYScatterLinesNoMarkers
     
             With Ch2.SeriesCollection.NewSeries
                .Name = ThisWorkbook.Worksheets("données corrigées").Cells(10, 7)
                .Values = Plage1.Offset(0, 5).Resize(, 1)
                .XValues = Plage1.Offset(0, -1).Resize(, 1)
             End With
             With Ch2.SeriesCollection.NewSeries
                .Name = ThisWorkbook.Worksheets("données corrigées").Cells(10, 8)
                .Values = Plage1.Offset(0, 6).Resize(, 1)
                .XValues = Plage1.Offset(0, -1).Resize(, 1)
             End With
     
        Set Ch = Nothing
        Set Plage = Nothing
    End If
    End Sub
    j'obtiens pour le premier graph plus de séries que les deux demandés alors que le deuxième j'obtiens bien uniquement mes deux séries demandés.
    Comment es-ce possible?

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

Discussions similaires

  1. probleme code vba
    Par jpr93 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 22/03/2010, 10h42
  2. Problématique sur Code VBA graphique
    Par karim19 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/12/2009, 18h54
  3. [XL-2003] Probleme code VBA
    Par fullmetalknet dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/11/2009, 10h30
  4. Probleme code vba
    Par alex38 dans le forum Access
    Réponses: 6
    Dernier message: 18/04/2006, 12h10
  5. probleme code vba ne s'execute pas apres instruction sql
    Par arnogef dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 29/12/2005, 12h34

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