VBA

Résolu
flyersgoaler Messages postés 35 Statut Membre -  
flyersgoaler Messages postés 35 Statut Membre -
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

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. flyersgoaler Messages postés 35 Statut Membre
       
      Merci beaucoup!
      0