Erreur d'execution 13 sur une macro recherche

walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012 - 29 mars 2012 à 13:20
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012 - 2 avril 2012 à 13:04
Bonjour

Voici le code que j'utilise , c'est un code pour effectuer une recherche dans un fichier excel puis il copie les resultat dans une nouvelle feuille , je l'est récupérer sur ce site , il fonctionne tres bien sur une petite base de donneees par contre la je dois effectuer sur une base de 65000 lignes et ca ne fonctionne pas je ne comprend pas pourquoi il m'indique erreur d'exeution 13 sur la ligne :
R = Application.WorksheetFunction.Transpose(T)

donc voila merci pour votre aide car je bloque vraiment .

Sub LignesMotRecheche()
Dim S As Worksheet
Dim rep
Dim R As Range
Dim var
Dim dep&
Dim i&
Dim j&
Dim k&
Dim cpt&
Dim T()
Dim A$
Dim B$
rep = Application.InputBox("Tapez le mot à rechercher", "Lignes contenant le mot recherché")
If rep False Or rep "" Then Exit Sub
B$ = LCase(rep)
Set R = ActiveSheet.UsedRange
dep& = R.Row
var = R
For i& = 1 To UBound(var, 1)
For j& = 1 To UBound(var, 2)
A$ = LCase(Trim(var(i&, j&))) 'commodité d'écriture
If InStr(1, A$, B$) > 0 Then
cpt& = cpt& + 1
ReDim Preserve T(1 To UBound(var, 2) + 1, 1 To cpt&)
T(1, cpt&) = i& + dep& - 1
For k& = 1 To UBound(var, 2)
T(k& + 1, cpt&) = var(i&, k&)
Next k&
Exit For
End If
Next j&
Next i&
If cpt& = 0 Then
MsgBox "Aucune occurence de ''" & rep & "'' n'a été trouvée."
Exit Sub
Else
Set S = Sheets.Add(before:=ActiveSheet)
Set R = S.Range(S.Cells(1, 1), S.Cells(UBound(T, 2), UBound(T, 1)))
R = Application.WorksheetFunction.Transpose(T)
End If
End Sub

13 réponses

NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
29 mars 2012 à 13:30
Bonjour,

Quand tu poste un code, lis le point 2 de ma signature.
Sinon, quel est l'intitulé du message d'erreur ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
29 mars 2012 à 13:36
slt merci pour ta reponse , donc l'erreur et erreur d'exeution 13
je vien juste de remarquer que cela ne dépend pas du nombre de ligne mais du nombre de colone , l'erreur se situe au niveau de cette ligne
R = Application.WorksheetFunction.Transpose(T) 
0
NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
29 mars 2012 à 13:42
Bonjour,

Erreur 13 : Type incompatible

concernant le code, je ne le lirais pas tant que tu n'auras pas posté selon le point 2 de ma signature.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
29 mars 2012 à 13:48
ah oui desoler j'ai oublier voila le code .

Sub LignesMotRecheche()
Dim S As Worksheet
Dim rep
Dim R As Range
Dim var
Dim dep&
Dim i&
Dim j&
Dim k&
Dim cpt&
Dim T()
Dim A$
Dim B$
rep = Application.InputBox("Tapez le mot à rechercher", "Lignes contenant le mot recherché")
If rep False Or rep "" Then Exit Sub
B$ = LCase(rep)
Set R = ActiveSheet.UsedRange
dep& = R.Row
var = R
For i& = 1 To UBound(var, 1)
For j& = 1 To UBound(var, 2)
A$ = LCase(Trim(var(i&, j&))) 'commodité d'écriture
If InStr(1, A$, B$) > 0 Then
cpt& = cpt& + 1
ReDim Preserve T(1 To UBound(var, 2) + 1, 1 To cpt&)
T(1, cpt&) = i& + dep& - 1
For k& = 1 To UBound(var, 2)
T(k& + 1, cpt&) = var(i&, k&)
Next k&
Exit For
End If
Next j&
Next i&
If cpt& = 0 Then
MsgBox "Aucune occurence de ''" & rep & "'' n'a été trouvée."
Exit Sub
Else
Set S = Sheets.Add(before:=ActiveSheet)
Set R = S.Range(S.Cells(1, 1), S.Cells(UBound(T, 2), UBound(T, 1)))
R = Application.WorksheetFunction.Transpose(T)  le probleme et la 
End If
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
29 mars 2012 à 14:00
Bonjour,

C'est mieux.
Maintenant pour faciliter la lecture du code, il faudrait :
- L'indenter
- Déclarer correctement les variables :
Dim S As Worksheet
Dim rep
Dim R As Range
Dim var
Dim dep&
Dim i&
Dim j&
Dim k&
Dim cpt&
Dim T()
Dim A$
Dim B$


Devient :
Dim S As Worksheet
Dim rep as Variant
Dim R As Range
Dim var as Variant
Dim dep As Long
Dim i As Long
Dim j As Long
Dim k As Long
Dim cpt As Long
Dim T() As Variant
Dim A As Long
Dim B As Long


Ensuite, retires toutes les indication de type dans ton code.
Force le "Option Explicit" (sans les ") en haut du module de code.

Par exemple :
A$ = LCase(Trim(var(i&, j&)))
Devient :
A = LCase$(Trim$(var(i, j)))
(Le $ sur les fonctions permet d'accélérer le code (si retourne chaines), c'est optionnel)

Pas besoin de préciser le "Application" lors des appels :
Application.WorksheetFunction.Transpose
et
Application.InputBox

Le code, c'est du VB et pas du VBS, lors de tes prochains messages, fais y attention concernant la coloration syntaxique.

En plus, pour faciliter la lecture, il est très utile de nommer de manière claire les variables :
R, i, j, A, B, c'est pas forcément parlant pour tout le monde.
Un peu plus de commentaire pourrais aider à comprendre.


Et pour finir, tu as classé ton message dans VB6/Divers/Débutant alors que c'est du VBA, je déplace le sujet.

une fois les corrections faites, le code sera beaucoup plus lisible.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
29 mars 2012 à 14:07
Ok merci jvais faire se que tu ma ecrit jsuis debutant donc jivais doucement lol .
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
29 mars 2012 à 14:24
donc j'ai bien essayer ce que tu ma dit mais toujours rien , j'ai toujours la meme erreur , je galerie vraiment , je mi connais pas du tout en vba .
0
NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
29 mars 2012 à 19:46
Bonjour,

Une fois ton code remis en forme selon mes conseils, peux-tu le poster, ce sera nettement plus simple à comprendre.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
29 mars 2012 à 20:03
Bonjour,
1) je souscris sans réserve à la remarque faite par NHenry : un code non indenté me donne le torticolis et je ne tente pas de l'analyser.
2) tu développes donc sous VBA (le VBA de Excel) et ta discussion n'aurait pas du être ouverte ici :
Forum > Visual Basic 6 > Divers

mais dans la section Langages dérivés VBA. Prends en bonne note pour tes prochaines discussions (c'est important).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
30 mars 2012 à 04:03
Bonjour,

Je n'ai pas étudié ton code avec attention mais à mon humble avis tu as frappé le mur à la vitesse maximale.

Ta fonction transpose() change les lignes en colonnes et les colonnes en ligne. Sauf que cela plante joyeusement quand elle essaie de mettre tes 65000 lignes dans 256 (Excel 2003 et avant) ou 16384 (Excel 2007 et Excel 2010) colonnes.

Soit que tu prennes des fichiers plus petits, soit que tu changes de méthode.

Et puis, si tu avais tapé erreur 13 dans l'aide de VBA, tu aurais eu quelques explications

Les limites d'Excel sont indiquées dans l'aide d'Excel.
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
30 mars 2012 à 09:38
Salut , ya t'il une autre solution car j'ai rien trouver , je mi connais pas du tout .
0
Utilisateur anonyme
30 mars 2012 à 17:35
Bonjour,

Tu cherches quoi, pour faire quoi. Tu prends un code que tu ne comprends pas et qui se plante.

Si ton code fonctionne sur des fichiers plus petits, tu peux provisoirement séparer tes gros fichiers en petits fichiers le temps d'apprendre VBA.

Sépare ton problème en petites étapes facilement surmontables. Même si l'enregistreur de macros est trop zélé, tu peux t'enregistrer des macros et étudier, et comprendre le résultat.

Et puis tu n'as rien à perdre d'un passage par là.
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
2 avril 2012 à 13:04
je cherche un programme qui me permettrai de chercher une référence ensuite a partir de cette référence qu'il copie tout les lignes contenant cette référence ensuite les enregistrer dans un fichier .
0
Rejoignez-nous