Exécuter un code VBA qu'une seule fois

Hello j'ai un code qui me permet de faire fusionner des cellules et apparaître une icône. Le seul problème que j'ai que je ne veux que ce code apparaisse que si une cellule contient une certaine valeur. Le code s'exécute alors une fois et puis quand je remplis les cellules qui suivent, le code s'exécute encore et encore tant que ma condition est toujours remplie. Y a-t-il une possibilité pour ne faire exécuter ce code qu'une fois au début et pas à chaque fois que je sélectionne quelque chose dans mes autres cellules ?

Merci beaucoup.

Voilà le code :

Sub Step1Bottle()
'Condition de début
    If Range("D3") = "Bottle" Then
'Fusionner les cellules
    Range("B4:B9").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
'Fusionner les cellules sélectionnées
    Range("A4:A9").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
'Remplir les cellules sélectionnées en bleu
    Range("A4:B9").Select
    Range("B4").Activate
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .color = 15773696
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
'Ecrire step 1 : bottle dans la cellule
    Range("A4:A9").Select
    ActiveCell.FormulaR1C1 = "STEP 1 : BOTTLE"
    'Modifier la police
    With Selection.Font
    .Name = "Calibri"
    .Size = 24
    .Bold = True
    .ColorIndex = 2
    End With

    Range("B4:B9").Select
'Copier coller l'icone de la bouteille
    Sheets("BOTTLE STRUCTURE").Select
    ActiveSheet.Shapes.Range(Array("Group 30")).Select
    Selection.Copy
    Sheets("Feuil1").Select
    Range("B4:B9").Select
    ActiveCell.FormulaR1C1 = ""
    Range("B4:B9").Select
    ActiveSheet.Paste
    Selection.ShapeRange.IncrementLeft 120.3703149606
    Selection.ShapeRange.IncrementTop -1.8518897638
    Selection.ShapeRange.ScaleWidth 0.6558418932, msoFalse, msoScaleFromTopLeft
    Selection.ShapeRange.ScaleHeight 0.6512775375, msoFalse, _
        msoScaleFromBottomRight
    Selection.ShapeRange.IncrementLeft -25.9259055118
    Selection.ShapeRange.IncrementTop -35.1851968504
    Range("D10").Select
    End If
End Sub

Bonjour,

1 - La macro ne s'exécute pas toute seule (Ce n'est pas une macro évènementielle)

C'est donc sur la macro évènementielle qu'il faut agir.

2 - L’intérêt des macros est d'effectuer des actions répétitives : Une macro qui ne s'exécuterait réellement qu'une fois c'est contre nature.

Il faut donc indiquer dans quelle condition elle ne doit s'exécuter qu'une fois : il y a forcément une autre condition !

A+

Bonjour galopin01,

Je te remercie pour ta réponse voici ma macro événementielle (si c'est vraiment ça, je suis une débutante) :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("D3:D26")) Is Nothing Then

   '********* Appel de Bottle *****************
        Call Bottle
    End If
End Sub

En fait ma macro Step1Bottle se trouve à l'intérieur de la macro Bottle. Et du coup à chaque fois que je change que je sélectionne quelque chose dans mon excel qui elle s'exécute encore une fois. Je voudrai qu'elle ne s'exécute qu'une fois peut-être en remplissant une autre case ça sera sa condition d'arrêt mais je n'arrive pas à coder ça.

Bonjour,

J'avoue ne pas avoir compris la demande...

Essayez ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
Static DejaFait As Boolean
    If Not DejaFait Then
        If Not Application.Intersect(Target, Range("D3:D26")) Is Nothing Then

       '********* Appel de Bottle *****************
            Call Bottle
            DejaFait = True
        End If
    End If
End Sub

C'est bon j'ai réglé le problème toute seule j'ai mis une condition d'arrêt comme ça il ne s'exécute que quand une certaine cellule est vide.

Merci pour ta réponse Pijaku, mais ça n'a pas marché j'ai fait autre chose et ça a marché.

Rechercher des sujets similaires à "executer code vba seule fois"