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 :

Comparer des cellules de colonnes discontinue 2 à 2 avant de lancer une Macro [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingenieur Performance
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingenieur Performance

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Par défaut Comparer des cellules de colonnes discontinue 2 à 2 avant de lancer une Macro
    Bonjour a tous,

    Je suis debutant sur VBA et j'ai le probleme suivant :

    J'aimerais avant de lancer une Macro verifier que lorsque qu'une cellule A1 de la colonne A n'est pas vide, la cellule C1 de la colonne C n'est pas vide egalement.
    Je voudrais le faire sur une range discontinue (Exemple : de A1:A10 puis A15:A25 puis A30:A40, etc.) et afficher une Message Box indiquant la ligne ou l'erreur est presente.

    Lorsqu'il n'y a plus d'erreur, j'aimerais lancer une autre Macro.

    PS : J'ecris depuis un clavier Anglais, veuillez donc m'excuser pour les accents !

    Un enorme merci d'avance,

    Alex

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Et quel code as-tu au moins tenté d'écrire à cette fin ?

  3. #3
    Membre habitué
    Homme Profil pro
    Ingenieur Performance
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingenieur Performance

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Par défaut
    Bonjour !

    J'ai tente d'ecrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Test()
    If Sheets(1).Range("A5:A15,A20:A30") <> "" And Sheets(1).Range("B5:B15,B20:B30") = "" Then
    MsgBox ("Il manque une valeur !")
    Else
    Call Macro1
    End If
    End Sub
    Un enorme merci d'avance !

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Constitue simplement une plage (appelons-la toto) des cellules concernées de la colonne A, puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim toto As Range, c As Range
    Set toto = Range("A1:A10")
    For Each c In toto.Cells
      If c.Value = "" And c.Offset(0, 1).Value = "" Then
        '... tes instructions
      End If
    Next

    Observation : ton exposé ne montrant pas si les colonnes A et B contiennent ou non des résultats de formules, j'ai proposé un code passe-partout
    Si sans formules, on pourrait aller plus vite avec la page des constantes.

  5. #5
    Membre habitué
    Homme Profil pro
    Ingenieur Performance
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingenieur Performance

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Par défaut
    Bonjour, merci beaucoup pour ta reponse,

    Voici mon code adapte :

    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
     
    Sub Macro1()
    Range("A1") = "Good"
    End Sub
     
    Sub Test()
    Dim toto As Range, c As Range
    Set toto = Range("A5:A15,A20:A30")
    For Each c In toto.Cells
      If c.Value <> "" And c.Offset(0, 1).Value = "" Then
     
        MsgBox ("Il manque une valeur !")
    Else
    Call Macro1
    End If
     
    Next
    End Sub
    Il me reste 2 questions :

    - Avec ce code, la Macro teste chaque ligne mais me propose un message par ligne (Soit elle m'affiche la Message Box soit elle met "Good" en A1. Comment faire pour que si jamais il n'y a ne serait ce qu'une seule ligne ou il y a une valeur presente en A et non en B il m'affiche uniquement la message Box
    - Deuxiemement est-il possible d'afficher dans la message box la ligne sur laquelle il y'a une erreur ?

    Merci infiniment !

    Alex

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Pourquoi créer une macro1, alors que tu pourrais mettre l'instructino directement dans ta macro principale?
    Tu peux utiliser une variable de contrôle, qui contrôlerait si ta condition est vérifiée au moins une fois : cf. code ci-dessous (comprends-tu la logique?)
    En ce qui commence le numero de ligne : il suffit de récupérer le numero de ligne de la cellule c conernée, grâce à la propriété Row (cf. dans la message box)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Test()
    Dim toto As Range, c As Range
    Dim controle As Boolean
    controle = False      'on l'intialise en supposant qu'il n'y a aucune valeur qui manque
    Set toto = Range("A5:A15,A20:A30")
    For Each c In toto.Cells
      If c.Value <> "" And c.Offset(0, 1).Value = "" Then
        MsgBox ("Il manque une valeur en ligne n° " & c.Row & " !")
        controle = True         'si on entre dans cette condition : on a une valeur qui manque, à partir de maintenant controle sera toujours égal à True
    End If
    Next
    If controle = False Then Range("A1").Value = "Good"         'Si aucune valeur ne manque controle = False et donc on écrit "Good"
    End Sub
    Au passage, au lieu d'avoir une message box par ligne fausse, tu peux récupérer les numéros de ligne pendant la boucle, puis faire une seule message box à la fin. Au cas où, il y a beaucoup de lignes fausses, cela t'éviteras d'avoir plein de message boxs.
    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
    Sub Test()
    Dim toto As Range, c As Range
    Dim controle As Boolean
    Dim lignes As String
    controle = False      'on l'intialise en supposant qu'il n'y a aucune valeur qui manque
    Set toto = Range("A5:A15,A20:A30")
    For Each c In toto.Cells
      If c.Value <> "" And c.Offset(0, 1).Value = "" Then
         lignes = lignes & " - " & c.Row
         controle = True         'si on entre dans cette condition : on a une valeur qui manque, à partir de maintenant controle sera toujours égal à True
    End If
    Next
    If controle = False Then 
        Range("A1").Value = "Good"         'Si aucune valeur ne manque controle = False et donc on écrit "Good"
    Else
        MsgBox "Il manque des valeurs aux lignes : " & Right(lignes, Len(lignes) - 2) & " !"
    End If
     
    End Sub
    Right(lignes, Len(lignes) - 2) permet d'avoir la chaine de caractère lignes sans les deux premiers caractères, car les premiers caractères seront " -"

    Dis-moi si ça te convient

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

Discussions similaires

  1. [XL-2013] Comparer des cellules dans une meme colonne, et faire la sommes des critères
    Par savaryb dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/02/2015, 17h28
  2. [XL-2003] comparer des cellules d une meme colonne entre elles
    Par TEnergie dans le forum Excel
    Réponses: 4
    Dernier message: 05/04/2012, 14h50
  3. [VB6] Manipuler des cellules/lignes/colonne d'un Flexgrid
    Par zako dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 08/06/2006, 18h34
  4. [VBA-E] Comparer des cellules
    Par lutin06 dans le forum Macros et VBA Excel
    Réponses: 34
    Dernier message: 28/04/2006, 16h24
  5. [VBA-E] Comparer des cellules
    Par lutin06 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/04/2006, 10h22

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