problème avec if ... then.. else

  • Initiateur de la discussion Initiateur de la discussion Mariette31
  • 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 !

Mariette31

XLDnaute Nouveau
Bonjour à tous,
j'ai écris un script qui me permet de comparer des valeurs par rapport à une référence et de mettre en évidence si celle si est inférieure à la référence, en la mettant en rouge. si supérieure à la référence, elle copie colle sans rien toucher; (pathologique/non pathologique)
vu que j'ai 43 lignes à faire avec des valeurs de références différentes, j'ai écris 43 fois le même script en changeant bien sur les numéros de cellule.
j'ai un gros souci: mon script marche bien pour la première ligne mais pas les autres: ça se met toujours en rouge même quand la valeur est supérieure à la référence:
mon programme est le suivant (2 première lignes):
Sub Analyse()
Sheets("test").Select

If Application.WorksheetFunction.Sum(ActiveSheet.[G4]) < 0.5 Then
MsgBox "Attention intensité trop faible en pré-central gauche", vbCritical, "Attention"
Sheets("test").Select
Range("G4").Select
Selection.Copy
Sheets("Feuil1").Select
Range("H18").Select
ActiveSheet.Paste
Selection.Font.ColorIndex = 3
Selection.Font.Bold = True
Sheets("test").Select
Range("C4").Select
Selection.Copy
Sheets("Feuil1").Select
Range("B18").Select
ActiveSheet.Paste
Else: Sheets("test").Select
Range("G4").Select
Selection.Copy
Sheets("Feuil1").Select
Range("H18").Select
ActiveSheet.Paste
Sheets("test").Select
Range("C4").Select
Selection.Copy
Sheets("Feuil1").Select
Range("B18").Select
ActiveSheet.Paste
End If

If Application.WorksheetFunction.Sum(ActiveSheet.[G5]) < 0.6 Then
MsgBox "Attention intensité trop faible en pré-central droit", vbCritical, "Attention"
Sheets("test").Select
Range("G5").Select
Selection.Copy
Sheets("Feuil1").Select
Range("H19").Select
ActiveSheet.Paste
Selection.Font.ColorIndex = 3
Selection.Font.Bold = True
Sheets("test").Select
Range("C5").Select
Selection.Copy
Sheets("Feuil1").Select
Range("B19").Select
ActiveSheet.Paste
Else: Sheets("test").Select
Range("G5").Select
Selection.Copy
Sheets("Feuil1").Select
Range("H19").Select
ActiveSheet.Paste
Sheets("test").Select
Range("C5").Select
Selection.Copy
Sheets("Feuil1").Select
Range("B19").Select
ActiveSheet.Paste
End If
If Application.WorksheetFunction.Sum(ActiveSheet.[G6]) < 0.6 Then
Sheets("test").Select
Range("G6").Select
Selection.Copy
Sheets("Feuil1").Select
Range("H20").Select
ActiveSheet.Paste
Selection.Font.ColorIndex = 3
Selection.Font.Bold = True
Sheets("test").Select
Range("C6").Select
Selection.Copy
Sheets("Feuil1").Select
Range("B20").Select
ActiveSheet.Paste
Else: Sheets("test").Select
Range("G6").Select
Selection.Copy
Sheets("Feuil1").Select
Range("H120").Select
ActiveSheet.Paste
Sheets("test").Select
Range("C6").Select
Selection.Copy
Sheets("Feuil1").Select
Range("B20").Select
ActiveSheet.Paste
End If

qqun pourrait il me dire pourquoi ça ne marche pas pour chaque ligne alors qu'il s'agit exactement de la même programmation?
d'avance merci!
 
Re : problème avec if ... then.. else

Salut Mariette31 et le forum
Utilises les balises de code (icone # en mode avancé), ton code deviendra plus lisible.
Pas sûr de comprendre :
vu que j'ai 43 lignes à faire avec des valeurs de références différentes, j'ai écris 43 fois le même script en changeant bien sur les numéros de cellule.
Le but d'une macro est de le faire automatiquement, par une boucle, par exemple. Donc, la première étape, c'est de construire le traitement qu'on inclura dans la boucle.
Code:
If Application.WorksheetFunction.Sum(ActiveSheet.[G4]) < 0.5 Then
???? je suis un peu dans le vague, là. En lisant littéralement :
Si la somme de G4 de la feuille active est inférieure à 0,5 alors
- On est en VBA. Sauf si l'instruction de feuille de calcul est réellement avantageuse, utilise les instruction VBA
- Faire une somme d'une cellule ? Utilise directement la valeur de la cellule. Ce qui nous donne
Code:
If ActiveSheet.[G4] < 0.5 Then
Sauf des certains cas spécifiques, l'instruction Select est à proscrire.
Ce qui donne un traitement de la forme :
Code:
Sub Analyse()
Sheets("test").Select
Range("G4").Copy Sheets("Feuil1").Range("H18")
Range("C4").Copy Sheets("Feuil1").Range("B18")
If [G4] < 0.5 Then
    MsgBox "Attention intensité trop faible en pré-central gauche", vbCritical, "Attention"
    With Sheets("Feuil1").Range("H18")
        .Font.ColorIndex = 3
        .Font.Bold = True
    End With
End If
End Sub
On copie G4 et C4 de "Test" en H18 et B12 de "Feuil1"
Si G4 est inférieur à 0,5 => message et on colorie H18

Si c'est réellement ça le but de la macro...
Si on regrade tes autres codes donnés, on contate que
- G4 devient G5, G6...
- H18 devient H19, H20...
- C4 devient C5, C6...
- B18 devient B19, B20...
On a donc 4 variables dépendante de lignes qui s'incrémentent.
Point de départ : 4 arrivée 18, soit départ+14
dernier point de départ 4+42 (43 valeurs) soit 46
Ce qui nous donne :
Code:
Sub Analyse()
Dim X As Long
Sheets("test").Select
For X = 4 To 46
    Range("G" & X).Copy Sheets("Feuil1").Range("H" & (X + 14))
    Range("C" & X).Copy Sheets("Feuil1").Range("B" & (X + 14))
    If Range("G" & X) < 0.5 Then
        MsgBox "Attention intensité trop faible en pré-central gauche", vbCritical, "Attention"
        With Sheets("Feuil1").Range("H" & (X + 14))
            .Font.ColorIndex = 3
            .Font.Bold = True
        End With
    End If
Next X
End Sub
étant un code "simple", et ne sachant si c'est bien ce qu'on demande, je ne l'ai pas testé.
A+
 
- 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
1
Affichages
495
Réponses
11
Affichages
839
Réponses
22
Affichages
3 K
Retour