Probléme Erreur 13 Incompatibilité de type ??? ;(

Nasr

XLDnaute Nouveau
Bonjour,

La macro ci dessous permet de faire un tri en fonction des mots demandés et de les reporter vers une nouvelle feuille.
Le soucis, c'est lorsque, je prends pour test un document avec 5 colonnes et 10 lignes.

Par avance merci pour votre aide.

Sub LignesMultiMotsClasseur()
Dim WB As Workbook
Dim S As Worksheet
Dim rep
Dim R As Range
Dim Titres
Dim var
Dim dep&
Dim g&
Dim h&
Dim i&
Dim j&
Dim k&
Dim cpt&
Dim T()
Dim A$
Dim B$()
On Error GoTo Erreur
Titres = Array("Mot recherché", "Feuille", "N° de ligne")
rep = Application.InputBox( _
"Tapez le mot à rechercher" & vbCrLf & vbCrLf & _
"Si plusieurs mots, les séparer par un antislash ( \ )", _
"Lignes contenant les mots recherchés")
If rep = False Or rep = "" Then Exit Sub
A$ = LCase(rep)
Do Until Left(A$, 1) <> "\" And Left(A$, 1) <> Space(1)
A$ = Mid(A$, 2)
Loop
Do Until Right(A$, 1) <> "\" And Right(A$, 1) <> Space(1)
A$ = Mid(A$, 1, Len(A$) - 1)
Loop
If InStr(1, A$, "\") = 0 Then
ReDim B$(1 To 1)
B$(1) = A$
Else
Do Until A$ = ""
If Right(A$, 1) <> "\" Then A$ = A$ & "\"
i& = i& + 1
ReDim Preserve B$(1 To i&)
B$(i&) = Mid(A$, 1, InStr(1, A$, "\") - 1)
A$ = Trim(Mid(A$, Len(B$(i&)) + 2))
Do Until Left(A$, 1) <> "\" And Left(A$, 1) <> Space(1)
A$ = Mid(A$, 2)
Loop
B$(i&) = Trim(B$(i&))
Loop
End If
Set WB = ActiveWorkbook
For h& = 1 To WB.Worksheets.Count
Set S = WB.Worksheets(h&)
Set R = S.UsedRange
dep& = R.Row
var = R
If R.Columns.Count > 253 Then
MsgBox "La feuille ''" & S.Name & _
"'' ne peut être traitée car elle comporte plus de 253 colonnes."
Else
If Not IsEmpty(var) Then
For g& = 1 To UBound(B$)
For i& = 1 To UBound(var, 1)
For j& = 1 To UBound(var, 2)
A$ = LCase(Trim(var(i&, j&)))
If InStr(1, A$, B$(g&)) > 0 Then
cpt& = cpt& + 1
ReDim Preserve T(1 To 253, 1 To cpt&)
T(1, cpt&) = B$(g&)
T(2, cpt&) = S.Name
T(3, cpt&) = i& + dep& - 1
For k& = 1 To UBound(var, 2)
T(k& + 3, cpt&) = var(i&, k&)
Next k&
Exit For
End If
Next j&
Next i&
Next g&
End If
End If
Next h&
If cpt& = 0 Then
A$ = ""
For i& = 1 To UBound(B$)
A$ = A$ & vbCrLf & B$(i&)
Next i&
MsgBox "Aucune occurence de" & A$ & vbCrLf & "n'a été trouvée."
Exit Sub
Else
Application.ScreenUpdating = False
Set S = Sheets.Add(before:=ActiveSheet)
Set R = S.Range(S.Cells(2, 1), S.Cells(UBound(T, 2) + 1, UBound(T, 1)))
R = Application.WorksheetFunction.Transpose(T)
Set R = S.Range(S.Cells(1, 1), S.Cells(1, UBound(Titres) + 1))
R = Titres
R.HorizontalAlignment = xlCenter
R.Font.Bold = True
R.Interior.ColorIndex = 40
S.Cells.Columns.AutoFit
End If
Erreur:
Application.ScreenUpdating = True
If Err <> 0 Then MsgBox "Erreur : " & Err.Number & vbCrLf & Err.Description

End Sub
;)
 

tototiti2008

XLDnaute Barbatruc
Re : Probléme Erreur 13 Incompatibilité de type ??? ;(

Bonjour Nasr,

Bienvenue sur XLD,

Pas de fichier exemple ?
Pas de précision sur le problème, on sait juste qu'il y a un soucis
J'ai peur qu'il n'y ait pas non plus de réponse à ta question...

Un lien vers la charte :
Lien supprimé
 

Nasr

XLDnaute Nouveau
Re : Probléme Erreur 13 Incompatibilité de type ??? ;(

Damn it, je suis allé trop vite en pensant avoir expliqué le probléme.
En faite, lorsque je lance la macro ça marche dan sla majorité des cas sauf lorsque il y a peut être beaucoup de contenu dans les cellules enfin c'est une inconnus.
La macro ne buuug pas mais une pop up excel me dit Erreur 13 etc...

J'essaie de mettre un exemple Thks ;) et sorry
 

job75

XLDnaute Barbatruc
Re : Probléme Erreur 13 Incompatibilité de type ??? ;(

Bonjour Nasr, tototiti,

Le message d'erreur c'est bien sûr la macro qui l'envoie.

Dans le code mettez le contrôle d'erreur en commentaire :

Code:
'On Error GoTo Erreur

De cette manière vous pourrez facilement voir quelle instruction ne va pas.

J'ai vu, mais j'ai ensuite vite abandonné : cette macro ne vaut pas un clou, désolé pour son auteur.

A+

A+
 

Bebere

XLDnaute Barbatruc
Re : Probléme Erreur 13 Incompatibilité de type ??? ;(

bonjour Nasr,Tototiti,Job
un code qui fonctionne pour la recherche

Sub cherche()
Dim tbl
rep = Application.InputBox("Tapez le mot ou la phrase à rechercher")
If rep = False Or rep = "" Then Exit Sub
ReDim tbl(1 To 3, 1 To 1)
tbl(1, 1) = "Mot recherché"
tbl(2, 1) = "Feuille"
tbl(3, 1) = "N° de ligne"

With Sheets("123")
.Activate
Set cel = .Cells.Find(rep)
If Not cel Is Nothing Then
firstAddress = cel.Address
Do
ReDim Preserve tbl(1 To UBound(tbl, 1), 1 To UBound(tbl, 2) + 1)
tbl(1, UBound(tbl, 2)) = rep
tbl(2, UBound(tbl, 2)) = ActiveSheet.Name
tbl(3, UBound(tbl, 2)) = cel.Row

Set cel = .Cells.FindNext(cel)
Loop While Not cel Is Nothing And cel.Address <> firstAddress
End If
End With
tbl = Application.Transpose(tbl)
With Sheets("Feuil3")
.Range("A1").Resize(UBound(tbl, 1), UBound(tbl, 2)) = tbl
End With

End Sub

à bientôt
 

Nasr

XLDnaute Nouveau
Re : Probléme Erreur 13 Incompatibilité de type ??? ;(

Bonjour Tototiti, Job, bebere,

Merci Job, je suis d'accord avec toi.

@bebere, Merci pour la macro ;), une petite précision, comment faire pour que la macro copie toute la cellule et non juste le mot et chercher plusieurs mots. Sorry ;)

Par avance MERCI
@+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Probléme Erreur 13 Incompatibilité de type ??? ;(

Bonjour Nasr, salut Bebere,

Une autre solution :

Code:
Option Explicit
Option Compare Text 'facultatif, la casse n'est pas prise en compte

Sub Recherche()
Dim rep, tablo, h&, L&, col%, lig&
rep = Application.InputBox( _
    "Tapez le mot à rechercher" & vbCrLf & vbCrLf & _
    "Si plusieurs mots, les séparer par un astérisque *", _
    "Cellules contenant les mots recherchés")
If rep = False Or rep = "" Then Exit Sub
rep = "*" & rep & "*"
tablo = Range("A1:A2", ActiveSheet.UsedRange) 'pour avoir au moins 2 éléments
h = UBound(tablo) 'hauteur du tableau
L = 2 '1ère ligne de résultats
With Sheets("Résultat")
  .[A2:B65536].ClearContents 'effacement préalable
  For col = 1 To UBound(tablo, 2)
    For lig = 1 To h
      If tablo(lig, col) Like rep Then
        .Cells(L, 1) = Cells(lig, col).Address(0, 0)
        .Cells(L, 2) = Cells(lig, col)
        L = L + 1
      End If
    Next
  Next
  If L = 2 Then MsgBox "Aucun résultat...": Exit Sub
  .Columns(2).WrapText = False 'pas de renvoi à la ligne
  .Activate
End With
End Sub
L'utilisation du tableau tablo accélère énormément la macro.
Fichier joint.

A+
 

Pièces jointes

  • Recherche(1).zip
    44.2 KB · Affichages: 30
  • Recherche(1).zip
    44.2 KB · Affichages: 32
  • Recherche(1).zip
    44.2 KB · Affichages: 35

job75

XLDnaute Barbatruc
Re : Probléme Erreur 13 Incompatibilité de type ??? ;(

Re,

Sinon avec la méthode Find comme le fait Bebere :

Code:
Sub Recherche()
Dim rep, L&, ref As Range, ad$
rep = Application.InputBox( _
    "Tapez le mot à rechercher" & vbCrLf & vbCrLf & _
    "Si plusieurs mots, les séparer par un astérisque *", _
    "Cellules contenant les mots recherchés")
If rep = False Or rep = "" Then Exit Sub
L = 2 '1ère ligne de résultats
Set ref = [IV65536]
With Sheets("Résultat")
  .[A2:B65536].ClearContents 'effacement préalable
1 Set ref = Cells.Find(rep, After:=ref, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns)
  If ref Is Nothing Then MsgBox "Aucun résultat...": Exit Sub
  If ref.Address <> ad Then
    If ad = "" Then ad = ref.Address
    .Cells(L, 1) = ref.Address(0, 0)
    .Cells(L, 2) = ref
    L = L + 1
    GoTo 1
  End If
  .Columns(2).WrapText = False 'pas de renvoi à la ligne
  .Activate
End With
End Sub
Fichier (2).

On peut essayer de comparer les versions (1) et (2) en terme de rapidité.

A+
 

Pièces jointes

  • Recherche(2).zip
    44 KB · Affichages: 31
  • Recherche(2).zip
    44 KB · Affichages: 27
  • Recherche(2).zip
    44 KB · Affichages: 28
Dernière édition:

job75

XLDnaute Barbatruc
Re : Probléme Erreur 13 Incompatibilité de type ??? ;(

Re,

On peut essayer de comparer les versions (1) et (2) en terme de rapidité.

J'ai réalisé 1000 boucles avec la recherche de 24/04.

Version (1) => 78 secondes

Version (2) => 3,5 secondes Edit 1 : erreur, 26 secondes

Y a pas photo, mais il faut bien voir que la Dernière cellule est en J5002.

La version (1) étudie donc 50020 cellules à chaque boucle...

Edit 2 : noter que sur les 26 s l'inscription dans la feuille Résultat (16 lignes x 1000) prend 3,7 s.

A+
 
Dernière édition:

Nasr

XLDnaute Nouveau
Re : Probléme Erreur 13 Incompatibilité de type ??? ;(

Une question, lorsque l'on fait une recherche sur plusieurs mots clés grace à "*", quelqu'un serait comment ajouter dans la macro la récupération du mots clés par rapport au contenu copier ? c'est à dire que le mot clé associé soit recopier sur la nouvelle au même niveau que le contenu.

Par avance merci !!!!!!!!!!!!!! Sorry '(
 

job75

XLDnaute Barbatruc
Re : Probléme Erreur 13 Incompatibilité de type ??? ;(

Re,

Il n'y a pas plusieurs mots clés recherchés mais une seule expression avec des *.

Je pense que vous n'avez pas compris ce que fait l'astérisque * dans la recherche.

Si c'est le cas faites une recherche dans l'Aide Excel sur caractères génériques.

Autrement, exécutez la macro successivement pour chaque mot clé.

Cela peut s'automatiser bien sûr, mais perso j'en ai assez fait sur ce fil, à vous de travailler un peu...

A+
 

Discussions similaires

Réponses
11
Affichages
280

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi