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