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 :

Comparaison deux cellules d'une même ligne sur une boucle d'une plage


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juillet 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 29
    Points : 21
    Points
    21
    Par défaut Comparaison deux cellules d'une même ligne sur une boucle d'une plage
    Bonjour,

    J'ai créer une boucle sur une plage de données (H1:I25) pour laquelle les valeurs sont des dates de contrôle technique (H1:H25) et de contrôle anti-pollution (I1:I25) pour un parc automobile.

    Je souhaite comparer les valeurs des deux cellules sur chaque ligne afin d'éviter d'afficher deux fois mon message d'alerte sur le même véhicule, à savoir que lorsque la date des deux cellules sont identiques sur la même ligne, je ne souhaite afficher qu'un message d'alerte sur la première colonne (contrôle technique) et non avoir deux messages sur les deux dates.

    J'espère être suffisamment clair pour que vous puissiez me comprendre et je vous livre mon premier code qui m'affiche deux messages lorsque les dates sont identiques :
    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
    Sub auto_open()
    Dim Cellule As Variant
    Dim cellule1 As Variant
    Application.ScreenUpdating = False
    'Pour chaque date de la colonne H
    For Each Cellule In Range("H2:H25")
        'Si une date est inférieure à celle d'aujourd'hui ou arrive à échéance dans 30 jours
        'alors affiche le texte de la cellule correspondante s'affiche comme alerte
        If Cellule <= Date + 30 And Cellule <> "" _
        Then MsgBox "Attention : le contrôle technique du véhicule " & (Cellule.Offset(0, -5).Value) & " - " & (Cellule.Offset(0, -4).Value) _
        & " arrive à échéance le " & (Cellule.Offset(0, 0).Value) & " !", vbExclamation, "Message d'alerte C.T."
    Next
     
    For Each cellule1 In Range("I2:I25")
        If cellule1 <= Date + 30 And cellule1 <> "" _
        Then MsgBox "Attention : le contrôle anti-pollution annuel du véhicule " & (cellule1.Offset(0, -6).Value) & " - " & (cellule1.Offset(0, -5).Value) _
        & " arrive à échéance le " & (cellule1.Offset(0, 0).Value) & " !", vbExclamation, "Message d'alerte Contrôle anti-pollution annuel"
     
    Next
    Application.ScreenUpdating = True 'Facultatif
    End Sub
    Y a-t-il un moyen d'imbriquer ces deux boucles pour n'en faire qu'une ? Ou existe-t-il une autre solution à mon problème ?

    Merci d'avance pour votre aide.

    Cordialement.

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Teste si ça convient :
    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
     
    Sub auto_open()
     
        Dim Cellule As Range
     
        'Pour chaque date de la colonne H
        For Each Cellule In Range("H2:H25")
            'Si une date est inférieure à celle d'aujourd'hui ou arrive à échéance dans 30 jours
            'alors affiche le texte de la cellule correspondante s'affiche comme alerte
            If Cellule.Value <= Date + 30 And Cellule.Value <> "" _
            Then MsgBox "Attention : le contrôle technique du véhicule " & (Cellule.Offset(0, -5).Value) & " - " & (Cellule.Offset(0, -4).Value) _
            & " arrive à échéance le " & (Cellule.Value) & " !", vbExclamation, "Message d'alerte C.T."
     
            If Cellule.Offset(, 1).Value <= Date + 30 And Cellule.Value <> Cellule.Offset(, 1).Value And Cellule.Value <> "" _
            Then MsgBox "Attention : le contrôle anti-pollution annuel du véhicule " & (Cellule.Offset(0, -5).Value) & " - " & (Cellule.Offset(0, -4).Value) _
            & " arrive à échéance le " & (Cellule.Offset(, 1).Value) & " !", vbExclamation, "Message d'alerte Contrôle anti-pollution annuel"
     
        Next
     
    End Sub

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Sauf erreur, sauf pour des besoins d'apprentissage du VBA, des fonctions standards Excel peuvent vous donner le résultat, non? (sans MsgBox)

    Exemple (Excel anglais)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MARQUE	TYPE	IMMATRIC	CTR TECH	CTR ANTIP	CTR TECH ALERT	CTR AP ALERT	COL E	COL F
    CITROEN	C3	TITI1	8-sept.-15	18-juil.-15	ALERTE CT 1	(CT TECH)	=IF(ISNUMBER(D2), IF(D2<NOW()+30, "ALERTE CT 1", ""), "ALERTE CT 0")	=IF(AND(ISNUMBER(E2),F2=""),IF(E2<NOW()+30,"ALERTE CAP 1",""),"(CT TECH)")
    CITROEN	DS4	TITI2	18-juil.-15	15-août-15	ALERTE CT 1	(CT TECH)		
    CITROEN	2CV	TITI3	15-août-15	20-août-15	ALERTE CT 1	(CT TECH)		
    PEUGEOT	308	TITI4	24-oct.-15	1-sept.-15		ALERTE CAP 1		
    PEUGEOT	407	TITI5	5-nov.-15	8-sept.-15		ALERTE CAP 1		
    CITROEN	C8	TITI6	1-sept.-15	11-sept.-15	ALERTE CT 1	(CT TECH)		
    PEUGEOT	4008	TITI7	11-sept.-15	15-oct.-15	ALERTE CT 1	(CT TECH)		
    RENAULT	ESPACE	TITI8		24-oct.-15	ALERTE CT 0	(CT TECH)		
    RENAULT	CLIO	TITI9	15-oct.-15	5-nov.-15				
    RENAULT	TWINGO	TITI10	20-août-15		ALERTE CT 1	(CT TECH)
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  4. #4
    Membre à l'essai
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juillet 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Bonjour à tous,

    Merci Theze,

    C'est exactement ce qui me fallait.

    J'ai encore appris des choses aujourd'hui grâce à toi.

    Au plaisir.

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/03/2014, 11h03
  2. Fonction si sur plusieurs cellules d'une même ligne
    Par sangoben dans le forum Excel
    Réponses: 2
    Dernier message: 01/07/2010, 08h33
  3. Réponses: 23
    Dernier message: 20/05/2009, 12h47
  4. Différence entre 1 même champ sur 2 enregistrements d'une même table
    Par manulemalin dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/02/2008, 09h47
  5. [DEBUTANT] Changer une même ligne sur la console
    Par mr_samurai dans le forum Débuter
    Réponses: 7
    Dernier message: 20/12/2007, 15h07

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