Signaler

Tester contenue d'une cellule et nom d'une feuille [Résolu]

Posez votre question camcam1404 50Messages postés mardi 13 décembre 2016Date d'inscription 7 avril 2017 Dernière intervention - Dernière réponse le 16 févr. 2017 à 09:46 par camcam1404
Bonjour,

J'aimerais effectué une instruction à condition que la valeur d'une cellule soit contenue dans le nom de la feuille.
J´ai essayé le code ci-dessous sans résultat. Quelqu'un voit d'où vient le problème ?
Le code fonctionne si j'écrit If REF.Cells(i, 1) =O.Name Then mais ce n'est pas exactemment ce que je souhaite.

Sub jpp()


Dim i As Long
Dim Lastline As Long
Dim O As Worksheet



Set REF = Worksheets("REF")

Lastline = REF.Range("A1").End(xlDown).Row


For Each O In ActiveWorkbook.Worksheets

If UCase(O.Name) Like "*RES*" Then
   For i = 2 To Lastline
<bold>  If REF.Cells(i, 1) =Right( O.Name ,10) Then => ligne qui pose problème</bold>

SNzusuchen = REF.Cells(i, 3)
           Set rangezuabsuchen = O.Columns(2)

Set gefunden = rangezuabsuchen.Cells.Find(what:=SNzusuchen)

If gefunden Is Nothing Then
                REF.Cells(i, 5) = 0
                Else
                REF.Cells(i, 5) = 1
                End If

End If
  Next i
 End If
Next O

End Sub
Afficher la suite 
Utile
+0
plus moins
Bonjour Camcam, bonjour le forum,

Il y a un espace en trop entre la parenthèse (ouverture après Right) et O (de O.Name). Si tu le supprimes la ligne ne plante plus. Mais je ne sais pas si la résultat escompté est conforme ?!...

Ton code modifié :

Sub jpp()
Dim REF As Worksheet
Dim Lastline As Long
Dim O As Worksheet
Dim I As Long
Dim rangezuabsuchen As Range
Dim gefunden As Range

Set REF = Worksheets("REF")
Lastline = REF.Range("A1").End(xlDown).Row
For Each O In ActiveWorkbook.Worksheets
    If UCase(O.Name) Like "*RES*" Then
        For I = 2 To Lastline
            If REF.Cells(I, 1) = Right(O.Name, 10) Then
                SNzusuchen = REF.Cells(I, 3)
                Set rangezuabsuchen = O.Columns(2)
                Set gefunden = rangezuabsuchen.Cells.Find(what:=SNzusuchen)
                If gefunden Is Nothing Then
                    REF.Cells(I, 5) = 0
                Else
                    REF.Cells(I, 5) = 1
                End If
            End If
        Next I
    End If
Next O
End Sub

camcam1404 50Messages postés mardi 13 décembre 2016Date d'inscription 7 avril 2017 Dernière intervention - 15 févr. 2017 à 14:24
Oui oui j'ai pas d'espace dans mon code.
Mais ce ne fonctionne quqnd meme pas.

Je crois que le probléme viens de lá:
O,Name n'est pas un String mais je sais pas ce que c'est enfaite.. (La fonction Right est valable que pour des strings)
Je vais voir comment je üeux convertir le O.Name
Répondre
ThauTheme 4193Messages postés mardi 21 octobre 2014Date d'inscription 27 avril 2017 Dernière intervention - 15 févr. 2017 à 14:35
Re,

La propriété [Name] renvoie toujours du String même si le nom de ton onglet est un numéro. Exemple, tu as nommé ton onglet 123, O.Name renvoie "123" (la chaîne de caractères "123" pas le numéro 123). Es-tu sûr que le nom contienne 10 caractères minimum ?
Répondre
camcam1404 50Messages postés mardi 13 décembre 2016Date d'inscription 7 avril 2017 Dernière intervention - 15 févr. 2017 à 15:08
Oui si les chiffres sont et les points sont considérés comme des caractères.
Le nom des feuilles est du type: REF_01.01.2017
Et ce le terme 01.01.2017 que je veux prendre en compte avec la fonction Right(O.Name,10)
Répondre
ThauTheme 4193Messages postés mardi 21 octobre 2014Date d'inscription 27 avril 2017 Dernière intervention - 15 févr. 2017 à 15:19
Re,

Tu compares une chaîne de caractère, tirée du nom d'un onglet, avec une date dans une cellule. Attention ! Les dates s'affichent selon le format dans la cellule où elles se trouvent. Tu peux avoir écrit en A1 : 10.01.2017 alors que Range("A1").Value renvoie 10/01/2017.
Dans ce cas la comparaison :
 If REF.Cells(I, 1) = Right(O.Name, 10) Then

peux ne pas fonctionner.

Soit tu compares deux dates :
 If REF.Cells(I, 1) = CDate(Right(O.Name, 10)) Then

Soit tu compares deux chaines de caractères :
 If CStr(REF.Cells(I, 1)) = Right(O.Name, 10) Then

Mais tu risques d'avoir encore le problème d'inversion Mois/Jour...
Répondre
camcam1404 50Messages postés mardi 13 décembre 2016Date d'inscription 7 avril 2017 Dernière intervention - 16 févr. 2017 à 09:46
Avec la comparaison de deux date ca fonctionne ! Merci
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !