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 :

difficulté de comparaison de chaines avec nombre [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 24
    Par défaut difficulté de comparaison de chaines avec nombre
    bonjour,

    je n'arrive pas à faire ce que je souhaite et je cherche de l'aide.

    j’écris un code qui parcourt une base pour analyser et compiler ces données en les écrivant sur une ligne pour un même "itemNum".
    Le code ci-dessous sert uniquement à écrire les données choisies dans les bonnes cellules.
    dans la colonne 4 je récupère le ou les numéros de projet et je souhaite éviter d'avoir plusieurs fois le même numéro qui apparait.
    La variable concernée est "itemProj" dans la procédure appelante je l'ai déclarée en "string"
    je force le format de la cellule en texte pour être sur d'avoir du texte dans cette cellule.

    lorsque j'ai une nouvelle écriture si la cellule contient déjà du texte je souhaite savoir si mon nouveau projet y est déjà.
    pour cela j' écrit ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        If Sheets("Prev").Cells(nlenre, 4).Value = "" Then
            Sheets("Prev").Cells(nlenre, 4).Value = itemProj
        Else
            valrech = InStr(Sheets("Prev").Cells(nlenre, 4).Text, itemProj, 1) 'le problème est ici
            If Not (valrech >= 1) Then
                Sheets("Prev").Cells(nlenre, 4).Value = Sheets("Prev").Cells(nlenre, 4).Value & vbLf & itemProj
            End If
        End If
    hors lorsque les 2 valeurs sont identiques la fonction Instr() me retourne la valeur 0 alors que je devrais avoir 1 (sauf ereur de ma part).
    les valeurs initiales sont des nombres mais lorsque j'ai 2 projets différents que je cumule alors la valeur de vint du texte.
    je n'arrive plus à voir ou est mon erreur.
    Et si je ne suis pas clair n'hésitez pas à poser des questions.

    voici mon code complet :

    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
    Sub recordata(itemNum, ItemDes, ItemQty, Itemdate, ItemCTA, itemProj, ItemDA, nlenre)
     
        If Sheets("Prev").Cells(nlenre, 1).Value = "" Then Sheets("Prev").Cells(nlenre, 1).Value = ItemCTA
        If Sheets("Prev").Cells(nlenre, 2).Value = "" Then Sheets("Prev").Cells(nlenre, 2).Value = itemNum
        If Sheets("Prev").Cells(nlenre, 3).Value = "" Then Sheets("Prev").Cells(nlenre, 3).Value = ItemDes
     
        Sheets("Prev").Cells(nlenre, 4).NumberFormat = "@"
     
        If Sheets("Prev").Cells(nlenre, 4).Value = "" Then
            Sheets("Prev").Cells(nlenre, 4).Value = itemProj
        Else
            valrech = InStr(Sheets("Prev").Cells(nlenre, 4).Text, itemProj, 1) 'le problème est ici
            If Not (valrech >= 1) Then
                Sheets("Prev").Cells(nlenre, 4).Value = Sheets("Prev").Cells(nlenre, 4).Value & vbLf & itemProj
            End If
        End If
     
        If Sheets("Prev").Cells(nlenre, 5).Value = "" Then
            Sheets("Prev").Cells(nlenre, 5).Value = ItemDA
        Else
            valrech = InStr(Sheets("Prev").Cells(nlenre, 5).Value, ItemDA, 1)
            If Not (valrech >= 1) Then
                Sheets("Prev").Cells(nlenre, 5).Value = Sheets("Prev").Cells(nlenre, 5).Value & vbLf & ItemDA
            End If
        End If
     
        If WorksheetFunction.EoMonth(Itemdate, 0) < WorksheetFunction.EoMonth(Date, -2) + 1 Then
            recdate = Sheets("Prev").Cells(1, initcell).Value
        Else
            recdate = Format(Itemdate, "mm/yy")
        End If
     
        'recherche le mois d'affectation des Qtés
        ncol = Application.WorksheetFunction.Match(recdate, Rows(1), 0)
        Sheets("Prev").Cells(nlenre, ncol).Value = ItemQty + Sheets("Prev").Cells(nlenre, ncol).Value
     
        'mise en couleur de la case
        If ItemDA <> "" Then
            Call colorDA(nlenre, ncol) 'vert si DA
        Else
            Call colorprev(nlenre, ncol) 'bleu si planned order
        End If
     
    End Sub

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    quand tu fait un "instr" sans savoir deja a l'avance sil y a occurence il ne faut pas mettre l'argument de position sinon c'est le crach bien evidement

    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
    Sub recordata(itemNum, ItemDes, ItemQty, Itemdate, ItemCTA, itemProj, ItemDA, nlenre)
     Dim ShPW As Object
      Set ShPW = Sheets("Prev")
       With ShPW
        If .Cells(nlenre, 1).Value = "" Then .Cells(nlenre, 1).Value = ItemCTA
        If .Cells(nlenre, 2).Value = "" Then .Cells(nlenre, 2).Value = itemNum
        If .Cells(nlenre, 3).Value = "" Then .Cells(nlenre, 3).Value = ItemDes
     
     
        .Cells(nlenre, 4).NumberFormat = "@"
     
        If .Cells(nlenre, 4).Value = "" Then
            .Cells(nlenre, 4).Value = itemProj
        Else
            'valrech = InStr(.Cells(nlenre, 4).Text, itemProj, 1) 'le problème est ici c'est normal tu demande le 1( premiere occurence alors que tu sais pas si la condition est rempli a savoir si il y est ou pas
            valrech = InStr(.Cells(nlenre, 4).Text, itemProj)  'le problème n'est plus ici on ne cherche pas l'occurence on comptabilise c'est tout
     
            If Not (valrech >= 1) Then
                .Cells(nlenre, 4).Value = ShPW.Cells(nlenre, 4).Value & vbLf & itemProj
            End If
        End If
     
        If .Cells(nlenre, 5).Value = "" Then
            .Cells(nlenre, 5).Value = ItemDA
        Else
            valrech = InStr(.Cells(nlenre, 5).Value, ItemDA, 1)
            If Not (valrech >= 1) Then
                .Cells(nlenre, 5).Value = .Cells(nlenre, 5).Value & vbLf & ItemDA
            End If
        End If
     
        If WorksheetFunction.EoMonth(Itemdate, 0) < WorksheetFunction.EoMonth(Date, -2) + 1 Then
            recdate = .Cells(1, initcell).Value
        Else
            recdate = Format(Itemdate, "mm/yy")
        End If
     
        'recherche le mois d'affectation des Qtés
        ncol = Application.WorksheetFunction.Match(recdate, Rows(1), 0)
        .Cells(nlenre, ncol).Value = ItemQty + .Cells(nlenre, ncol).Value
     
        'mise en couleur de la case
        If ItemDA <> "" Then
            Call colorDA(nlenre, ncol) 'vert si DA
        Else
            Call colorprev(nlenre, ncol) 'bleu si planned order
        End If
     End With
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 24
    Par défaut
    Pour moi le ,1 est le type de comparaison et pas le numéro de l’occurrence.

    extrait de l'aide.
    InStr([start, ]string1, string2[, compare])

    compare
    Facultatif. Indique le type de comparaison de chaînes. Si l'argument compare est de type Null, une erreur se produit. Si l'argument compare est omis, la valeur de l'instruction Option Compare détermine le type de comparaison. Indiquez un LCID (LocaleID) correct pour respecter les règles locales spécifiques à la comparaison.

    et comme du dialogue jaillit la lumière j'ai remplacé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            valrech = InStr( Sheets("Prev").Cells(nlenre, 5).Value, ItemDA, 1)
    par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            valrech = InStr(1, Sheets("Prev").Cells(nlenre, 5).Value, ItemDA, 1)
    J'avais oublié que si le paramètre compare est renseigné le paramètre start DOIT être renseigné.

    au final ta solution fonctionne aussi.
    Je vais la tester en enlevant le forçage des formats texte pour voir ce que ça donne.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 24
    Par défaut
    Ta solution fonctionne aussi en supprimant le forçage texte des cellules.
    donc je conserve.

    Sujet clos
    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/10/2017, 16h56
  2. Problème de comparaison de chaines avec des accents
    Par alexmtp dans le forum Requêtes
    Réponses: 1
    Dernier message: 18/10/2014, 10h10
  3. comparaison de chaines avec caractères spéciaux
    Par battl14 dans le forum Développement
    Réponses: 0
    Dernier message: 07/04/2009, 18h35
  4. Réponses: 1
    Dernier message: 03/03/2008, 14h20
  5. comparaison de chaine avec caractères spéciaux
    Par loulag07 dans le forum Langage
    Réponses: 1
    Dernier message: 22/11/2007, 10h04

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