Runtime error 91 ? Need Help...

Fermé
laurent13400 Messages postés 2 Date d'inscription jeudi 9 avril 2015 Statut Membre Dernière intervention 9 avril 2015 - 9 avril 2015 à 13:00
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 10 avril 2015 à 09:11
Bonjour,

J'essaye de developper une macro recopiant la collone +1 d'un intulé de ligne en la transposant sur la feuille suivante, ma boucle fonctionne, mais a la fin une erreur apparait.

Voici mon code :

Sub find_transpose()

' Variables
Dim What As String 'Valeur Cherché
Dim Frow As Long 'Ligne Valeur Trouve
Dim Last_row As Long 'Derniere ligne recherche
Dim l As Long 'ligne
Dim Lr As Long 'Last row sheet 2

'Recopie Vendor
l = 1
Last_row = Range("B1000000").End(xlUp).Row + 2
lastr = Range("B1000000").End(xlUp).Row
Sheets(1).Activate

'Vendor

For l = 1 To lastr

Sheets(1).Activate

Lr = 1 'Derniere ligne onglet 2

Sheets(1).Activate

What = "Vendor" 'Variante recherché
Sheets(1).Activate
Frow = Sheets(1).Range(Cells(l, 2), Cells(Last_row, 2)).find(What).Row 'Renvoi de la ligne

Cells(Frow, 3).Copy ' Copie de la cellule cherché

'Collage en derniere ligne
Sheets(2).Activate
Lr = Range("A1000000").End(xlUp).Row + 1
Cells(Lr, 1).PasteSpecial

Sheets(1).Activate


'Decalage d'une ligne
Lr = Lr + 1
l = Frow + 1

Next

End Sub

Merci par avance pour votre aide,

Cordialement.
A voir également:

3 réponses

Salut,

Je ne sais pas si l'erreur vient de là (pas testé) mais voilà ce que j'ai trouvé

For l = 1 To lastr
'...
'...
l = Frow + 1
Next


Dans ta boucle For, la variable de contrôle l est modifiée juste avant le Next.
C'est peut-être voulu, mais normalement on ne procède pas comme ça.
C'est le Next qui doit incrémenter la variable.

A+
0
laurent13400 Messages postés 2 Date d'inscription jeudi 9 avril 2015 Statut Membre Dernière intervention 9 avril 2015
9 avril 2015 à 15:43
Salut,

En fait, j'ai fait ceci pour que la rechercherche reprenne seulement apres la premiere ligne trouvée.

J'ai essayé en supprimant, l'erreur subsiste.

Pour info l'erreur semble se situer dans ma variable Frow, car le debugger me surligne ceci :
Frow = Range(Cells(l, 2), Cells(Last_row, 2)).find(What).Row

Merci tout de meme.

PS : Mais excuses pour l'absence d'accent, je suis en clavier QWERTY...
0
Re,

Je crois que ton problème vient d'une d'une mauvaise utilisation de la méthode Find.

Essaie avec cette macro si ça va mieux

Sub find_transpose()
' Variables
Dim What As String 'Valeur Cherché
Dim Frow As Long 'Ligne Valeur Trouve
Dim Last_row As Long 'Derniere ligne recherche
Dim l As Long 'ligne
Dim Lr As Long 'Last row sheet 2
'Recopie Vendor
l = 1
Last_row = Range("B1000000").End(xlUp).Row + 2
lastr = Range("B1000000").End(xlUp).Row

Dim c, firstAddress

Sheets(1).Activate
'Vendor
What = "Vendor" 'Variante recherché

With Sheets(1).Range(Cells(l, 2), Cells(Last_row, 2))
Set c = .Find(What)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Frow = c.Row
Cells(Frow, 3).Copy ' Copie de la cellule cherché
'Collage en derniere ligne
Sheets(2).Activate
Lr = Range("A1000000").End(xlUp).Row + 1
Cells(Lr, 1).PasteSpecial
Sheets(1).Activate
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End Sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
10 avril 2015 à 09:11
Bonjour
What est un nom réservé...
... find(what:="vendor") ou what find("Vendor")

mais tu n'as pas besoin de lancer une boucle

si tu n'as qu'un "vendor"
With Sheets(1)
If Application.CountIf(Columns("A"), "vendor") > 0 Then
Frow = Columns("A").Find("vendor", Range("A1"), xlValues).Row
Data = Cells(Frow, "C").Value
End If
End With
With Sheets(2)
lr = .Range("A1000000").End(xlUp).Row + 1
.Cells(lr, "A") = Data
End With


Si tu as plusieurs "vendor" à copier fais signe (on ne boucle que sur le nombre de "vendor"

je n'ai pas compris le pastespecial qui ne spécifie rien (format,valeur...) et j'ai supposé qu'il s'agissait de la valeur de la colonne C
Michel
0