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 à répeter 360 fois contenant une macro


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Macro à répeter 360 fois contenant une macro
    Bonjour,

    je suis débutant en macro et j'aimerai répéter une opération fastidieuse 360 fois dans ma feuille excel.

    Voici les actions qui doivent être faites :

    Sélectionner une cellule faisant partie d'une liste de 1 à 360
    la copier (par exemple la 1ere cellule notée 1)
    aller coller la valeur dans une "cellule fixe"
    lancer une macro nommée "lissage"
    sélectionner une "cellule fixe" dans laquelle apparaitra le résultat
    copier le résultat
    coller ce résultat dans une cellule

    et recommencer cela 359 autres fois.

    au final j'aurais donc un petit tableau à deux colonnes, la première numérotée de 1 à 360 et juste à côté tous les résultats correspondants...


    maintenant je me demande si j'utilise la bonne stratégie en allant copier les chiffres de 1 à 360 tout ça dans le seul but de faire les 360 calculs, ne serait il pas plus simple de trouver une commande qui permettrait de faire les calculs de 1 à 360 sans cette étape ? car pour mois ce qui compte c'est que la case D4 voit défiler les chiffres de 1 à 360.

    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
    Sub Macro6()
    '
    ' Macro6 Macro
    '
     
        Range("N17").Select
        Selection.Copy
        Range("D4").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("D12").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("O17").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("N18").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("D4").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("D12").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("O18").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
    Application.CutCopyMode = False
        Selection.Copy
        Range("D4").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    Application.Run ("Lissage")
        Range("D12").Select
        Application.CutCopyMode = False
        Selection.Copy
     
        Range("o17").Activate
    While ActiveCell <> ""
    ActiveCell.Offset(1, 0).Activate
    Wend
     
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
        Range("o17").Activate
    While ActiveCell <> ""
    ActiveCell.Offset(1, 0).Activate
    Wend
    Selection.Offset(0, -1).Select
     
    etc
     
    End Sub
    par avance merci à ceux qui pourront m'aider

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut heu
    bonjour

    il faut savoir que plus tu utilise les sélect plus se sera long

    en vba il y a beaucoup plus simple
    voila pour les deux premières a copier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Sub copie()
    [d4] = [n17].Value Étant donner que l'on copie la "value " tu aura le résultat et pas la formule c'est ce que tu voulais je suppose
    [o17] = [d12].Value
     
    End Sub

    au plaisir

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour Patrick

    je te remercie pour ta réponse,

    étant donné que j'ai besoin qu'une autre macro soit exécutée avant d'obtenir le résultat je peux le faire ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub copie()
    [d4] = [n17].Value
    Application.Run ("Lissage")
    [o17] = [d12].Value
    End Sub
    c'est cette macro qui me permet d'obtenir le résultat en d12 qui sera donc copié en o17, par contre, comment passer à la formule suivante qui sera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub copie()
    [d4] = [n18].Value
    Application.Run ("Lissage")
    [o18] = [d12].Value
    End Sub
    et cela jusqu'à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub copie()
    [d4] = [n376].Value
    Application.Run ("Lissage")
    [o376] = [d12].Value
    End Sub
    par avance merci

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Tu devrais nous montrer ta macro Lissage, avec quelques adaptations, il ne devrait plus être nécessaire de copier les valeurs et de lancer à chaque fois la macro.

    ++
    Qwaz

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    pas de problème, voici ma macro lissage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub lissage()
    'ActiveSheet.Unprotect "ecomike"
        Range("L5").GoalSeek Goal:=0, ChangingCell:=Range("J4")
    'ActiveSheet.Protect "ecomike", True, True, True
     
    End Sub
    je pense que cette macro est inévitable car elle permet de déclencher un ensemble de calculs entre d autres cellules dont le résultat final qui m 'interesse se retrouve en D12

    merci

  6. #6
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Peux tu mettre un fichier pour connaitre l'organisation exacte des données.

    [Edit]
    En attendant voila peut-être une solution avec les données que tu as données dans tes différents post.

    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
    Sub Trouv()
    Dim TheCell As Range
     
    'On travail sur la feuille nommé Feuil1, attention ceci est son CodeName (Nom dans VBA), pas le nom écrit sur l'onglet en bas de la feuille
    With Feuil1
        'On boucle de la cellule N17 à N376
        For Each TheCell In .Range("N17:N376")
            'On place la valeur variable
            .[D4] = TheCell
            'On verifie qu'une valeur a bien été trouvée
            If .[L5].GoalSeek(0, .[J4]) Then
                'Valeur trouvé
                TheCell.Offset(0, 1) = .[D12]
            Else
                'Aucune valeur ne correspond
                TheCell.Offset(0, 1) = "Impossible"
            End If
        Next
    End With
     
     
    End Sub
    [/Edit]
    ++
    Qwaz

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut voici le fichier
    bonjour,

    merci pour ta réponse, par contre, c'est vrai que ce sera plus simple avec le fichier,

    voici le scénario que j'aimerai :

    copier le chiffre de n17 dans d4
    lancer la macro : lissage
    copier le résultat de d12 dans o17

    et recommencer jusqu'à "o376"

    l'idéal, mais la j'en demande peut être un peu beaucoup , serait que le tableau arrête de se compléter si la valeur contenue dans la colonne n17 à n376 serait supérieure ou égale à la cellule F4
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    As tu recherché sur Excel, il existe des fonctions financières, je ne suis pas très alèse avec ce qui touche au calculs financiers, mais je pense que tu y trouverais ton bonheur sans avoir à passer par des macro VBa


    Essai en ajoutant en bouton et en plaçant se code dedans
    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
    Sub LissageTotal_Clic()
     
    Dim TheCell As Range
     
    'On bloque le refraichissement de l'ecran (gain en rapidité)
    Application.ScreenUpdating = False
     
    'On travail sur la feuille nommé Feuil2, attention ceci est son CodeName (Nom dans VBA), pas le nom écrit sur l'onglet en bas de la feuille
    With Feuil2
     
        'On supprime d'éventuels anciens résultats
        .[O17:O376].ClearContents
     
        'On boucle de la cellule N17 à N376
        For Each TheCell In .Range("N17:N376")
            'On verifie si TheCell est inférieur à F4, sinon on arrête
            If TheCell >= .[F4] Then Exit For
     
            'On place la valeur variable
            .[D4] = TheCell
            'On verifie qu'une valeur a bien été trouvée
            If .[L5].GoalSeek(0, .[J4]) Then
                'Valeur trouvé
                TheCell.Offset(0, 1) = .[D12]
            Else
                'Aucune valeur ne correspond
                TheCell.Offset(0, 1) = "Impossible"
            End If
        Next
    End With
     
    Application.ScreenUpdating = True
    End Sub
    ++
    Qwaz

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    je suis bluffé !!!
    ça fonctionne parfaitement !!!!!
    merci pour tout !

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

Discussions similaires

  1. [XL-2010] Reprise d'une macro 1 après exécution d'une macro 2 appelée par la macro 1
    Par julio44 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/07/2014, 12h32
  2. exécuter une macro 1 seule fois par semaine ?
    Par deby23 dans le forum VBA Access
    Réponses: 9
    Dernier message: 20/12/2012, 11h22
  3. [XL-2010] Lancement fichier Excel contenant une macro
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/11/2012, 16h41
  4. [XL-2007] Fichier contenant une macro
    Par cchasse98 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/08/2012, 17h23
  5. Réponses: 6
    Dernier message: 21/04/2009, 15h11

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