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

Excel Discussion :

Création d'une macro tant que


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Création d'une macro tant que
    J’ai un classeur Excel dans lequel j’exécuter des requêtes SQL qui attaquent une vue d’une base de données SQL, ces données sont mises à jour lorsque je fais un refresh all de mes requêtes.
    Nom de mes onglets :
    All, Interco, 004, 005, 006, 007, 008, 009, 010, 011
    Dans ces onglets les colonnes A à AM sont mises à jour par le Refresh à partir des données SQL.
    En utilisant le bouton : Données/Actualiser tout.

    Ensuite, j’ai des formules de calcul de la colonne AN à BC
    Mais lorsque je fais le refresh, cela ne se met à jour que pour les lignes qui sont déjà renseignées,
    Les nouvelles lignes ne sont pas mises à jour, et je suis obligé de le faire manuellement.

    Je voudrai faire une boucle en VBA

    Tant que ma colonne A à partir de la cellule A1 contient quelque chose jusqu’à la dernière cellule Axx (dernière ligne mise à jour),
    la macro doit recopier les formules contenues dans les cellules AN2 à BC2 jusqu'à la dernière cellule ANxx à BCxx.

    Je n’y connais rien en VBA. Je sais ou créer la macro, mais je ne sais pas mettre de bouton, ni créer le code qui va bien.

    Est-ce que quelqu'un pourrait m'aider

    Par avance merci.

    Philippe

  2. #2
    Membre éclairé
    Bonjour

    Je pense que le plus simple est d'avoir des tableaux structurés. Ainsi les formules sont définies une fois pour toutes sur la première ligne. Elles se recopient seules sur le nombre de lignes nécessaire à chaque mise à jour.

    Comme il n'en est pas beaucoup dit sur la manière d'inscrire les résultats des requêtes sur le classeur Excel, je ne peux que faire des suppositions. Mais, là aussi, ce serait mieux que ces résultats soient directement affichées sous forme de tableaux structurés. Ainsi il n'y aurait qu'à actualiser les données à chaque fois.

    En espérant que cela aide.

    Bonne journée

    Pierre Dumas
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Futur Membre du Club
    Macro réalisée
    Bon, voici ce que j'ai fait mais ce n'est pas optimal,
    J'ai créé 4 macros, que j'aimerai déjà regrouper en une seule.

    Voici le code que j'ai créé :

    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
     
    Sub RefreshDatas()
    '
    ' RefreshDatas Macro
    ' Refresh Datas from Exact
    '
    ' Touche de raccourci du clavier: Ctrl+Shift+D
    '
        ActiveWorkbook.RefreshAll
    End Sub
     
    Sub UpdateRates()
    '
    ' UpdateRates Macro
    ' Update Exchange Rates
    '
    ' Touche de raccourci du clavier: Ctrl+Shift+R
    '
        Sheets("Rates").Select
        Range("E2:G2").Select
        Selection.Copy
        Range("D2").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range("E365").Select
        Range(Selection, Selection.End(xlUp)).Select
        Range("E3:E365").Select
        Range("E365").Activate
        ActiveSheet.Paste
    End Sub
    Sub UpdateFormulasALL()
    '
    ' UpdateFormulasALL Macro
    ' Update Formulas in Sheet All Companies
    '
     
    '
        Sheets("All").Select
        ActiveWindow.SmallScroll ToRight:=-8
        Range("AP2:BI2").Select
        Selection.Copy
        Range("AO2").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, Selection.End(xlUp)).Select
        Range("AP200000").Select
        Range(Selection, Selection.End(xlUp)).Select
        Range("AP3:AP200000").Select
        Range("AP200000").Activate
        ActiveSheet.Paste
    End Sub
    Sub UpdateFormulasInterco()
    '
    ' UpdateFormulasInterco Macro
    ' Update Formalas in Sheet Interco
    '
    ' Touche de raccourci du clavier: Ctrl+Shift+I
    '
        Sheets("Interco").Select
        Range("AO2").Select
        Range(Selection, Selection.End(xlToRight)).Select
        Selection.Copy
        Range("AN2").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range("AO25000").Select
        Range(Selection, Selection.End(xlUp)).Select
        Range("AO3:AO25000").Select
        Range("AO25000").Activate
        ActiveSheet.Paste
    End Sub
     
    Sub RefreshTCD()
    '
    ' RefreshTCD Macro
    ' Refresh TCD
    '
    ' Touche de raccourci du clavier: Ctrl+Shift+T
    '
        Sheets("TCD All").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotSelect "", _
            xlDataAndLabel, True
        Application.CutCopyMode = False
        ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotCache.Refresh
    End Sub


    Si on s'arrête à la macro Rates,

    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
     
    Sub UpdateRates()
    '
    ' UpdateRates Macro
    ' Update Exchange Rates
    '
    ' Touche de raccourci du clavier: Ctrl+Shift+R
    '
        Sheets("Rates").Select
        Range("E2:G2").Select
        Selection.Copy
        Range("D2").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range("E365").Select
        Range(Selection, Selection.End(xlUp)).Select
        Range("E3:E365").Select
        Range("E365").Activate
        ActiveSheet.Paste
    End Sub


    J'ai fait en sorte de copier jusqu'à un certain nombre de lignes qui permette d'avoir au moins toutes mes lignes renseignées.
    Mais je voudrai crééer un boucle tant que j'ai une valeur en colonne D, alors je copie les formules E2:G2

    Mais je ne sais pas faire cela.

    Par avance merci de vos réponses.

    Philippe

  4. #4
    Membre éclairé
    Bonjour

    Effectivement, il y a de quoi revoir pas mal de choses dans votre code.
    Je vous conseille largement d'aller voir les excellents tutoriels sur ce site et d'étudier encore plus spécialement les références relatives et absolues.
    Je vous conseille encore plus d'aller étudier les tableaux structurés car vous n'aurez RIEN à faire. Vos formules seront automatiquement recopiées vers le bas quel que soit le nombre de lignes. Vous trouverez aussi un tutoriel sur ce sujet sur ce site.

    Ce n'est pas la peine de réinventer la roue avec VBA en essayant de recréer une fonctionnalité native d'Excel.

    Bon courage pour ces lectures et mises en application.

    Je vous souhaite une bonne fin de journée

    Pierre Dumas
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

###raw>template_hook.ano_emploi###