IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Composer les code IF/OR


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Février 2010
    Messages : 5
    Par défaut Composer les code IF/OR
    Bonjour à tous,

    Pouvez-vous m'aider ? J'ai un code vba sous xls qui dit ceci :
    Si la cellule de la colonne B est remplie, il est impossible d'enregistrer le document tant que les cellules C-D-E-F-H-I-J-K-N-O ne sont pas remplies.
    Ce code fonctionne parfaitement.
    Ma demande est la suivante :
    Je souhaite ajouter à ce code une autre vérification qui dit que Si la cellule de la colonne B ou C ou D ou E ou F ou H ou I ou J ou K ou N ou O n'est pas remplie, qu'il est impossible d'enregistrer le document tant que les cellules C-D-E-F-H-I-J-K-N-O ne sont pas remplies
    .

    Ci-dessous le code VBA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Private Sub Workbook_Beforesave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
     
        For I = 17 To 97
            'On vérifie que des modifications sont indiquées
            If Sheets("Semaines bloquées").Range("B" & I).Value <> "" Then
                'On vérifie que Action est bien rempli
                If Sheets("Semaines bloquées").Range("C" & I).Value = "" Then
                    Cancel = True
                End If
                If Sheets("Semaines bloquées").Range("D" & I).Value = "" Then
                    Cancel = True
                End If
                If Sheets("Semaines bloquées").Range("E" & I).Value = "" Then
                    Cancel = True
                End If
                If Sheets("Semaines bloquées").Range("F" & I).Value = "" Then
                    Cancel = True
                End If
                If Sheets("Semaines bloquées").Range("H" & I).Value = "" Then
                    Cancel = True
                End If
                If Sheets("Semaines bloquées").Range("I" & I).Value = "" Then
                    Cancel = True
                End If
                If Sheets("Semaines bloquées").Range("J" & I).Value = "" Then
                    Cancel = True
                End If
                If Sheets("Semaines bloquées").Range("K" & I).Value = "" Then
                    Cancel = True
                End If
                If Sheets("Semaines bloquées").Range("N" & I).Value = "" Then
                    Cancel = True
                End If
                If Sheets("Semaines bloquées").Range("O" & I).Value = "" Then
                    Cancel = True
                End If
            End If
        Next
     
        If Cancel = True Then MsgBox "Sauvegarde impossible car les cellules jaunes sont non remplies"
     
    End Sub
    Voilà et en tout état de cause, je vous remercie d'une éventuelle assistance.

    Ronald

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut RMA1969 et le forum
    Utilise les balises code (#) pour les macros, c'est plus lisible.

    Il faut réfléchir différemment. Regardes ce que j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub Workbook_Beforesave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    With Sheets("Semaines bloquées")
        For I = 17 To 97
        'Pour les lignes de 17 à 97
            If .Range("B" & I) & .Range("C" & I) & Range("D" & I) & .Range("E" & I) & .Range("F" & I) & .Range("H" & I) & _
                   .Range("I" & I) & .Range("J" & I) & .Range("K" & I) = "" & .Range("N" & I) & .Range("O" & I) = "" Then
            ' une cellule au moins n'est pas vide alors
                If .Range("B" & I) = "" Or .Range("C" & I) = "" Or .Range("D" & I) = "" Or _
                   .Range("E" & I) = "" Or .Range("F" & I) = "" Or .Range("H" & I) = "" Or _
                   .Range("I" & I) = "" Or .Range("J" & I) = "" Or .Range("K" & I) = "" Or _
                   .Range("N" & I) = "" Or .Range("O" & I) = "" Then Cancel = True
                'si toutes les cellules ne sont pas remplies, cancel= vrai
                Exit For
                'sortir de la boucle
            End If
        Next
    End With
    If Cancel Then MsgBox "Sauvegarde impossible car les cellules jaunes sont non remplies"
    End Sub
    C'est la même chose que ce que tu demandes : si une des cellules n'est pas vide, toutes doivent être remplies (c'est ce que j'ai compris). Donc, je les concatène toutes, et si le résultat n'est pas vide, c'est qu'une au moins est remplie. Donc je teste qu'aucune n'est vide et si ce n'est pas le cas, cancel est à True.
    Les fonctions ET et OU sont "interchangeables" avec quelques petites modifications
    A+

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    Bonjour,

    A moins d'avoir mal compris la demande, je verrais personnellement ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Workbook_Beforesave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
        Dim plage As Range, c As Range
        Set plage = Sheets("Semaines bloquées").Range("C" & 17, "O" & 97)
        For Each c In plage
          If Range("B" & c.Row) <> "" And c.Value = "" Then
            MsgBox "Sauvegarde impossible car les cellules jaunes sont non remplies"
             Cancel = True
            Exit For
          End If
        Next
        Set plage = nothing: Set c = Nothing
    End Sub
    EDIT : et j'agiliserais en ne lançant la boucle For Each que si nécessaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If plage.SpecialCells(xlCellTypeBlanks).Count Then 
    ....

Discussions similaires

  1. Comment copier les codes dans le composant AdvCodeList ?
    Par Triste dans le forum Composants VCL
    Réponses: 1
    Dernier message: 30/10/2007, 13h25
  2. Composant pour les codes à barres
    Par Bourak dans le forum Composants VCL
    Réponses: 5
    Dernier message: 11/11/2005, 17h45
  3. Intercepter les codes d'erreurs Interbase
    Par tintin22 dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/06/2005, 16h31
  4. Intercepter les codes d'erreurs Interbase
    Par tintin22 dans le forum InterBase
    Réponses: 1
    Dernier message: 14/06/2005, 21h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo