Tester contenue d'une cellule et nom d'une feuille
Résolu
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.
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
1 réponse
-
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
-
-
@camcam1404Re,
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 ? -
-
@camcam1404Re,
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... -
-