VBA

Résolu
flyersgoaler Messages postés 29 Date d'inscription   Statut Membre Dernière intervention   -  
flyersgoaler Messages postés 29 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Voici le code que j'ai créé pour afin de vérifier si mon fichier contient des erreurs. Je fais plusieurs vérifications de ce genre pour assurer la qualité des données :

If Range("E" & y) = "Rouge" Then
If Range("AG" & y).Value <> 0 Then
Sheets(4).Range("A1").Value = "Projet " & Range("B" & y) & Chr(32) & Range("AE" & y) & " : Rouge n'est pas la bonne couleur."
Sheets(4).Range("A1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End If
End If


If Range("AK" & y) = "Soleil" Then
If Len(Range("AD" & y)) < 5 Then
Sheets(4).Range("A1").Value = "Projet " & Range("B" & y) & Chr(32) & Range("AE" & y) & " : Soleil est en erreur"
Sheets(4).Range("A1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End If
End If



Mon problème est que puisque j'ai plusieurs vérifications de ce genre, ajouter le code en gras ci-haut alourdi et rend plus pénible la lecture du code. De ce fait, je voudrais savoir si c'était possible de "setter" x, par exemple, au code en gras afin de ne pas avoir à l'écrire toujours au long. En bref, ce que je voudrais, au lieu de :

Sheets(4).Range("A1").Value = "Projet " & Range("B" & y) & Chr(32) & Range("AE" & y) & " : Soleil est en erreur"
Sheets(4).Range("A1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove


avoir quelque chose qui pourrait plus ressembler à ceci :

Set Message = Sheets(4).Range("A1").Value = "Projet " & Range("B" & y) & Chr(32) & Range("AE" & y) & " 

Set Insertion = Sheets(4).Range("A1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

Puis, pour chaque chose que je vérifie, le code ressemblerait à ceci : 
If Range("E" & y) = "Rouge" Then
If Range("AG" & y).Value <> 0 Then
Message :Rouge n'est pas la bonne couleur."
Insertion
End If
End If


If Range("AK" & y) = "Soleil" Then
If Len(Range("AD" & y)) < 5 Then
Message: Soleil est en erreur"
Insertion
End If
End If




Merci!

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,

Pour le message, tu peux utiliser une fonction personnalisée :
Private Function Message(Sujet As String, Ligne As Long) As String
    Select Case UCase(Sujet)
        Case "ROUGE"
            Message = "Projet " & Range("B" & Ligne) & Chr(32) & Range("AE" & Ligne) & " : Rouge n'est pas la bonne couleur."
        Case "SOLEIL"
            Message = "Projet " & Range("B" & Ligne) & Chr(32) & Range("AE" & Ligne) & " : Soleil est en erreur"
    End Select
End Function


Pour l'insertion, tu peux utiliser une Sub (pas très utile pour une seule ligne de code) :
Private Sub Insere()
    Sheets(4).Range("A1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub


Ton code d'appel devient donc :

If Range("E" & y) = "Rouge" Then
    If Range("AG" & y).Value <> 0 Then
        Sheets(4).Range("A1").Value = Message("Rouge", y)
        Insere
    End If
End If

If Range("AK" & y) = "Soleil" Then
    If Len(Range("AD" & y)) < 5 Then
        Sheets(4).Range("A1").Value = Message("Soleil", y)
        Insere
    End If
End If


A noter, tu peux utiliser AND dans ton test If.
Ainsi ton code d'appel devient :
If Range("E" & y) = "Rouge" And Range("AG" & y).Value <> 0 Then
    Sheets(4).Range("A1").Value = Message("Rouge", y)
    Insere
End If

If Range("AK" & y) = "Soleil" And Len(Range("AD" & y)) < 5 Then
    Sheets(4).Range("A1").Value = Message("Soleil", y)
    Insere
End If
1
flyersgoaler Messages postés 29 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup!
0