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 :

Ne pas prendre en compte des caractères [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2013
    Messages : 120
    Points : 293
    Points
    293
    Par défaut Ne pas prendre en compte des caractères
    Bonjour le forum,

    Après avoir cherché un bon petit moment, je m'en remet encore une fois à la sagesse des membres de ce forum .

    Donc, j'ai encore un petit problème avec un bout de code que je dois implémenté. En gros, j'ai une feuille "BDD" contenant des données de pointage avec une colonne nom salarié et une feuille salarié référencent tous les salarié déjà dans la base de donnée. A chaque fois que des nouvelles données sont importé (d'un fichier .xml pour précision), un test est effectué pour savoir si l'employé est déjà dans la feuille Salarié. Et c'est la le problème, les génies qui ont entré le nom des salariés dans le fichier xml ont utilisé des intitulés (M. ; Mr ; Mme ; Melle) et certaine personne, d'un fichier à un autre peuvent avoir un intitulé différent.

    Par exemple :

    Fichier A :

    M. Toto Albert

    Fichier B :

    Mr Toto Albert

    Cela pose un problème puisque lors d'analyse des données et la génération des différents graphiques, la personne sera scindé en deux (moins d'heures sup donc moins de paye ), également, deux entrées seront créer dans la feuille salarié. Je vous met le code qui recherche les nouveaux salarié pour que vous puissiez visualiser et en vient à la question : Comment faire pour que Excel ne prennent pas en compte les x premiers caractères ?

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    Public tab_salarie() As Variant
     Public tab_bdd() As Variant
     Public compteur_bdd As Integer
     Public compteur_salarie As Integer
     
    Public Sub nouveau_salarie()
     
     
        Dim nbLigne_bdd As Long
        Dim nbLigne_salarie As Integer
        Dim plage_salarie As Range
        Dim plage_bdd As Range
     
     
        With Worksheets("BDD")
            nbLigne_bdd = .Range("A" & .Rows.Count).End(xlUp).Row
        End With
     
        With Worksheets("Salarie")
            nbLigne_salarie = .Range("A" & .Rows.Count).End(xlUp).Row
        End With
     
        Set plage_salarie = Worksheets("Salarie").Range(Worksheets("Salarie").Cells(1, 1), Worksheets("Salarie").Range("A1").End(xlDown).Offset(1, 0))
        Set plage_bdd = Worksheets("BDD").Range(Worksheets("BDD").Cells(1, 1), Worksheets("BDD").Range("A1").End(xlDown).Offset(1, 0))
     
        tab_salarie() = Application.Transpose(plage_salarie.Value)
        tab_bdd() = Application.Transpose(plage_bdd.Value)
     
        compteur_bdd = 1
     
    boucle_bdd:
     
     
        Do While compteur_bdd <= nbLigne_bdd
     
            compteur_bdd = compteur_bdd + 1
     
            If tab_bdd(compteur_bdd) = tab_bdd(compteur_bdd - 1) Then
     
            GoTo boucle_bdd
     
            End If
     
     
            compteur_salarie = 1
     
            Do While compteur_salarie <= nbLigne_salarie
     
                If tab_bdd(compteur_bdd) = tab_salarie(compteur_salarie) Then
     
                    GoTo boucle_bdd
     
     
     
     
                Else
                    compteur_salarie = compteur_salarie + 1
                    'GoTo boucle_bdd
     
                End If
     
            Loop
     
            NouveauSalarie.Show
     
     
        Loop
     
     
    End Sub
    Merci pour vos réponses,

    Thomas

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour,

    juste en passant, en entreprise on ne travaille pas par nom mais par matricule …

    Voir le tutoriel Manipuler les chaînes de caractères en VB6 et VBA Excel
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    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,

    Une piste à tester. Faire un essai sur une copie du classeur. Si des mots doivent être ajoutés à la recherche, les mettre dans le "Select Case" à la suite des autres :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Sub Test()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim Pos As Integer
        Dim Texte As String
     
        'la plage est définie en colonne A de la feuille "Feuil1"
        With Worksheets("Feuil1")
     
            Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
        End With
     
        'boucle sur la plage
        For Each Cel In Plage
     
            'recherche le 1er espace
            Pos = InStr(Cel.Value, " ")
     
            'récupère les caractères à gauche du 1er espace
            Texte = Left(Cel.Value, Pos - 1)
     
            'cherche si il correspond à l'un des mots et si oui, le supprime
            Select Case Texte
     
                Case "M.", "Mr", "Melle", "Mlle", "Mme"
                    Cel.Value = Right(Cel.Value, Len(Cel.Value) - Pos)
     
            End Select
     
        Next Cel
     
    End Sub
    Hervé.

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Tooth Voir le message
    les génies qui ont entré le nom des salariés dans le fichier xml ont utilisé des intitulés (M. ; Mr ; Mme ; Melle) et certaine personne, d'un fichier à un autre peuvent avoir un intitulé différent.
    La bonne solution ne serait-elle pas de nettoyer ces fichiers une bonne fois pour toute plutôt que d'essayer de trouver des solutions pour s'adapter à une mauvaise situation ?
    Dans la même situation, j'exigerai de commencer par nettoyer le fichier et de l'épurer de ses intitulés.
    A grands coup de Remplacer "Mr " par "", "Mr. " par "", "Melle " par "", etc. ça ne devrait pas prendre plus d'une minute ou deux et on repartirait sur une situation plus saine.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Membre actif
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2013
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2013
    Messages : 120
    Points : 293
    Points
    293
    Par défaut
    Merci à tous pour vos réponses, comme d'habitude très rapide et complète

    Le code proposé par Theze fonctionne très bien, je n'avais pas pensé à la solution de supprimer directement dans la feuille mais dans le cas présent, ça ne pose aucun problème. Merci pour le code en tout cas !

    @ Marc-L

    En effet, dans la plus part des cas on traite les données avec les matricules, la ce sont des données directement exportés de SAP et non traités par matricule (plus simple également pour le métier d'analyser des noms plutot que des chiffres), je joues avec les cartes que l'on m'a donné

    Citation Envoyé par Menhir
    La bonne solution ne serait-elle pas de nettoyer ces fichiers une bonne fois pour toute plutôt que d'essayer de trouver des solutions pour s'adapter à une mauvaise situation ?
    En faite, actuellement, le fichier contient un bon 100k de données, sans macro, c'est assez long quand même et les fichiers xml sont des données directement exportés de SAP, donc pour faire des modifs dessus, il faut faire appel à l'éditeur, et les prestations de chez SAP sont à la hauteur du prix du logiciel

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Tooth Voir le message
    En faite, actuellement, le fichier contient un bon 100k de données, sans macro, c'est assez long quand même et les fichiers xml sont des données directement exportés de SAP, donc pour faire des modifs dessus, il faut faire appel à l'éditeur, et les prestations de chez SAP sont à la hauteur du prix du logiciel
    Ou bien faire une macro qui puisse faire ces modification en un clic en enchaînant les Replace qui vont bien.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

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

Discussions similaires

  1. Comment forcer cron a prendre en compte des modifs?
    Par jlassira dans le forum Administration système
    Réponses: 31
    Dernier message: 17/06/2016, 12h40
  2. Ne pas prendre en compte des formats
    Par asty69 dans le forum Débutez
    Réponses: 2
    Dernier message: 11/05/2011, 21h10
  3. Prendre en compte des caractères?
    Par spl0tch dans le forum Langage
    Réponses: 5
    Dernier message: 06/01/2007, 10h57
  4. [.NET] ne pas prendre en compte les "0"
    Par californialove dans le forum MFC
    Réponses: 16
    Dernier message: 05/06/2006, 10h05
  5. [XHTML] Ne pas prendre en compte les balises XHTML
    Par simnitch dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 18/08/2005, 15h58

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