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 :

Macro complexe sous excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut Macro complexe sous excel
    Hello à tous (et toutes!:p) ...

    Etant plutot issu du monde Php je decouvre avec emerveillement et agacement(et oui reprendre de 0 c pas facil) l'etendue des macros excel!

    le souci, c'est que je n'avance pas assez vite et que j ai un travail a rendre pour ASAP ... pourriez vous m y aider ? il s'agit de dev un ptite macro

    voici l'ennonce du probleme (qui en est un) et comme les autres forums sont un peu à cours d'idée...j espère qu'il y aura kkun ici en mesure de m'aider :

    j ai un fichier xls avec des onglets par pays, au sein de ces onglets, j ai des tableaux présentés par ville...à chaque ville est associée une catégorie, j'aimerais automatiser la création d'un tableau qui, classe les villes par catégorie (les catégories sont indiquées dans un autre onglet), et le cas échéant (mais alors là j y crois pas trop - et je peux le faire manuellement) génère en auto le graphique associé... bref j ai mis un fichier d'exemple en pj... Il est à noter que le mini tableau en onglet "reference" est amené à etre modifié...

    Reacap : les onglets 1 2 3 et 4 sont générés manuellement, peuvent être modifiés... le n°5 "resultat"est celui que la macro devrait générer... enfin si possible ...
    un fichier d 'exempl est dispo
    merci par avance si vous pouvez m aider

    Fred
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Le graphe n'est pas le plus difficile...
    Comment répartis-tu les villes dans chaque catégorie ?
    Quelle est la relation entre les villes et celles-ci (les catégories) ?

    PS - Je suis très vexé, Grenoble n'en fait pas partie

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Sorry pour Grenoble! impardonnable je te le concède... Cela mis à part, la répartition des villes par catégorie n'est pas de mon ressort et est susceptible d'évoluer... d'ou l idée de les mettre dans un tableau que je puisse modifier (onglet 4 "référence") ... et ke le premier newbie venu (genre pire que moi) qui souhaite changer Madrid de catégorie puisse le faire ... (ou changer le nom de paris en Grenoble ! )

    sui je suffisamment clair?
    nb: j espère que tu pourras m aider car c'est le 3eme forum ou je poste et tu es le premier à sembler en mesure de faire kkch :s !

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    ton cas m'a intéressé, je te propose une solution basée sur 2 notions ...

    Formules matricielles
    Nom de Plages de cellules

    pour que ça marche j'ai redisposé les catégories comme ça sur 2 colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Paris    Categorie 1       
    Barca   Categorie 1       
    Milan   Categorie 1       
    Roma   Categorie 1       
    Marseille   Categorie 2       
    Bordeaux   Categorie 2       
    Turin   Categorie 2       
    Valencia   Categorie 2       
    Toulouse   Categorie 3       
    Lyon   Categorie 3       
    Bologne   Categorie 3       
    Madrid   Categorie 3
    sur la plage A3:B14

    et voici le 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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Sub FaitToutLeBoulot()
     
    Dim sh As Worksheet
    Dim rRef As Range
    Dim rRes As Range
    Dim i As Integer
    Dim j As Integer
    Dim n As Name
    Dim Formule As String
     
    Set rRef = ActiveWorkbook.Sheets("Reference").Range("A3:B14")
     
    ' on efface tous les noms
    For Each n In ActiveWorkbook.Names
        n.Delete
    Next n
     
    ' on crée un nom pour chaque ville T_ville
    For Each sh In ActiveWorkbook.Sheets
        If sh.Name <> "Reference" And sh.Name <> "Résultat" Then
            ' cas d'une feuille de pays
            For i = 2 To 255 Step 3
                If sh.Cells(1, i) = "Moyenne" Then
                    ' on a atteint la fin du tableau ...
                    Exit For
                Else
                    ActiveWorkbook.Names.Add "t_" & sh.Cells(1, i), _
                                 RefersToR1C1:="='" & sh.Name & "'!R3C" & i & ":R7C" & i + 2
     
                End If
            Next i
        End If
    Next sh
     
    For Each sh In ActiveWorkbook.Sheets
        If sh.Name = "Résultat" Then
            sh.Activate
            For j = 0 To 2 ' les trois catégories
                Formule = vbNullString
                Set rRes = sh.Range(Cells(3, (j * 3) + 2), Cells(7, (j * 3) + 4))
                ' on met à jour le résultat
                For i = 1 To rRef.Rows.Count
                    If rRef(i, 2) = "Categorie " & j + 1 Then
                        Formule = Formule & "+ T_" & rRef(i, 1)
                    End If
                Next i
                rRes.FormulaArray = "=" & Mid(Formule, 2)
                Set rRes = Nothing
            Next j
        End If
    Next sh
     
     
     
    Set sh = Nothing
    Set n = Nothing
    Set rRef = Nothing
    Set rRes = Nothing
     
    End Sub
    évidemment avec cette méthode ton graph se remet à jour tout seul, du coup pas besoin d'y toucher.

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    alors tout d'abord merci ! je ne pensais pas que ce serait aussi complexe... la question du tableau ne me pose vraiment aucun probleme... le seul truc c'est que la je dois admettre que je suis vraiment dépassé avec mon pietre niveau de bidouille et bien qu'ayant placé dans l'onglet reference ton nouveau tableau de A3 à B14, la macro ne fonctionne pas et m affiche des signes "=" dans quasi toutes les cellules...une idée ?

    Thanks a million ! (merci bcp ! :o) )

    Freddy

  6. #6
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    il doit y avoir une erreur d'implémentation du code chez toi ...
    Fichiers attachés Fichiers attachés

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut MERCI !
    Bon alors je viens de tester..;et ca marche, j ai meme refait la manip no soucy...je comprends tjs pas pkoi ca marchait pas... bref ...les voies d'excel sont parfois impénétrables

    bon en tout cas merci mille fois...tu n'as pas idée du coup de pouce que tu viens de me donner
    bon il me reste à l adapter et surtout à comprendre ! :p lol

    a bientôt

  8. #8
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut Re ...
    on en fait il réside un souci... dans mon exemple, j ai mis categorie 1,2 ...etc etc... le souci c que IRL, j ai besoin de renommer categorie 1 2 3 par toto titi tata tonton ...etc etc ... en d'autres termes moins puerils, d'en changer le nom et d'en ajouter... hors il semble que dans le code, cette partie soit "fixe"

    thanks in advance
    Freddy

  9. #9
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    il suffit d'adapter le code ...
    la partie qui gère ça est là :

    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
    ' mets tes catégories moins puériles
    Const sCategories As String = "titi;toto;tata"
    For Each sh In ActiveWorkbook.Sheets
        If sh.Name = "Résultat" Then
            sh.Activate
            For j = 0 To UBound(Split(sCategories, ";")) ' les n catégories
                Formule = vbNullString
                Set rRes = sh.Range(Cells(3, (j * 3) + 2), Cells(7, (j * 3) + 4))
                ' on met à jour le résultat
                For i = 1 To rRef.Rows.Count
                    If rRef(i, 2) = Split(sCategories, ";")(j) Then
                        Formule = Formule & "+ T_" & rRef(i, 1)
                    End If
                Next i
                rRes.FormulaArray = "=" & Mid(Formule, 2)
                Set rRes = Nothing
            Next j
        End If
    Next sh

  10. #10
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    bah oui suffit d'adapter lol bon merci mille fois cette fois ci je te laisse trankil et j essaie de potasser ca :s

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

Discussions similaires

  1. Calcul complexe sous Excel
    Par Trebor dans le forum Excel
    Réponses: 2
    Dernier message: 27/12/2007, 22h53
  2. Lenteurs de macros VBA sous Excel 2007 vs Excel 2003
    Par nicotab dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/11/2007, 18h47
  3. [VBA-E]Macro Access sous Excel
    Par toniox dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/05/2006, 15h27
  4. [VBA-E]Execution d'une macro access sous excel VBA
    Par virtualinsanity dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 21/04/2006, 17h27
  5. Macros désactivées sous excel
    Par Australia dans le forum Excel
    Réponses: 2
    Dernier message: 31/01/2006, 12h21

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