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 :

Vérification contenu cellules [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2020
    Messages : 20
    Points : 8
    Points
    8
    Par défaut Vérification contenu cellules
    Bonjour à tous,

    Je viens vers vous avec une problématique de macro vba.
    J'explique mon problème ...

    Je saisie quelque chose en A18.
    Uniquement si j'ai quelque chose en A18, je dois systématiquement entrer des valeurs en D18, E18, F18 et K18.

    J'ai fait ce code qui ne me donne pas le bon résultat ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If Range("a18") > 0 _
    Or Range("d18").Value = "" _
    Or Range("e18").Value = "" _
    Or Range("f18").Value = "" _
    Or Range("k18").Value = "" _
    Then
    MsgBox ("La ligne 18 n'est pas bien complétée !")
    Exit Sub
    Else: End If
    Pourriez-vous m'aider à le corriger svp ?

    Merci par avance !

    Nissaij

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 383
    Points : 659
    Points
    659
    Par défaut
    Bonjour,

    Citation Envoyé par Nissaij Voir le message
    C'est la première fois que je vois ça ! C'est très original ! Et très inutile !

    Essaye avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Range("A18").Value <> "" Then
        If Range("D18").Value = "" Or Range("E18").Value = "" Or Range("F18").Value = "" Or Range("K18").Value = "" Then
            MsgBox ("La ligne 18 n'est pas bien complétée !")
            Exit Sub
        End If
    End If
    Demain, je vais commencer par m'acheter des lunettes. Et après, je verrai bien.

  3. #3
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Avec 1 seule ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Range("A18").Value <> "" And Application.CountA(Range("D18"), Range("E18"), Range("F18"), Range("K18")) = 0 Then MsgBox ("La ligne 18 n'est pas bien complétée !")
    Cdlt

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 383
    Points : 659
    Points
    659
    Par défaut
    Bonjour ARTURO,

    J'aime bien ton code.
    Par contre je ne pense pas qu'on puisse faire ce qu'il veut en une seule ligne car il veut sortir de la procédure si la ligne est mal remplie, alors que ton code affichera un message puis continuera d'exécuter la suite.

    Je sais, je chipote !
    Demain, je vais commencer par m'acheter des lunettes. Et après, je verrai bien.

  5. #5
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour Mat,

    Tout à fait raison, j'ai zappé cette étape. merci pour cette remarque, bonne journée.

    Cdlt

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut

    @Arturo: Ton code vérifie qu'aucune cellule n'est remplie alors que la demande est de vérifier que les 4 cellules sont remplies (= 0 alors que tu aurais dû avoir < 4).

    Etant allergique à Exit Sub, je propose ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
      If Range("a18") <> "" Then
        If Application.CountA(Range("d18:f18,k18")) = 4 Then
          MsgBox "Ok" ' Ici, tu mets le code que tu souhaites exécuter lorsque tout est ok
        Else
          MsgBox "Veuillez compléter les données", vbExclamation
        End If
      End If
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour Pierre,

    Ce qui m'a induit en erreur, c'est le code déposé par Nissaij en premier, ou il y a présence de OR et non de AND, ce qui est contradictoire avec: la Uniquement si j'ai quelque chose en A18, je dois systématiquement entrer des valeurs en D18, E18, F18 et K18.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Range("a18") > 0 _
    Or Range("d18").Value = "" _
    Or Range("e18").Value = "" _
    Or Range("f18").Value = "" _
    Or Range("k18").Value = "" _
    Qu'en est-il réellement?

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Son code m'a aussi induit en erreur et pour les mêmes raisons, alors que le tien fonctionne bien sur le A rempli ET les autres (mais avec le problème du = 0 qui teste qu'ils sont tous vides alors qu'il doit tester qu'il y en a au moins un vide).


    Citation Envoyé par ARTURO83 Voir le message
    [...]
    Qu'en est-il réellement?
    L'avenir nous le dira, surtout qu'il faudra encore préciser si le code doit s'exécuter lorsque A est vide, ou si c'est un autre qui doit s'exécuter dans ce cas, ou si rien ne doit s'exécuter. A demande peu claire et incomplète, réponse(s) non adaptées à tous les coups...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2020
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Bonjour à tous,

    D'abord, merci pour vos réponses !

    Je vais tester vos propositions et reviens vers vous.

    Je dois vous avouez que je débute sans aucune connaissance/formation en vba, d'où le "Else:End If" ...
    Concrètement, j'ai écrit quoi en faisant cela ?

    Pour être plus clair sur ma demande, si je complète la cellule A18, je dois systématiquement compléter toutes les autres.
    Si il n'y a rien en A18, il n'y a pas de raison de vérifier les autres.

    Il s'agit de données de productions : je met une référence en A18 et on attend une quantité produite, des temps, des rebus ... dans les autres cellules.
    C'est une étape d'autocontrôle pour éviter les erreurs de saisie par nos collaborateurs.
    L'idée est de les prévenir que quand qu'ils ont oublié quelque chose.

    Si tout est ok, on passe à la suite du code.

    D'ailleurs, je complète ma demande.
    J'ai 10 lignes qui se suivent à vérifier de la sorte (de 18 à 28).
    On commence par compléter la ligne 18, puis 19, etc au cours de la journée et des productions.
    En fin de journée, le nombre de ligne remplies est variable et il faudrait vérifier chaque ligne indépendamment pour voir si les collaborateurs n'ont pas oublié une donnée de production.
    Si ils ont oublié quelque chose, leur signaler quelle ligne est concernée.

    J'aurai copié plusieurs fois le code en modifiant le numéro de ligne, mais peut être que vous avez une meilleure solution ?

    J'espère que j'ai pu être clair cette fois

    En vous remerciant encore !

    Nissaij

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Pour leur signaler, je m'orienterais vers une mise en forme conditionnelle en Excel. Ce serait le plus visuel. Ca n'empêche pas la vérification avant traitement, mais ça t'évitera le VBA qui doit préciser les lignes incomplètes.

    Après, si le traitement des données doit être effectué ligne par ligne, j'irais vers une procédure qui traite une ligne (par exemple selon son numéro) si elle est complète. Au passage, de 18 à 28, ça fait 11 lignes^^

    Mise en forme conditionnelle, ici placée uniquement sur la colonne A, lignes 18 à 27, mais tu peux adapter, bien sûr

    Nom : 2020-08-13_094100.png
Affichages : 728
Taille : 12,2 Ko

    Nom : 2020-08-13_094933.png
Affichages : 748
Taille : 7,2 Ko

    Pour le code, je verrais un truc du genre, si j'ai bien compris ton propos

    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 Process()
      Dim i As Long
      Dim Message As String
     
      For i = 18 To 27
        If Range("a" & i) <> "" Then
          If Application.CountA(Range("d" & i & ":f" & i & ",k" & i)) = 4 Then
            WorkWithRow i
          Else
            Message = Message & "La ligne " & i & " est incomplète" & vbLf
          End If
        End If
      Next
      If Message = "" Then Message = "Tout était ok"
      MsgBox Message
     
    End Sub
     
    Sub WorkWithRow(i As Long)
      ' Ici, le code qui traite réellement la ligne
    End Sub
    Nom : 2020-08-13_094959.png
Affichages : 720
Taille : 12,3 Ko



    Pour le Else: End If, tu n'as rien fait "de mal". Simplement, le Else: ne sert à rien puisque tu ne le traite pas. Il n'est intéressant que si tu traites le cas où la condition n'est pas remplie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      If a = 0 Then
        MsgBox "Ok"
      Else: End If
    Est similaire à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      If a = 0 Then
        MsgBox "Ok"
      End If

    Dans le cas où tu n'as qu'une instruction après le test, tu peux même écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If a = 0 Then MsgBox "Ok"
    Sans placer de End If
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2020
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Bonjour Pierre,

    Effectivement, la mise en forme conditionnelle est un bon moyen d'alerte.
    J'en ai déjà plusieurs dans mon document, mais je vais ajouter celle-ci.

    Je complète avec le code que tu proposes pour un double check et reviens vers toi.

    Merci beaucoup pour les explications.
    J'essaie d'apprendre en vba, mais c'est un peu compliqué au début ^^. On s'y perd vite !

    PS : hé oui, de 18 à 28, ça fait 11 lignes, erreur de ma part

    Nissaij

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2020
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    La macro fonctionne.
    J'ai néanmoins un petit parasite que je souhaiterai enlever.

    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
    Sub Process()
      Dim i As Long
      Dim Message As String
     
      For i = 18 To 29
        If Range("a" & i) <> "" Then
          If Application.CountA(Range("d" & i & ":f" & i & ",k" & i)) = 4 Then
            WorkWithRow i
          Else
            Message = Message & "La ligne " & i & " est incomplète." & vbLf
        End If
        End If
      Next
      If Message = "" Then Call Macro_export
      MsgBox Message
     
     End Sub
    L'idée est la suivante :
    - Si les données ne sont pas complètes, j'affiche le message d'alerte.
    - Si les données sont correctes, je n'affiche pas de message et j'appelle la macro d'export.

    Il y a juste une petite Msgbox qui s'affiche avec rien dedans avant de passer à la Macro_Export.
    J'aimerai la supprimer.

    Ça doit provenir du "MsgBox Message". Si je le supprime, je n'ai plus d'alerte quand il y a une erreur.

    Merci.

  13. #13
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Dans le code que je t'avais donné, l'idée était de traiter chaque ligne si elle était complète et donc, de traiter chaque ligne indépendamment des autres.

    Ici, tu sembles vouloir bloquer le traitement de toutes les lignes dès qu'une n'est pas complète. Ce n'est pas la même chose. Voici un code qui réalise cela (traitement de toutes les lignes si elles sont toutes complètes et traitement d'aucune ligne si une seule est incomplète). A toi de dire clairement ce que tu souhaites réaliser et dans quel cas.


    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 Process()
      Dim i As Long
      Dim Message As String
     
      For i = 18 To 27
        If Range("a" & i) <> "" And Application.CountA(Range("d" & i & ":f" & i & ",k" & i)) < 4 Then _
          Message = Message & "La ligne " & i & " est incomplète" & vbLf
      Next
      If Message = "" Then
        Macro_Export
      Else
          MsgBox Message
      End If
     
    End Sub
     
    Sub Macro_Export()
      ' ici, le traitement de toutes les lignes
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2020
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Pierre,

    Tout est ok, merci pour le complément.

    Toutes mes excuses pour le manque de précision de ma demande.

    Merci également aux autres personnes qui ont accordé du temps à ma demande.

    Je vous souhaite une bonne journée.

    Nissaij

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

Discussions similaires

  1. [XL-2010] Macro vérification contenu de cellule
    Par azmodan31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/02/2013, 17h14
  2. pied de page ==> contenu cellule
    Par toutyx dans le forum Excel
    Réponses: 3
    Dernier message: 23/05/2007, 17h27
  3. BO - Contenu cellule html
    Par rickar dans le forum Designer
    Réponses: 2
    Dernier message: 12/03/2007, 12h34
  4. [VBA-E]Contenu cellule dans array
    Par Darkhin dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/02/2007, 02h31
  5. [VBA-E] contenu cellule excel > 255 caractères ? Comment ?
    Par Lenzo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 09/02/2007, 01h04

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