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 :

Compréhension et adaptation de macro en 2010 [XL-2003]


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
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 11
    Par défaut Compréhension et adaptation de macro en 2010
    Bonjour,
    Je suis étudiant en informatique et je suis actuellement en stage dans une entreprise pour la planification de leur migration de pack office 2003 vers 2010 et on m'a demandé aujourd'hui d'adapter une de leur plus grosse macro en version 2010.
    ==>Mon problème: Je n'ai jamais touché au VBA et je ne sais donc absolument pas comment m'y prendre pour adapter le code.. J'ai utilisé l'OCCI pour avoir un ordre d'idée du code qui devrait être modifié mais celui ci fait référence à des fonctions que je ne trouve pas dans "l'inventaire des fonctions modifiées depuis office 2003"

    Si quelqu'un peut me donner une piste cohérente sans pour autant me renvoyer sur un tuto j'apprécierai vraiment... !

    Voici le code ! il n'y a pas toute la macro puisqu'elle fait 1200 ligne mais simplement la partie la plus commentée avec VBA inspector...

    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
    Sub maj_entete()
        Dim f, fold As Worksheet
        Dim ch, chol As Chart
    '
        t = ActiveSheet.Type
        If t = 3 Then
            Set chol = ActiveChart
        Else
            Set fold = ActiveSheet
        End If
    '
        For Each f In Worksheets
            f.Select
            With ActiveSheet.PageSetup
                .RightHeader = "mise à jour du " & Now
                '<VBA_INSPECTOR>
                '   <REMOVED>
                '       <MESSAGE>Potentially contains removed items in the object model</MESSAGE>
                '       <ITEM>[mso]ScopeFolder.Path</ITEM>
                '       <URL>http://go.microsoft.com/fwlink/?LinkID=215358 /URL>
                '   </REMOVED>
                '</VBA_INSPECTOR>
                .RightFooter = "&P / &N" & Chr(10) & ActiveWorkbook.Path + "\" + ActiveWorkbook.Name
            End With
     mise à jour du graphique
        Sheets("G_Avance_Retard").Select
        ' mise à jour du titre
        '<VBA_INSPECTOR>
        '   <CHANGE>
        '       <MESSAGE>Potentially contains changed items in the object model</MESSAGE>
        '       <ITEM>[xls]ChartTitle.Select</ITEM>
        '       <URL>http://go.microsoft.com/fwlink/?LinkID=215357 </URL>
        '   </CHANGE>
        '</VBA_INSPECTOR>
        ActiveChart.ChartTitle.Select
        Selection.Characters.Text = "Avance / Retard fournisseurs - " + Nom_Fourn
        Selection.AutoScaleFont = False
        With Selection.Characters(Start:=1, Length:=21).Font
            .Name = "Arial"
            '<VBA_INSPECTOR>
            '   <DEPRECATION>
            '       <MESSAGE>Potentially contains deprecated items in the object model</MESSAGE>
            '       <ITEM>[mso]ChartFont.FontStyle</ITEM>
            '       <URL>http://go.microsoft.com/fwlink/?LinkID=215358 /URL>
            '   </DEPRECATION>
            '</VBA_INSPECTOR>
            .FontStyle = "Gras" 
    réactivation ligne suivante rb 10092010
                                    ActiveSheet.Paste
                                    '<VBA_INSPECTOR>
                                    '   <CHANGE>
                                    '       <MESSAGE>Potentially contains changed items in the object model</MESSAGE>
                                    '       <ITEM>[xls]Range.PasteSpecial</ITEM>
                                    '       <URL>http://go.microsoft.com/fwlink/?LinkID=215357 </URL>
                                    '   </CHANGE>
                                    '</VBA_INSPECTOR>
                                    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
                                        xlNone, SkipBlanks:=False, Transpose:=False
                                    Cells(nl_suppl, col_ts_année) = Year(date_temp)
                                    Cells(nl_suppl, col_ts_mois) = Month(date_temp)
                                    Cells(nl_suppl, col_ts_àlheure) = "en retard de livraison"
                                    Cells(nl_suppl, col_ts_cpt_nl2) = 1
                                    Cells(nl_suppl, col_ts_cpt_nl1) = -1
                                    Cells(nl_suppl, col_ts_année_mois) = Year(date_temp) & "-" & Format(Month(date_temp), "00")
                                    date_temp = date_temp + 31
                                    date_temp = DateSerial(Year(date_temp), Month(date_temp), 15)
                                Else
                                    date_temp = reciev_date_conv
                                    nl = nl_fin
                                End If
                            Wend
                        End If

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 555
    Par défaut
    Bonjour

    Y a-t-il une description de ce que fait la macro de façon opérationnelle ?

    Il n'y a pas de grosses révolutions dans le VBA.
    Là où peuvent se poser des problèmes c'est
    • certaines manipulations de fichiers sur les disques
    • tout ce qui correspond à des fonctionnalités ayant évolué dans Excel :
      • en-tête et pied de page avec des options en plus
      • Mise en forme conditionnelle
      • Tableaux croisés dynamiques (là il faut tout adapter et pas seulement le VBA)
      • Listes (devenues tableaux) avec des possibilités démultipliées
      • tris et filtres
      • L'interface de la macro : s'il y a des barres d'outils ou des menus il faut adapter


    Une bonne migration doit tirer partie des avancées du logiciel : cela apporte un plus sur l'opérationnel et préserve l'avenir du code.

    Commence par convertir des fichiers représentatifs en 2010.
    Ensuite fais tourner la macro : tu verras déjà ce qui ne passe pas du tout. Use et abuse des outils de débogage. Mais comme expliqué, cela se limite à ce qui coince sans optimiser vraiment.

    Bon courage.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 11
    Par défaut
    Merci d'avoir étudié mon problème!

    La macro est la pour permettre à l'utilisateur du fichier de naviguer sur un graphique en cochant ou non différentes options dans des listes déroulantes.
    Ces listes n'apparaissent même pas avec le mode de compatibilité d'office 2010. D'après cci j'ai des fonctions qui ont été supprimées depuis la version 2003, le souci c'est que je n'arrive pas à en trouver d'équivalentes !

    j'ai également un problème sur la gestion des dates.. sous 2003 ma liste commence à 2007-x-x et se termine en 2013,office sous 2010 celle ci commence en 2012 et ce termine en 2015 tout en sachant que toutes les valeurs initiales ne sont pas toutes présentes.

    Je suis désolé si tout cela est confus mais j'avoue que je débarque complétement.. je n'ai jamais eu affaire à ce langage et la le travail que l'on me demande est, je pense, carrément au dessus de mes compétences..

    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 maj_entete()
        Dim f, fold As Worksheet
        Dim ch, chol As Chart
    '
        t = ActiveSheet.Type
        If t = 3 Then
            Set chol = ActiveChart
        Else
            Set fold = ActiveSheet
        End If
    '
        For Each f In Worksheets
            f.Select
            With ActiveSheet.PageSetup
                .RightHeader = "mise à jour du " & Now
                '<VBA_INSPECTOR>
                '   <REMOVED>
                '       <MESSAGE>Potentially contains removed items in the object model</MESSAGE>
                '       <ITEM>[mso]ScopeFolder.Path</ITEM>
                '       <URL>http://go.microsoft.com/fwlink/?LinkID=215358 /URL>
                '   </REMOVED>
                '</VBA_INSPECTOR>
                .RightFooter = "&P / &N" & Chr(10) & ActiveWorkbook.Path + "\" + ActiveWorkbook.Name
            End With
    '
        Next f
    '
    '
        For Each ch In Charts
            ch.Select
            With ActiveChart.PageSetup
                .RightHeader = "mise à jour du " & Now
                '<VBA_INSPECTOR>
                '   <REMOVED>
                '       <MESSAGE>Potentially contains removed items in the object model</MESSAGE>
                '       <ITEM>[mso]ScopeFolder.Path</ITEM>
                '       <URL>http://go.microsoft.com/fwlink/?LinkID=215358 /URL>
                '   </REMOVED>
                '</VBA_INSPECTOR>
                .RightFooter = "&P / &N" & Chr(10) & ActiveWorkbook.Path + "\" + ActiveWorkbook.Name
            End With
    '
        Next ch
    '
        If t = 3 Then
            chol.Select
        Else
            fold.Select
        End If
    '
    End Sub

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 555
    Par défaut
    Bonjour

    Le code que tu joins ne concerne que les en-tête/pieds de page (onglets normaux ou graphiques) et y place la date du jour et le chemin d'accès + nom de fichier.

    De quelles listes de dates parles-tu ?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 11
    Par défaut
    Voilà une partie du code relative à l'utilisation des dates, ces docs excel sont utilisés dans un ERP, peut être que le souci relatif aux dates vient de ça...

    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
    Sub données_taux_de_service()
    '
        tol = Application.Names("tol").RefersToRange
        Sheets("OA").Select
        Cells(65536, 1).Select
        Selection.End(xlUp).Select
        nl_fin = Selection.Row
        Sheets("données_taux_service").Select
    '
    ' initialisation
    '    Application.Goto Reference:="data_ts"
    '    Selection.Offset(1, 0).Select
    '    Selection.ClearContents
    '
        Cells(65536, 1).Select
        Selection.End(xlUp).Select
        nl_suppl = Selection.Row
        Range(Cells(2, 1), Cells(nl_suppl, 40)).Select
        '<VBA_INSPECTOR>
        '   <CHANGE>
        '       <MESSAGE>Potentially contains changed items in the object model</MESSAGE>
        '       <ITEM>[xls]ChartArea.ClearContents</ITEM>
        '       <URL>http://go.microsoft.com/fwlink/?LinkID=215357 </URL>
        '   </CHANGE>
        '</VBA_INSPECTOR>
        Selection.ClearContents
    '
        nl_suppl = 1
    '
        For nl = 4 To nl_fin
            date_cde = Sheets("OA").Cells(nl, col_date_cde)
            due_date = Sheets("OA").Cells(nl, col_due_date)
            reciev_date = Sheets("OA").Cells(nl, col_reciev_date)
            cde = Sheets("OA").Cells(nl, col_Ligne_cde) = 1
            liv = Sheets("OA").Cells(nl, col_Livraison) = 1
            If cde Then
    ' on ne tient pas compte des commandes annulées
                If liv Then
    ' cas des livraisons effectuées
                    If reciev_date > due_date + tol Then
    ' cas des livraisons en retard
                        reciev_date_conv = DateSerial(Year(reciev_date), Month(reciev_date), 15)
                        due_date_conv = DateSerial(Year(due_date + tol), Month(due_date + tol), 15)
                        If reciev_date_conv > due_date_conv Then
                            date_temp = due_date_conv
                            Range(Sheets("OA").Cells(nl, 1), Sheets("OA").Cells(nl, 38)).Copy
    '
                            While date_temp < reciev_date_conv
                                nl_suppl = nl_suppl + 1
                                If nl_suppl < 65000 Then
                                    Cells(nl_suppl, 1).Select
    'réactivation ligne suivante rb 10092010
                                    ActiveSheet.Paste
                                    '<VBA_INSPECTOR>
                                    '   <CHANGE>
                                    '       <MESSAGE>Potentially contains changed items in the object model</MESSAGE>
                                    '       <ITEM>[xls]Range.PasteSpecial</ITEM>
                                    '       <URL>http://go.microsoft.com/fwlink/?LinkID=215357 </URL>
                                    '   </CHANGE>
                                    '</VBA_INSPECTOR>
                                    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
                                        xlNone, SkipBlanks:=False, Transpose:=False
                                    Cells(nl_suppl, col_ts_année) = Year(date_temp)
                                    Cells(nl_suppl, col_ts_mois) = Month(date_temp)
                                    Cells(nl_suppl, col_ts_àlheure) = "en retard de livraison"
                                    Cells(nl_suppl, col_ts_cpt_nl2) = 1
                                    Cells(nl_suppl, col_ts_cpt_nl1) = -1
                                    Cells(nl_suppl, col_ts_année_mois) = Year(date_temp) & "-" & Format(Month(date_temp), "00")
                                    date_temp = date_temp + 31
                                    date_temp = DateSerial(Year(date_temp), Month(date_temp), 15)
                                Else
                                    date_temp = reciev_date_conv
                                    nl = nl_fin
                                End If
                            Wend
                        End If

  6. #6
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 555
    Par défaut
    Re

    Les dates sont celles trouvées dans les colonnes de la feuille OA

    Le code est loin d'être optimisé...

    De tes études dans divers langages tu trouveras la même logique algorithmique avec des structures de décision if then else ou select case et des boucles For ou While ou Do until...

    Pour le reste c'est lié aux objets de l'application Excel.

    Il est utile de bien connaître Excel et puis ensuite voir dans l'explorateur d'objets (dans l'éditeur VBE) les objets, leurs propriétés méthodes et dépendances et compléter par l'aide en ligne (touche F1).

    Comme je te l'ai suggéré commence par faire tourner le code sur des classeurs au format 2010. Une fois les blocages repérés et réglés, tu pourras vérifier la cohérence des résultats...

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

Discussions similaires

  1. [XL-2003] Adapter macro 2007/2010 pour mise en page
    Par Jean-Philippe André dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/11/2013, 13h29
  2. Macro Access 2010
    Par bremmo76 dans le forum Access
    Réponses: 2
    Dernier message: 07/06/2010, 22h45
  3. [XL-2000] Adapter une macro (suppression de ligne si = 0)
    Par wyzer dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/03/2010, 21h53
  4. compréhension technique de la macro
    Par arctica dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/10/2009, 14h40
  5. adaptation de macro Word 2003 en macro Word 2007
    Par Doom76 dans le forum VBA Word
    Réponses: 6
    Dernier message: 08/09/2008, 13h28

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