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-E]Problème Variable/Graphique


Sujet :

Macros et VBA Excel

  1. #21
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 130
    Points : 166
    Points
    166
    Par défaut
    Je viens de tester tes lignes de code et pas de pb !!
    Quel sont les messages d'erreur ?
    Parce que là je vois pas ?
    Ou est placé ton code ?
    - dans un module
    - dans le code d'une feuille ?
    - dans une userform ?
    Bonne nuit
    @+

  2. #22
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par 47-47
    La méthode "Cells" de l'objet "_Global" a échoué
    avec l'erreur d'exécution 1004... et d'une fois à l'autre, ca fonctionne... ca fonctionne pas... ca fonctionne pas, mais sur un autre truc... (dont un rows)
    quand tu utilise Cells "tous seul " , sans rien devant ... celle-ci porte sur la feuille excel active... et si la feuille excel est un graphique ... tu as erreur ... !
    active la feuille concerné... avant...

  3. #23
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Rebonjour tout le monde !

    Bon, vu que le code en lui-même semble bon, voici le code de toute la macro... à nouveau, je vais essayer de trouver les endroits ou plante le code et y mettre des **...

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    Sub Nouveau_client()
     
    Sheets(2).Select
     
    a1 = "A1"
     
    r = 1
    c = 1
     
    **While Cells(r, c) <> ""**
     
        r = r + 1
     
    Wend
     
    Cells(1, 5).Value = r
    Cells(2, 5).Value = "C"
    Cells(3, 5).FormulaR1C1 = "=CONCATENATE(r[-1]c,r[-2]c)"
     
    a2 = Cells(3, 5).Value
     
    Cells(2, 5).Value = "B"
    Cells(3, 5).FormulaR1C1 = "=CONCATENATE(r[-1]c,r[-2]c)"
     
    a21 = Cells(3, 5).Value
     
    Cells(2, 5).Value = "A"
    Cells(3, 5).FormulaR1C1 = "=CONCATENATE(r[-1]c,r[-2]c)"
     
    a3 = Cells(3, 5).Value
     
    Cells(1, 5).Value = r - 1
    Cells(3, 5).FormulaR1C1 = "=CONCATENATE(r[-1]c,r[-2]c)"
     
    a4 = Cells(3, 5).Value
     
    Cells(1, 5).Value = a1
    Cells(2, 5).Value = a2
    Cells(3, 5).Value = ":"
    Cells(4, 5).FormulaR1C1 = "=CONCATENATE(r[-3]c,r[-1]c,r[-2]c)"
     
    plage = Cells(4, 5).Value
     
    Cells(1, 5).Value = a4
    Cells(2, 5).Value = a3
    Cells(4, 5).FormulaR1C1 = "=CONCATENATE(r[-3]c,r[-1]c,r[-2]c)"
     
    plage1 = Cells(4, 5).Value
     
    Cells(1, 5).Value = a1
    Cells(2, 5).Value = a21
    Cells(4, 5).FormulaR1C1 = "=CONCATENATE(r[-3]c,r[-1]c,r[-2]c)"
     
    plagegraph1 = Cells(4, 5).Value
     
    Range("E1:E4").Delete
     
    For i = 2 To Sheets.Count
     
        Worksheets(i).Activate
     
        Rows(r).Insert shift:=xlDown
     
        Cells(r - 1, 1).Select
        Selection.AutoFill Destination:=Range(plage1), Type:=xlFillDefault
     
        Range(plage).Select
        Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
     
        ActiveSheet.ChartObjects("Graphique 1").Activate
        ActiveChart.ChartArea.Select
        ActiveChart.SetSourceData Source:=ActiveSheet.Range(plagegraph1), _
            PlotBy:=xlColumns
     
    Next i
     
    Sheets(1).Select
     
    Cells(1, 8).Value = r
    Cells(2, 8).Value = "F"
    Cells(3, 8).FormulaR1C1 = "=CONCATENATE(r[-1]c,r[-2]c)"
     
    a2 = Cells(3, 8).Value
     
    Cells(1, 8).Value = a1
    Cells(2, 8).Value = a2
    Cells(3, 8).Value = ":"
    Cells(4, 8).FormulaR1C1 = "=CONCATENATE(r[-3]c,r[-1]c,r[-2]c)"
     
    plage = Cells(4, 8).Value
     
    Range("H1:H4").Delete
     
    Range(plage).Select
    Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
     
    Sheets(2).Select
     
    **Cells(1, 5).Value = r**
    Cells(2, 5).Value = "A"
    Cells(3, 5).FormulaR1C1 = "=CONCATENATE(r[-1]c,r[-2]c)"
     
    a1 = "A2"
    a2 = Cells(3, 5).Value
     
    Cells(1, 5).Value = a1
    Cells(2, 5).Value = a2
    Cells(3, 5).Value = ":"
    Cells(4, 5).FormulaR1C1 = "=CONCATENATE(r[-3]c,r[-1]c,r[-2]c)"
     
    plage = Cells(4, 5).Value
     
    Range("E1:E4").Delete
     
    For i = 2 To Sheets.Count
     
        Worksheets(i).Activate
     
        Range(plage).Select
        Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
     
    Next i
     
    End Sub
    Donc sur les 2, je sélectionne la feuille juste avant... donc à n'y plus rien comprendre...

  4. #24
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par 47-47
    Donc sur les 2, je sélectionne la feuille juste avant... donc à n'y plus rien comprendre...
    je n'ai pas dis sélectionner ... mais Activer

  5. #25
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    et bien... même en activant les feuilles, j'ai encore des erreurs...

  6. #26
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 130
    Points : 166
    Points
    166
    Par défaut
    Bonsoir 47-47
    j'ai bien compris ton code qui sert à construire des adresses
    Personellement je ne procède pas de cette façon car c'est très lourd d'écrire dans des cellules puis de concatener le tout etc...

    je me sert de la propriété CurrentRegion qui prend tout le tableau situé autour de la selection.
    Attention pas de ligne vide dans le tableau

    Donc, dans ton cas, A1.currentRegion me delimite le tableau en A1:B10 pour Feuil2
    Ensuite tu te sert de la propiété offset (si besoin est !!) pour determiner un point de départ
    et de la propriété Resize pour determiner le nombre de lignes et de colonnes.
    et pour finir la propriété Address pour avoir les coordonnées de la plage définie.

    Ex : pour que a2 = "C22" avec A1.CurrentRegion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a2 = tbl.Offset(1 , 2).Resize(1, 2).Address(RowAbsolute:=False, ColumnAbsolute:=False)
    Voici comment je construis tes variables
    mais toutes ne sont pas necessaires disont que c'est pour la compréhension !
    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
     
    Set tbl = ActiveSheet.Range("A1").CurrentRegion
     
    r = tbl.Rows.Count + 1
     
    a2 = tbl.Offset(tbl.Rows.Count, 2).Resize(1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)
     
    a21 = tbl.Offset(tbl.Rows.Count, 1).Resize(1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)
     
    a3 = tbl.Offset(tbl.Rows.Count, 0).Resize(1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)
     
    a4 = tbl.Offset(tbl.Rows.Count - 1, 0).Resize(1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)
     
    Plage = tbl.Resize(tbl.Rows.Count + 1, tbl.Columns.Count + 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)
     
    Plage1 = tbl.Offset(tbl.Rows.Count - 1, 0).Resize(2, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)
     
    Plagegraph1 = tbl.Resize(tbl.Rows.Count + 1, 2).Address(RowAbsolute:=False, ColumnAbsolute:=False)
    teste ceci comme cela tu ne sera pas embêté par tes messages d'erreur
    et comme on dit c'est quand même plus mieux !!

    Essaye de faire comme te dis bbil pour le .Activate

    Allez Bonne fin de fin de semaine
    @+

  7. #27
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Oki, je vais essayer...

    Et pour le code, je sais que le mien n'est pas optimale, même très loin de là, mais pour dire que ca fait 1 semaine que je code en VB-Excel... je trouve ca déjà pas mal... lool

    Mais merci bcp pour ton code, je vais l'essayer dès que possible, et c'est vrai que ca va l'alléger un bon bout...

    Bonne fin de soirée, week-end, et semaine...

    Edit:

    en relisant ton code, je me demande si j'ai pas meilleur temps de le faire ainsi, afin d'obtenir une adresse du genre "A1:C10" (pour faire un tri sur l'ensemble de mon tableau...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a2 = tbl.Offset(0,0).Resize(tbl.Rows.Count, 3).Address(RowAbsolute:=False, ColumnAbsolute:=False)
    Si je comprends bien le code, ceci devrait me donner ce que je disais plus haut... et même que dans ce cas, l'offset ne serait pas nécessaire, exact??!!

    EDIT2:

    après tester, j'ai corrigé le code, le offset se trouve à 0,0... mais peut également être supprimé... Et en effet, à mon avis, j'ai meilleur temps de faire comme dit plus haut, directement prendre la plage entière...

  8. #28
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Voilà, à première vue, toutes mes macros fonctionnent ! Par contre, un dernier petit soucis... afin d'éviter quelques erreurs possibles...

    Travaillant sur les graphiques, ceux-ci n'ont pas toujours le même nom interne... y a-t-il un moyen pour les changer???

  9. #29
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 130
    Points : 166
    Points
    166
    Par défaut
    Bonjour 47-47,

    CTRL + clique sur le graphique
    Son nom apparaîtra alors dans la zone Noms ( la même que pour les plages nommées ) et tu pourras renommer ton
    graphique.

    En VBA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    feuil1.shapes("graphique3").name = "Mon nouveau nom"
    Voila cela te convient-il ?
    @ +

  10. #30
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    J'ai regardé à l'instant, hormis le code VBA, et c'est bien celà ! C'est parfait

  11. #31
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 130
    Points : 166
    Points
    166
    Par défaut
    Si c'est parfait 47-47 profites-en pour un !!
    @+

  12. #32
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Ben... je reviens à la charge, car c'est pas tout à fait résolu...

    Je me suis peut-être un peu précipité, et je n'ai pas testé avec plusieurs graphiques...

    Le problème que ca me pose maintenant, c'est que si un graphique a été nommé en interne "Graphique 1", je ne peux pas attribuer à un autre graphique ce même nom même si le premier a été renommé en "Graphique N"...

    Je vais donc juste voir avec les macros, maintenant, si cela fonctionne... mais... si ca ne fonctionne pas, faudra que je cherche un autre moyen... je vous tiens au courant dès que possible...

    EDIT:
    Il semble que le code de la macro que tu m'as montré précédemment fonctionne exactement de la même manière... donc... c'est peut-être un peu rapé pour cette méthode...

    Mais en fouillant un peu plus, j'ai découvert une solution... lol Supprimé les graphiques présents, recréer les uns après les autres, et les renommés... Car une fois renommé, le nom présent est bien utilisé pour les macros, et vu que des précédents étaient là, le numéro est supérieur, mais comme il ne retrouve pas les numéros que je lui mets, il les attribue au nouveau graphique...

  13. #33
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    rebonjour (enfin, plutot bonjour, car je ne l'avais pas dit avant... lol),

    j'ai 2 petites questions, dont une qui était en suspens...

    1.- qui concerne plus excel lui-même que les macros, j'ai une erreur avec les échelles logarythmiques, et des formules...

    en gros, j'ai un graphique qui prend des données fournies par des formules (sommes de 3 mois), mais il y en a qui sont à 0...

    Dès que la valeur = 0, et qu'elle est donnée par une formule, il m'est impossible d'avoir une échelle logarythmique...

    Vous est-il possible de me donner une solution??!!

    2.- là, je ne comprends pas mon problème...

    dans mon code (que tu m'as en partie fourni Bouley), il y a:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sheets(2).Activate
     
    Set tbl = ActiveSheet.Range("A5").CurrentRegion
     
    r = tbl.Rows.Count + 1
     
    plage = tbl.Resize(tbl.Rows.Count + 1, 3).Address(rowabsolute:=False, columnabsolute:=False)
    Pourquoi est-ce que r vaut ici 46, et que plage me donne du style "A5:C50" ??!!

    A part ca, j'arrive bientot au bout, j'ai bientot fini de copier les macros dans le fichier final... mais j'ai ce problème...

    Grand merci d'avance pour m'aider à finir ces macros... et de m'avoir m'aidé jusqu'à présent !

    EDIT:

    pour la 2ème, j'ai trouvé ! C'est l'histoire du +1 et du début du tableau, en A5...

Discussions similaires

  1. [VBA-E]problème de graphique
    Par macromega dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/05/2007, 15h10
  2. [VBA-E] Problèmes de variables
    Par strifer dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/08/2006, 08h28
  3. [VBA-E]problème de récupération de variables et d'event
    Par zenix dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/04/2006, 12h53
  4. [VBA-E] Problème de portée de variable [débutant]
    Par vivelesgnous dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/03/2006, 18h28
  5. [VBA EXCEL] Problème d'éxécution avec graphiques
    Par RedBurn dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/11/2005, 09h55

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