• Initiateur de la discussion Initiateur de la discussion bloomby
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

bloomby

XLDnaute Occasionnel
Bonjour à tous,
je demande votre aide pour optimiser mon code
Dans les fais, une boucle serait véritablement diminuer la longueur
du code et du temps à consacrer pour l'écriture de celui-ci


HTML:
Private Sub Worksheet_Calculate()
    If [A3] <> M1 Then
        M1 = [A3]
        SendMail1
    End If
    
    If [I3] <> M2 Then
        M2 = [I3]
        SendMail2
    End If
    
    If [Q3] <> M3 Then
        M3 = [Q3]
        SendMail3
    End If

    If [Y3] <> M4 Then
        M4 = [Y3]
        SendMail4
    End If


...


End


merci
 
Dernière édition:
Re : optimiser code

Bonjout à tous,

Un peu plus d'information ne sera pas de trop;

If [A3] <> M1 Then
M1 = [A3]
SendMail1
End If

On commece à A3, donc si nous somme en mesure de définir A3 comme i
et n as Object

If [i] <> Mn Then
Mn =
SendMailn
End If


par la suite

If [i+offset(0,8)] <> Mn Then
Mn+1= [i+offset(0,8)]
SendMailn+1
End If

C'est très brouillons mais c'est un peu l'idée de ce que je désire avoir
merci
Bloomby
 
Dernière édition:
Re : optimiser code

Bloomby

si M1 et M2 sont des références de cellule, ce ne sont pas des variables de type string, cela m'etonnerait beaucoup que le pemier code que tu fournis fonctionne

Pour raccourcir ton code il faudrait qu'il y ait une suite logique : pour la serie M1, M2, M3 pas de pb mais pour A3, I3, Q3 et Y3 c'est pas le cas à moins que tu n'ai pas mis l'intégralité du code.

Peux-tu joindre un fichier?

A+

EDIT : bonsoir Excel-lent
 
Re : optimiser code

Salut lezepFred,

c'est mon erreur, la suite logique devrais être un saut de 5 valeurs
est t'il possible de créer une variable par exemple N(0,1) et le N indique un saut de 5

lequel je vais toujours pouvoir réutiliser juste à changer le 5 par 1 pour une autre macro

Je prépare un fichier et je l'envoie sous peu

merci
 
Re : optimiser code

Bonjour fil, LedZepfred et Excel-ent,

je mis suis retrouvé, j'ai pus créer un exemple dans excel
le principle fontionne très bien, mais pour seulement 5 objects,
je désire en avoir 50,
et je ne crois pas que cela serait optimal d'écrire la formule et changer les variables
une boucle serait plus efficient.

voici le fichier en question
 

Pièces jointes

Re : optimiser code

Salut bloomby,

effectivement, avec un fichier je comprends mieux. Pourquoi n'as-tu pas dit que les variables Mn représente un tableau????

essayes ceci

Code:
Private Sub Worksheet_Calculate()
Dim i, j As Integer
Dim ol As Object
Dim olmail As Object
Dim CurrFile As Object
Dim Msg, Style, Title, Response
Set ol = CreateObject("Outlook.Application")
Set olmail = ol.CreateItem(0)
j = 1
For i = 1 To 254 Step 11
    If Cells(5, i) <> M(j) Then '1
        M(j) = Cells(5, i)

    With olmail
        .To = "timeislimite@hotmail.com"
        .Subject = Cells(5, i)
        .Body = ": " & Cells(7, i) & "  : " & Cells(7, i + 1)
       ' .Attachments.Add "c:\data\essai.doc"
         '.Send
         .display
    'Debug.Print PlaySoundFileA("C:\Windows\Media\tada.wav")
    
    Call Sounds
    Msg = ": " & Cells(7, i) & "  : " & Cells(7, i + 1)
    Style = vbYesNoCancel + vbQuestion + vbDefaultButton1
    Title = Cells(5, i)
    Response = MsgBox(Msg, Style, Title)
    End With
    End If
j = j + 1
Next
End Sub

Puisque tu veux 50 variables il faut déclarer la variable M() comme ceci:

Code:
Dim M(50) As String

A tester...

Autre chose, tes différents tableaux de 2 colonnes sont espacées de 10 colonnes or 50 * 12 = 600, alors où tu me prends pour un américain ou tu travailles sous Excel 2007😀
Si tu es sous Excel 2007 : pas de pb
Si tu me prends pour un américain : diminue l'espace entre tes tableaux, le code fourni sera donc à adapter au niveau de cette ligne (sachant que pour excel 2003, le dernier multiple de 12 est 254 (limite de colonnes à 256)
Code:
For i = 1 To [COLOR="red"]254[/COLOR] Step [COLOR="Red"]11[/COLOR]
où 254 : la première colonne de ton dernier tableau et 11 est l'espace entre 2 tableaux (tu me suis???)
Dernière chose les tableaux sont gourmands en ressource, ne t'attends pas à des miracles en terme d'execution du code
a+
 
Dernière édition:
Re : optimiser code

Bonjour Forum, Fil et LedzepFred qui est en vacance 🙂,

J'ai trouvé la solution;

End With
Exit For
End If

maintenant j'aimerais que cette macro soit conditionnel
Par exemple si dans la cellule D3 c'est inscrit
"yes" l'alarme sonore est active

E3 "Yes" , l'envoie de email est Actif,

C'est donc dire que s'il n'est pas inscrit "Yes" la macro ne roule pas.
Est-ce possible à créer ?


Bloomby
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
11
Affichages
1 K
D
Réponses
4
Affichages
1 K
O
  • Question Question
Microsoft 365 Problème Exit sub
Réponses
9
Affichages
1 K
omario1995
O
Réponses
4
Affichages
992
D
Réponses
2
Affichages
950
D
Réponses
1
Affichages
1 K
  • Question Question
Microsoft 365 Code VBA - Erreur
Réponses
1
Affichages
772
Réponses
2
Affichages
732
S
Réponses
9
Affichages
2 K
Retour