Problème Feuille RechFind
max-iime
Messages postés
31
Statut
Membre
-
thev Messages postés 2010 Date d'inscription Statut Membre Dernière intervention -
thev Messages postés 2010 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous et à toute,
J'ai une macro pour faire une recherche dans plusieurs classeur avec la fonction RechFind, je recherche dans 5 feuilles donc j'ai 5 fois la RechFind. je veux créer une boucle pour avoir seulement une fois la fonction RechFind.
J'ai déclarer le nom de mes feuilles:
jusque là tout va bien ^^
La où je galère c'est intégrer les variables dans la RechFind.
m est bien déclaré avant.
La variable fonctionne bien mais pas la b, j'ai essayé plusieurs truc mais impossible de trouver quelque chose qui fonctionne :/
Comme message d'erreur j'ai :
Erreur d'exécution'438':
Propriété ou méthode non géré par cet objet
Merci d'avance.
J'ai une macro pour faire une recherche dans plusieurs classeur avec la fonction RechFind, je recherche dans 5 feuilles donc j'ai 5 fois la RechFind. je veux créer une boucle pour avoir seulement une fois la fonction RechFind.
J'ai déclarer le nom de mes feuilles:
Dim a As Worksheet
Dim b As Worksheet
Dim c As Worksheet
Set a = Sheets("Tableau_de_Bord")
Set b = Sheets("Base de données")
Set c = Sheets("Actu")
jusque là tout va bien ^^
La où je galère c'est intégrer les variables dans la RechFind.
m = RechFind(a.Range("B7"), ThisWorkbook.Name, b, ("A2:BB500"), TB())
m est bien déclaré avant.
La variable fonctionne bien mais pas la b, j'ai essayé plusieurs truc mais impossible de trouver quelque chose qui fonctionne :/
Comme message d'erreur j'ai :
Erreur d'exécution'438':
Propriété ou méthode non géré par cet objet
Merci d'avance.
2 réponses
-
Bonjour,
"b" n'est pas une variable Chaîne mais une variable objet correspondant à la feuille . Pour être en accord avec ta fonctiondim b as string
b = Sheets("Base de données").Name
-
-
Bonjour Thev,
Merci beaucoup ça marche parfaitement :)
Dernière question, j'aimerais créer une boucle sur ce code avec leFor i = b To g
Mais ça me met une erreur dessus (Incompatibilité de type)
For i = b To g m = RechFind(a.Range("B7"), ThisWorkbook.Name, i, ("A2:BB500"), TB()) If m > 0 Then For n = 0 To m - 1 ' ou ubound(TB) 'exemple Sheets("Feuil1").Cells(n + 2, 1) = TB(n) Next n End If Next i
j'ai essayé avec ça mais ça ne fonctionne pasFor i = Asc("a") To Asc("g")
-
-
Bonjour Maxime, bonjour le forum,
Pas très clair tout ça !... Tu parles de recherche dans plusieurs classeurs puis tu utilises des variables Worksheet (onglet) !?...
Sans le code complet, difficile d'en savoir plus...
-
Bonjour ThauTheme,
Je me suis trompé je voulais dire plusieurs Feuille.
ça c'est le code qui fonctionne et je veux mettre des boucle pour qu'il soit plus rapide et plus lisible.
Sub RechMulti() Dim start As Single start = Timer Application.ScreenUpdating = False Rows("21:3000").Select Selection.Delete Shift:=xlUp Range("D12:D17").Select Selection.ClearContents Range("A1").Select Dim d As Range, txt As String Dim ws As Worksheet Dim TNL As Variant Dim a As Long Dim n As Long, Nb As Long For u = 1 To 6 Set ws = Sheets.Add ws.Name = "Feuil" & u Next u Dim R As Long, TB() Dim i As Integer R = RechFind(Sheets("Tableau de Bord").Range("B7"), ThisWorkbook.Name, "Station1", "A2:BB500", TB()) If R > 0 Then For i = 0 To R - 1 ' ou ubound(TB) 'exemple Sheets("Feuil1").Cells(i + 2, 1) = TB(i) Next i End If R = RechFind(Sheets("Tableau de Bord").Range("B7"), ThisWorkbook.Name, "Station2", "A2:BB500", TB()) If R > 0 Then For i = 0 To R - 1 ' ou ubound(TB) 'exemple Sheets("Feuil2").Cells(i + 2, 1) = TB(i) Next i End If R = RechFind(Sheets("Tableau de Bord").Range("B7"), ThisWorkbook.Name, "PIT", "A2:BB500", TB()) If R > 0 Then For i = 0 To R - 1 ' ou ubound(TB) 'exemple Sheets("Feuil3").Cells(i + 2, 1) = TB(i) Next i End If R = RechFind(Sheets("Tableau de Bord").Range("B7"), ThisWorkbook.Name, "PBT", "A2:BB500", TB()) If R > 0 Then For i = 0 To R - 1 ' ou ubound(TB) 'exemple Sheets("Feuil4").Cells(i + 2, 1) = TB(i) Next i End If R = RechFind(Sheets("Tableau de Bord").Range("B7"), ThisWorkbook.Name, "CT", "A2:BB500", TB()) If R > 0 Then For i = 0 To R - 1 ' ou ubound(TB) 'exemple Sheets("Feuil5").Cells(i + 2, 1) = TB(i) Next i End If R = RechFind(Sheets("Tableau de Bord").Range("B7"), ThisWorkbook.Name, "GT", "A2:BB500", TB()) If R > 0 Then For i = 0 To R - 1 ' ou ubound(TB) 'exemple Sheets("Feuil6").Cells(i + 2, 1) = TB(i) Next i End If Sheets("Feuil1").Select Cells.Select Selection.Replace What:="$", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Sheets("Feuil1").Select Range("A2").Select Range(Selection, Selection.End(xlDown)).Select For Each d In Selection txt = "" For i = 1 To Len(d.Value) If Asc(Mid(d.Value, i, 1)) < 58 Then txt = txt & Mid(d.Value, i, 1) End If Next i d.Value = txt Next d Sheets("Feuil1").Select If Application.CountA(Range("$A$1:$A$2000" & dlg)) > 0 Then Columns("A:A").Select ActiveSheet.Range("$A$1:$A$2000").RemoveDuplicates Columns:=1, Header:=xlNo Sheets("Tableau de Bord").Select Range("A1048576").Select Range(Selection, Selection.End(xlUp)).Select ActiveCell.Offset(2, 0).Select ActiveCell.FormulaR1C1 = "Station1" With Selection.Font .Color = -16776961 .TintAndShade = 0 End With Selection.Font.Bold = True Selection.Font.Size = 16 Sheets("Station1").Select Range("Station1[[#Headers],[Nom]]").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Sheets("Tableau de Bord").Select Range("A1048576").Select Range(Selection, Selection.End(xlUp)).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste With Worksheets("feuil1") TNL = .Range("A1").CurrentRegion 'mise en memoire plage de cellules Nb = UBound(TNL) 'Nombre de valeurs dans table End With 'Boucle sur table de valeurs a = Sheets("Tableau de Bord").Range("A65536").End(xlUp).Offset(1, 0).Row For n = 2 To Nb Sheets("Station1").Rows(TNL(n, 1)).Copy Sheets("Tableau de Bord").Cells(n + a - 2, 1) Next n End If Sheets("Feuil2").Select Cells.Select Selection.Replace What:="$", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Sheets("Feuil2").Select Range("A2").Select Range(Selection, Selection.End(xlDown)).Select For Each d In Selection txt = "" For i = 1 To Len(d.Value) If Asc(Mid(d.Value, i, 1)) < 58 Then txt = txt & Mid(d.Value, i, 1) End If Next i d.Value = txt Next d Sheets("Feuil2").Select If Application.CountA(Range("$A$1:$A$2000" & dlg)) > 0 Then Columns("A:A").Select ActiveSheet.Range("$A$1:$A$2000").RemoveDuplicates Columns:=1, Header:=xlNo Sheets("Tableau de Bord").Select Range("A1048576").Select Range(Selection, Selection.End(xlUp)).Select ActiveCell.Offset(2, 0).Select ActiveCell.FormulaR1C1 = "Station2" With Selection.Font .Color = -16776961 .TintAndShade = 0 End With Selection.Font.Bold = True Selection.Font.Size = 16 Sheets("Station2").Select Range("Station2[[#Headers],[Nom]]").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Sheets("Tableau de Bord").Select Range("A1048576").Select Range(Selection, Selection.End(xlUp)).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste With Worksheets("feuil2") TNL = .Range("A1").CurrentRegion 'mise en memoire plage de cellules Nb = UBound(TNL) 'Nombre de valeurs dans table End With 'Boucle sur table de valeurs a = Sheets("Tableau de Bord").Range("A65536").End(xlUp).Offset(1, 0).Row For n = 2 To Nb Sheets("Station2").Rows(TNL(n, 1)).Copy Sheets("Tableau de Bord").Cells(n + a - 2, 1) Next n End If Sheets("Feuil3").Select Cells.Select Selection.Replace What:="$", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Sheets("Feuil3").Select Range("A2").Select Range(Selection, Selection.End(xlDown)).Select For Each d In Selection txt = "" For i = 1 To Len(d.Value) If Asc(Mid(d.Value, i, 1)) < 58 Then txt = txt & Mid(d.Value, i, 1) End If Next i d.Value = txt Next d If Application.CountA(Range("$A$1:$A$2000" & dlg)) > 0 Then Columns("A:A").Select ActiveSheet.Range("$A$1:$A$2000").RemoveDuplicates Columns:=1, Header:=xlNo Sheets("Tableau de Bord").Select Range("A1048576").Select Range(Selection, Selection.End(xlUp)).Select ActiveCell.Offset(2, 0).Select ActiveCell.FormulaR1C1 = "PIT" With Selection.Font .Color = -16776961 .TintAndShade = 0 End With Selection.Font.Bold = True Selection.Font.Size = 16 Sheets("PIT").Select Range("PIT[[#Headers],[CRC]]").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Sheets("Tableau de Bord").Select Range("A1048576").Select Range(Selection, Selection.End(xlUp)).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste With Worksheets("feuil3") TNL = .Range("A1").CurrentRegion 'mise en memoire plage de cellules Nb = UBound(TNL) 'Nombre de valeurs dans table End With 'Boucle sur table de valeurs a = Sheets("Tableau de Bord").Range("A65536").End(xlUp).Offset(1, 0).Row For n = 2 To Nb Sheets("PIT").Rows(TNL(n, 1)).Copy Sheets("Tableau de Bord").Cells(n + a - 2, 1) Next n End If Sheets("Feuil4").Select Cells.Select Selection.Replace What:="$", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Sheets("Feuil4").Select Range("A2").Select Range(Selection, Selection.End(xlDown)).Select For Each d In Selection txt = "" For i = 1 To Len(d.Value) If Asc(Mid(d.Value, i, 1)) < 58 Then txt = txt & Mid(d.Value, i, 1) End If Next i d.Value = txt Next d If Application.CountA(Range("$A$1:$A$2000" & dlg)) > 0 Then Columns("A:A").Select ActiveSheet.Range("$A$1:$A$2000").RemoveDuplicates Columns:=1, Header:=xlNo Sheets("Tableau de Bord").Select Range("A1048576").Select Range(Selection, Selection.End(xlUp)).Select ActiveCell.Offset(2, 0).Select ActiveCell.FormulaR1C1 = "PBT" With Selection.Font .Color = -16776961 .TintAndShade = 0 End With Selection.Font.Bold = True Selection.Font.Size = 16 Sheets("PBT").Select Range("PBT[[#Headers],[Commune]]").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Sheets("Tableau de Bord").Select Range("A1048576").Select Range(Selection, Selection.End(xlUp)).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste With Worksheets("feuil4") TNL = .Range("A1").CurrentRegion 'mise en memoire plage de cellules Nb = UBound(TNL) 'Nombre de valeurs dans table End With 'Boucle sur table de valeurs a = Sheets("Tableau de Bord").Range("A65536").End(xlUp).Offset(1, 0).Row For n = 2 To Nb Sheets("PBT").Rows(TNL(n, 1)).Copy Sheets("Tableau de Bord").Cells(n + a - 2, 1) Next n End If Sheets("Feuil5").Select Cells.Select Selection.Replace What:="$", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Sheets("Feuil5").Select Range("A2").Select Range(Selection, Selection.End(xlDown)).Select For Each d In Selection txt = "" For i = 1 To Len(d.Value) If Asc(Mid(d.Value, i, 1)) < 58 Then txt = txt & Mid(d.Value, i, 1) End If Next i d.Value = txt Next d If Application.CountA(Range("$A$1:$A$10000" & dlg)) > 0 Then Columns("A:A").Select ActiveSheet.Range("$A$1:$A$10000").RemoveDuplicates Columns:=1, Header:=xlNo Sheets("Tableau de Bord").Select Range("A1048576").Select Range(Selection, Selection.End(xlUp)).Select ActiveCell.Offset(2, 0).Select ActiveCell.FormulaR1C1 = "CT" With Selection.Font .Color = -16776961 .TintAndShade = 0 End With Selection.Font.Bold = True Selection.Font.Size = 16 Sheets("CT").Select Range("CT[[#Headers],[Nom]]").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Sheets("Tableau de Bord").Select Range("A1048576").Select Range(Selection, Selection.End(xlUp)).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste With Worksheets("feuil5") TNL = .Range("A1").CurrentRegion 'mise en memoire plage de cellules Nb = UBound(TNL) 'Nombre de valeurs dans table End With 'Boucle sur table de valeurs a = Sheets("Tableau de Bord").Range("A65536").End(xlUp).Offset(1, 0).Row For n = 2 To Nb Sheets("CT").Rows(TNL(n, 1)).Copy Sheets("Tableau de Bord").Cells(n + a - 2, 1) Next n End If Sheets("Feuil6").Select Cells.Select Selection.Replace What:="$", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Sheets("Feuil6").Select Range("A2").Select Range(Selection, Selection.End(xlDown)).Select For Each d In Selection txt = "" For i = 1 To Len(d.Value) If Asc(Mid(d.Value, i, 1)) < 58 Then txt = txt & Mid(d.Value, i, 1) End If Next i d.Value = txt Next d If Application.CountA(Range("$A$1:$A$2000" & dlg)) > 0 Then Columns("A:A").Select ActiveSheet.Range("$A$1:$A$2000").RemoveDuplicates Columns:=1, Header:=xlNo Sheets("Tableau de Bord").Select Range("A1048576").Select Range(Selection, Selection.End(xlUp)).Select ActiveCell.Offset(2, 0).Select ActiveCell.FormulaR1C1 = "GT" With Selection.Font .Color = -16776961 .TintAndShade = 0 End With Selection.Font.Bold = True Selection.Font.Size = 16 Sheets("GT").Select Range("GT[[#Headers],[Code société]]").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Sheets("Tableau de Bord").Select Range("A1048576").Select Range(Selection, Selection.End(xlUp)).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste With Worksheets("feuil6") TNL = .Range("A1").CurrentRegion 'mise en memoire plage de cellules Nb = UBound(TNL) 'Nombre de valeurs dans table End With 'Boucle sur table de valeurs a = Sheets("Tableau de Bord").Range("A65536").End(xlUp).Offset(1, 0).Row For n = 2 To Nb Sheets("GT").Rows(TNL(n, 1)).Copy Sheets("Tableau de Bord").Cells(n + a - 2, 1) Next n End If Sheets("Feuil1").Select X = Application.WorksheetFunction.CountA(Range("A1:A" & Range("A65536").End(xlUp).Row)) Sheets("Tableau de Bord").Range("D12") = X Sheets("Feuil2").Select X = Application.WorksheetFunction.CountA(Range("A1:A" & Range("A65536").End(xlUp).Row)) Sheets("Tableau de Bord").Range("D13") = X Sheets("Feuil3").Select X = Application.WorksheetFunction.CountA(Range("A1:A" & Range("A65536").End(xlUp).Row)) Sheets("Tableau de Bord").Range("D14") = X Sheets("Feuil4").Select X = Application.WorksheetFunction.CountA(Range("A1:A" & Range("A65536").End(xlUp).Row)) Sheets("Tableau de Bord").Range("D15") = X Sheets("Feuil5").Select X = Application.WorksheetFunction.CountA(Range("A1:A" & Range("A65536").End(xlUp).Row)) Sheets("Tableau de Bord").Range("D16") = X Sheets("Feuil6").Select X = Application.WorksheetFunction.CountA(Range("A1:A" & Range("A65536").End(xlUp).Row)) Sheets("Tableau de Bord").Range("D17") = X Application.DisplayAlerts = False Sheets("Feuil1").Select ActiveWindow.SelectedSheets.Delete Sheets("Feuil2").Select ActiveWindow.SelectedSheets.Delete Sheets("Feuil3").Select ActiveWindow.SelectedSheets.Delete Sheets("Feuil4").Select ActiveWindow.SelectedSheets.Delete Sheets("Feuil5").Select ActiveWindow.SelectedSheets.Delete Sheets("Feuil6").Select ActiveWindow.SelectedSheets.Delete Application.DisplayAlerts = True Sheets("Tableau de Bord").Select Range("A21:FE1267").Select Selection.RowHeight = 14.5 Range("B32").Select Range("A21:CQ1120").Select Selection.FormatConditions.Add Type:=xlTextString, String:="=$B$7", _ TextOperator:=xlContains Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Font .Bold = True .Italic = False .TintAndShade = 0 End With With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Range("A1").Select Application.ScreenUpdating = True MsgBox "durée du traitement: " & Timer - start & " secondes" End Sub 'Retourne toutes les adresses trouvées dans la recherche 'WkbN = nom du classeur, avec cette donnée la fonction peut être mise dans un xla 'WksN = nom de la feuille 'Plage = les coordonnées de la plage à parcourir. 'Retour dans le tableau donner en argument. Function RechFind(ByVal Cle As String, ByVal WkbN As String, ByVal WksN As String, ByVal Plage As String, ByRef TBadress() As Variant) As Long Dim Cherche, Ix As Long, PrAddress With Workbooks(WkbN).Sheets(WksN).Range(Plage) Set Cherche = .Find(Cle) If Not Cherche Is Nothing Then PrAddress = Cherche.Address Do ReDim Preserve TBadress(Ix) TBadress(Ix) = Cherche.Address Set Cherche = .FindNext(Cherche) Ix = Ix + 1 Loop While Not Cherche Is Nothing And Cherche.Address <> PrAddress End If End With 'nombre d'occurence(s) trouvée(s), Retour 0 si aucune occurence RechFind = Ix Set Cherche = Nothing 'Libére la mémoire occupée par l'objet. End Function
-