Création d'un script vériffiant les donnés.

Résolu
Elhyra Messages postés 24 Statut Membre -  
Elhyra Messages postés 24 Statut Membre -
Bonjour,

Voilà, cela fait maintenant quelques jours que j'essaye de créer une sorte de petit .exe ou une macro afin de vérifier toute une colonne à l'aide de conditions. Je cherche à faire un éxécutable ou un fichier qui serait réutilisable .Cela me ferait gagner un temps fou lors de la vérifications des donnés dans un tableau pour voir si il est bien remplie. Je m'explique :

J'aimerais créer un script qui fait que lorsque l'on clique dessus cela nous montre un message d'erreur avec le numéro de la ligne fausse, entouré ou surligné en rouge de préférence.

Exemple :



J'aimerais par exemple créer cela : Si la colonne B désignation contient plus de 20 caractères, alors surligner la ligne concerné et ouvrir une box affichant la ligne erroné. Ou bien, Si la colonne C Prix 1 contient des caractères $-€ etc.. alors surligner la ligne en rouge ouvrir une box et ainsi de suite.

Attention, je connais déjà la validation de données, et ce n'est pas ce que je veux. Je cherche une sorte de validation de données mais qu'on exécute et qui est sauvegardable sous forme de fichier.

Je n'ai pas besoins d'une solution avec un code tout fait, simplement d'une base et d'un exemple pour me repérer par la suite et le reproduire.

Merci d'avoir pris connaissance de ma requête, en vous souhaitant une bonne journée !

2 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Je n'ai pas besoins d'une solution avec un code tout fait

    C'est très bien.

    Voir ceci pour faire une recherche dans une colonne:

    https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel

    et cela pour connaitre le nombre de caractères d'une cellule:

    https://silkyroad.developpez.com/VBA/ManipulerChainesCaracteres/#LI-A

    pour mettre une ligne en couleur sers-toi de l'enregistreur de macro, tu auras ton code

    voilà et bon courage

    1
    1. Elhyra Messages postés 24 Statut Membre
       
      Merci de ta réponse rapide Je vais voir tout cela et essayez de faire quelque chose avec. Je laisse le sujet en non-résolue pour le moment, au cas ou j'aurais un soucis durant mes recherches.

      Bonne journée à toi !
      0
    2. Elhyra Messages postés 24 Statut Membre
       
      Hello,

      J'ai passé le week-end à essayé de trouver quelque chose sans jamais tomber sur quelque chose de bon, si jamais tu as une idée, un exemple de code ou bien si une personne l'a je serais preneur pour m'en inspirer !

      Encore merci !
      0
  2. Elhyra Messages postés 24 Statut Membre
     
    Bonjour,

    Up ! Après avoir passé le week-end à essayer quelque chose je suis toujours sur une mauvaise piste, si jamais quelqu'un à une idée, je suis preneur !

    Bonne journée à vous !
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Voir ceci pour boucler sur une colonne:

      https://www.developpez.net/forums/d605223/logiciels/microsoft-office/excel/contribuez/boucles-parcourir-colonne-ligne-plage-donnees-2-methodes/

      et cela pour les couleurs:

      https://www.excel-pratique.com/fr/vba/couleurs.php

      ce qui donne:

      Option Explicit
      Dim FL1 As Worksheet, NoCol As Integer
      Dim NoLig As Long, Var As Variant
      Private Sub CommandButton1_Click()
         Columns("B:C").Font.ColorIndex = xlAutomatic 'rétabli la couleur auto
      bouclecolonneB
      bouclecolonneC
      End Sub
      'https://www.excel-pratique.com/fr/vba/couleurs.php
      Sub bouclecolonneB()
          Set FL1 = Worksheets("Feuil1")
          NoCol = 2 'lecture de la colonne B
          For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
              Var = FL1.Cells(NoLig, NoCol)
             If Len(Var) > 20 Then
              Rows(NoLig & ":" & NoLig).Font.Color = RGB(255, 0, 0) 'rouge
             MsgBox "ligne a trouvé"
             End If
          Next
          Set FL1 = Nothing
      End Sub
      'https://www.developpez.net/forums/d605223/logiciels/microsoft-office/excel/contribuez/boucles-parcourir-colonne-ligne-plage-donnees-2-methodes/
      Sub bouclecolonneC()
          Set FL1 = Worksheets("Feuil1")
          NoCol = 3 'lecture de la colonne C
          For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
              Var = FL1.Cells(NoLig, NoCol)
              If IsNumeric(Var) Then
              Else
              Rows(NoLig & ":" & NoLig).Font.Color = RGB(255, 0, 0) 'rouge
             MsgBox "ligne a trouvé"
          End If
          Next
          Set FL1 = Nothing
      End Sub
      



      Voilà

      @+ Le Pivert
      0
    2. Elhyra Messages postés 24 Statut Membre
       
      Hello !

      C'est parfait merci beaucoup c'est ce que je voulais ! Je voulais savoir une dernière chose, est-ce possible de fusionner le code pour vérifier toutes les colonnes en même temps ou il est obligé d'avoir une macro par colonne ?

      En tout cas, merci énormément, cela me fait gagner un temps fou.
      0
    3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      voir l'exemple 4 pour parcourir plusieurs colonnes ici:

      https://www.developpez.net/forums/d605223/logiciels/microsoft-office/excel/contribuez/boucles-parcourir-colonne-ligne-plage-donnees-2-methodes/

      Mais tu ne peux lui demander de ne faire qu'une seule recherche!

      Si tu veux que le code soit plus fluide si la recherche est longue mettre ceci au début:

      Application.ScreenUpdating = False
      


      et rétablir a la fin:

      Application.ScreenUpdating = True
      


      @+
      0
    4. Elhyra Messages postés 24 Statut Membre > cs_Le Pivert Messages postés 8437 Statut Contributeur
       
      Okay, merci beaucoup du coup je les met au tout début du code et tout à la fin du code ?

      Et une autre chose, par exemple pour sélectionner les autres colonnes je n'ai plus qu'a rajouter par exemple :


      Sub bouclecolonneD()
      Set FL1 = Worksheets("Feuil1")
      NoCol = 4 'lecture de la colonne D
      For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
      Var = FL1.Cells(NoLig, NoCol)
      If IsNumeric(Var) Then
      Else
      Rows(NoLig & ":" & NoLig).Font.Color = RGB(255, 0, 0) 'rouge
      MsgBox "ligne a trouvé"
      End If
      Next
      Set FL1 = Nothing
      End Sub



      Puis remplacer ça :

       Private Sub CommandButton1_Click()
      Columns("B:C").Font.ColorIndex = xlAutomatic 'rétabli la couleur auto
      bouclecolonneB
      bouclecolonneC
      End Sub


      Par ça ? :

      Private Sub CommandButton1_Click()
      Columns("B:C:D").Font.ColorIndex = xlAutomatic 'rétabli la couleur auto
      bouclecolonneB
      bouclecolonneC
      bouclecolonneD
      End Sub
      0
    5. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      comme ceci:

      Private Sub CommandButton1_Click()
      Columns("B:D").Font.ColorIndex = xlAutomatic 'rétabli la couleur auto
      bouclecolonneB
      bouclecolonneC
      bouclecolonneD
      End Sub
      0