Macro de controles

Save92

XLDnaute Nouveau
Bonjour je suis actuellement sur une macro ou je dois effectuer differents controles sur plusieurs données. Je suis débutant en VBA mais j'ai déjà trouvé quelques pistes, je vous demande conseil pour ce que je n'ai pas trouver ou que je n'arrive pas à utiliser. Merci.
Tous d'abord j'ai deux colonnes (E et F) avec des dates, la premiere avec les dates de début (obligatoire) et la deuxieme les dates de fin (facultatif). Je dois controler que les dates de debut sont non vide et que le format des dates est respecter (A peu près reussi)
Code:
Sub TestDate()
Dim rg As Range
Dim bValid As Boolean

'on commence au début de la liste de date
Set rg = ActiveSheet.Range("E1")

bValid = True          'vrai par défaut, date format  valide
Do Until IsEmpty(rg)    'on suppose qu'il n'y a pas de lignes vides
   
   
    'vérifier si c'est une date valide ou non
    If Not IsDate(rg) Then
        rg.Interior.ColorIndex = 3  'en rouge
        bValid = False  'on met à faux
    End If
   
    'vérifier si la date ne correspond pas au mois
    On Error Resume Next
    If bValid Then  'si format date valide alors
        If Month(rg) <> ActiveSheet.Range("H1") And _
            Year(rg) <> ActiveSheet.Range("J1") Then
            rg.Interior.ColorIndex = 6  'en jaune
End If
    End If

    bValid = True
    Set rg = rg.Offset(1, 0)
Loop
End Sub

Par contre je n'arrive pas à trouver le moyen de dire : Si la date de fin (sur la colonne F donc à droite) est remplie alors la date de début doit etre inférieure ou égale à la date de fin.
Merci
 

Save92

XLDnaute Nouveau
Re : Macro de controles

Bonjour,
Voila j'ai un petit problème pour lancer ma macro, j'ai créer un bouton et je l'ai affecter à la macro. Le problème c'est que j'ouvre un autre classeur contenant les données qui se nomme "Table des except 20110929.xls", et chaques fichier à une date différentes, comment lancée ma macro avec le bouton pour que cela ce fasse sur l'autre classeur?
Je dois demander le nom du fichier à l'utilisateur précédement le lancement?
Merci
Save
 

Save92

XLDnaute Nouveau
Re : Macro de controles

Bonjour Nicolas, voila je me suis rendu compte que j'avais une erreur dans la gestion des doublons, si un numero est dans la colonne A, et qu'il n'y as pas de numero dans les case B ou B et C, alors si jamais une une ligne à le meme numéro dans la colonne A et un numero en B ou en B ou C, il est considéré comme un doublon, ainsi qu'une ligne ou il est renseigné les colonne A et B alors si une autre ligne à les meme numéro en A et B plus un numero en C alors c'est un doublon, peux tu m'aider à voir qu'elle condition je dois changer dans le code stp? Merci

Code:
For Each rg In Range("A2:A" & Range("A65536").End(xlUp).Row)

    ' Test sur les colonnes NIC et CD selon critere predefini
   If rg.Offset(0, 2).Value <> "" And Len(rg.Offset(0, 2)) = 7 Then ' cas Colonne CD OK
       rg.Offset(0, 2).Interior.ColorIndex = xlNone
        If rg.Offset(0, 1).Value <> "" And Len(rg.Offset(0, 1)) = 5 Then ' cas Colonne NIC OK
           rg.Offset(0, 1).Interior.ColorIndex = xlNone
        Else ' Si colonne NIC vide ou longueur non valide
           rg.Offset(0, 1).Interior.ColorIndex = 3
        End If
       
    ElseIf rg.Offset(0, 2).Value <> "" And Len(rg.Offset(0, 2)) <> 7 Then ' Cas Colonne CD nonvide mais pas ok
       rg.Offset(0, 2).Interior.ColorIndex = 3
        If rg.Offset(0, 1).Value <> "" And Len(rg.Offset(0, 1)) = 5 Then ' cas Colonne NIC OK
           rg.Offset(0, 1).Interior.ColorIndex = xlNone
        Else ' Si colonne NIC vide ou longueur non valide
           rg.Offset(0, 1).Interior.ColorIndex = 3
        End If
    ElseIf rg.Offset(0, 2).Value = "" Then ' cas Colonne CD vide
       rg.Offset(0, 2).Interior.ColorIndex = xlNone
        If rg.Offset(0, 1).Value <> "" And Len(rg.Offset(0, 1)) = 5 Then ' cas Colonne NIC OK
           rg.Offset(0, 1).Interior.ColorIndex = xlNone
        ElseIf rg.Offset(0, 1).Value <> "" And Len(rg.Offset(0, 1)) <> 5 Then ' Si colonne NIC longueur non valide
           rg.Offset(0, 1).Interior.ColorIndex = 3
        ElseIf rg.Offset(0, 1).Value = "" Then ' Si colonne NIC vide
           rg.Offset(0, 1).Interior.ColorIndex = xlNone
        End If
    End If
   
    'Test sur les dates pour abscence de chevauchement
   For i = 1 To (Range("A65536").End(xlUp).Row - rg.Row) Step 1
        'Test sur concordance des lignes
      If rg.Value & rg.Offset(0, 1).Value & rg.Offset(0, 2).Value = rg.Offset(i, 0).Value & rg.Offset(i, 1).Value & rg.Offset(i, 2).Value Then
        ' Test sur les dates
       If rg.Offset(i, 4) >= rg.Offset(0, 4) And rg.Offset(i, 4) <= rg.Offset(0, 6) Or rg.Offset(i, 5) >= rg.Offset(0, 4) And rg.Offset(i, 5) <= rg.Offset(0, 5) Then
                rg.Offset(i, 0).Interior.ColorIndex = 39 ' met une couleur lavande
       End If
       End If
    Next i
 

Save92

XLDnaute Nouveau
Re : Macro de controles

Je penses que c'est ici que je dois apporter une modification, mais je ne vois pas qu'elle condition renseigné!?
Code:
   If rg.Offset(i, 4) >= rg.Offset(0, 4) And rg.Offset(i, 4) <= rg.Offset(0, 6) Or rg.Offset(i, 5) >= rg.Offset(0, 4) And rg.Offset(i, 5) <= rg.Offset(0, 5) Then

Ou alors je rajoute un if /else?
Je ne vois pas comment faire :S.
 

nyko283

XLDnaute Occasionnel
Re : Macro de controles

Salut Nicolas,

J'était un peu déconnecter c'est dernier temps,

Je te joint un fichier exemple où j'ai remis ton code, j'ai juste modifié dans la ligne où tu souhaiter faire la modif ( une erreur de ma part dans le code mais qui n'influence pas enormement sur les doublons mais uniquement pour les dates de chevauchement), le rg.offset(0,6) par rg.offset(0,5).

j'ai rajouté egalement cette ligne

rg.Offset(i, 6).Value = rg.Row & " / " & rg.Offset(i, 6).Value
rg.Offset(0, 6).Value = rg.Offset(i, 0).Row & " / " & rg.Offset(0, 6).Value
afin de mettre en evidence avec quels lignes elles sont réellement en doublons.

Dans mon fichier, les doublons sont bien trouvés, sinon envoi ton fichier avec lequel tu trouve des erreurs, en ayant epurer avant (supprime toutes les feuilles qui ne servent a rien).
 

Pièces jointes

  • save92.xls
    44 KB · Affichages: 47
  • save92.xls
    44 KB · Affichages: 50
  • save92.xls
    44 KB · Affichages: 49

nyko283

XLDnaute Occasionnel
Re : Macro de controles

Bonjour Nicolas,

Je viens de faire 1 essai avec ton fichier et pour moi il marche très bien, n'a tu pas confondu les test de longueurs ou d'abscence de référence qui colore en rouge les cellules avec les doublons qui colore les cellules en lavande dans la colonne A;).

Car pour moi le code ne trouve aucun doublon, 1 chose importante à savoir aussi sur l'affichage dans les cellules, ce que tu vois dans les cellules n'est pas forcément la valeur de celles-ci:(, je pense notament à la colonne B dans les cellules tu vois 03053 grace au format spéciale de la cellules ( code postal) or la valeur réelle est 3053 ( tu le vois dans la barre de formules), donc pour le code la longueur de la valeur de ces cellule est de 4 et non 5, d'ou peut etre ton problème.

une solution serait de mettre une apostrophe devant le nombre saisie au lieu de taper 3053 saisir '03053. mais la tout dépend du traitement prévu par la suite car en saisissant ainsi pour excel se n'est plus un nombre mais du texte.

Etait-ce bien la le problème ?
 

Save92

XLDnaute Nouveau
Re : Macro de controles

Bonjour Nicolas, les tests fonctionnent bien, j'ai bien vu les erreurs du au code postal mais ceux ci, comme tu le soulignes, sont d au format. Le probleme c'est que j'ai un cas qui n'est pas gerer:
Par exemple les lignes ci-dessous ne sont pas considérés en doublon alors qu'elles devraient l'etre :
A B C
552081317 | 48819 | | 0MY01 | 01/01/10
552081317 | 48819 | 1111111 | 0MY01 | 01/01/10
Car si une ligne est renseigner A et B alors il ne peut y avoir une meme ligne avec un C renseigné.

Et un autre exemple :
A B C
552081317 | 51284 | | 0MY01 | 01/01/10
552081317 | | | 0MY01 | 01/01/10
Alors la premiere ligne est un doublon car si il n'y a que la ligne A de renseigner sur une ligne alors une autre ligne ne peut avoir la ligne B renseigner.
J'esperes que j'ai été clair? Merci de ton aide et de tes réponses :D.
 

nyko283

XLDnaute Occasionnel
Re : Macro de controles

Bonjour Nicolas,

Alors apres une petite refonte partielle du code pour intégrer les nouveaux paramètres des doublons ,cela ne marchait tjs pas :(alors je me suis attaquer à la détection des dates,qui une fois le code réécrit ,et au bout de 2 heures d'essais:eek: en tout genre je m'apperçois qu'une partie de tes données sont des nombres et une autre en format texte:confused:, une fois ce petit problème résolu, tout refonctionne comme je le souhaite, reste maintenant à voir si c'est aussi comme tu le souhaite.

si à l'avenir tes tableau sont suceptible de contenir de nombres et des nombres au format texte une petite ligne de code en début de programme remédieras au problème;).

de plus au lieu de mettre simplement une couleur lavande dans la colonne A en cas de doublon, ce qui efface la couleur rouge du test sur la longueur, j'ai mis un motif de couleur lavande dans la cellule comme ça on peut avoir le rouge de la longueur et la lavande des doublons.
 

Pièces jointes

  • Table%20des%20excep(1).xls
    144.5 KB · Affichages: 42

Save92

XLDnaute Nouveau
Re : Macro de controles

Bonjour, Nicolas

Je te remerci pour le temps passer sur mon probleme, désoler du retard mais j'étais en cours. Alors ta maccro fonctionne bien et c'est ce que j'avai besoin par contre il reste encore quelques probleme par exemple :
Je suis d'accord sur les deux doublons signalés car il y a la colonne A et B de renseigné dans une ligne et celle ci sont signalée car la colonne C est renseignée, mais alors pourquoi la ligne de la 3eme image n'est elle pas signalée? Je te remerci mille fois encore pour ta patience.
 

Pièces jointes

  • erreur macro3.jpg
    erreur macro3.jpg
    107.4 KB · Affichages: 40
  • erreur macro2.jpg
    erreur macro2.jpg
    70.9 KB · Affichages: 40
  • erreur macro1.jpg
    erreur macro1.jpg
    60.6 KB · Affichages: 40

Save92

XLDnaute Nouveau
Re : Macro de controles

Et pourquoi ici il me trouve une erreur? Je pences qu'on (tu) s'approche mais la il y a des comportements bizare!
:p

EDIT : Je n'ai rien dit pour ces erreurs, il y a un espace à la fin donc c'est tous a fait normal, il ne reste plus que les doublons qui ne s'affiche pas au dessus. :D
 

Pièces jointes

  • erreur4.jpg
    erreur4.jpg
    85.7 KB · Affichages: 41
Dernière édition:

Save92

XLDnaute Nouveau
Re : Macro de controles

Voila j'ai trier le fichier ce qui peux aider à trouver les doublons :
 

Pièces jointes

  • save92.xls
    56.5 KB · Affichages: 49
  • save92.xls
    56.5 KB · Affichages: 52
  • save92.xls
    56.5 KB · Affichages: 51
Dernière édition:

nyko283

XLDnaute Occasionnel
Re : Macro de controles

Bonsoir Save92,

Je te joint un fichier sur lequel j'ai modifié le début de la macro, ceci afin de supprimer tous les espaces qui pourraient etre contenu dans les cellules des colonne A B ou C, de plus je m'apperçoit que tu as encore des cellules au format nombre et d'autres au format texte, donc dans la nouvelle macro tout est passer au format texte,
pour chaque colonne si la longueur est inférieure au critère la macro rajoute des "0" devant pour atteindre la longueur souhaité, si la longueur est supérieur il met la cellule en rouge.

Pour les doublons dans ton dernier fichier il me trouve un doublon mais dans les images postées avant je ne vois pas de doublons...

colonne A |colonne B | colonne C
123456789|12345 |1234567
123456789|12345 |9876543

Pour toi ces lignes constitue un doublon ?
 

Pièces jointes

  • Table des exeptions.xls
    108.5 KB · Affichages: 43
  • Table des exeptions.xls
    108.5 KB · Affichages: 40
  • Table des exeptions.xls
    108.5 KB · Affichages: 48

Save92

XLDnaute Nouveau
Re : Macro de controles

Bonjour Nico,

Non ces lignes ne sont pas des doublons :
colonne A |colonne B | colonne C
123456789|12345 |1234567
123456789|12345 |9876543

Par contre ces lignes sont des doublons :
colonne A |colonne B | colonne C
123456789|12345 |
123456789|12345 |9876543
123456789|12345 |1234567

Je suis en train de recoder une autre verification des doublons mais c'est difficille :(.
 

Discussions similaires

Réponses
6
Affichages
297
Réponses
2
Affichages
193

Statistiques des forums

Discussions
312 779
Messages
2 092 044
Membres
105 164
dernier inscrit
publd2