OVH Cloud OVH Cloud

erreur d'execution 91

2 réponses
Avatar
zava
Bonjour =E0 tous

J'ai un probl=E8me avec la macro ci-dessous.
Ce que je veux faire c'est :
1)dans une 1=E8re feuille "A traiter" elle cherche dans la=20
colonne "C" les cellules=3D"Total". Elle selectionne la=20
ligne enti=E8re et la copie
2) elle selectionne la feuille "temp" et recherche la=20
premi=E8re cellule vide de la colonne "A" pour coller
3) elle revient =E0 la feuille "A traiter" et supprime la=20
ligne qui est rest=E9e selectionn=E9=20

Et tant qu'il y a "Total" dans la colonne "C" elle doit=20
refaire la boucle 1) 2) 3) (cette instruction je ne sais=20
pas faire)

Voici donc le code que j'ai utilis=E9

Sub recherche()
'
i =3D 1
j =3D 10 " j'ai mis 10 car je ne sais pas faire tant=20
qu'il existe "Total"
'
For i =3D 1 To j
Columns("C:C").Select
Selection.Find(What:=3D"Total", After:=3DActiveCell, =20
LookIn:=3DxlFormulas, _
LookAt:=3DxlWhole, SearchOrder:=3DxlByRows,=20
SearchDirection:=3DxlNext, _
MatchCase:=3DTrue).Activate
'
ActiveCell.Select
Selection.EntireRow.Select
Selection.Copy
Sheets("temp").Select
Range("A1").Select
---------------------
Bug =E0 partir de la ligne suivante avec message :
" erreur d'execution 91 =20
variable objet ou variable de bloc With non definie"
=3D> je ne sais pas si la boucle se fait comme il faut
--------------------------------------------------

Cells.FindNext(After:=3DActiveCell).Activate=20
=20
ActiveSheet.Paste
Sheets("A traiter").Activate
Selection.Delete
Next i
End Sub

En r=E9sum=E9 :
- pourquoi le msg d'erreur et commment l'eviter=20
- depuis,la recherche Edition/recherche pour une cellule=20
vide ne marche plus =20
- quel code =E0 utiliser pour qu'elle cherche le=20
texte "Total" tant qu'il y en a dans la colonne "C"

j'esp=E8re que j'ai bien expos=E9 mon probl=E8me et mes attentes

Merci et a+

2 réponses

Avatar
michdenis
Bonjour Zaza,

Une erreur 91 est générée si la méthode ne trouve pas ce qu'elle cherche .


Pour faire ce que tu cherches, tu peux t'inspirer ce cette structure, un exemple similaire se retrouve dans l'aide
d'excel.


'-----------------------------------------
Sub ChercherMot()

Dim FoundCell As Range
Dim LeString As String, Adr As String

LeString = 2 'La Valeur que tu cherches

With Worksheets("Feuil2") 'à déterminer
.Activate
With .Range("A1:A50") 'à déterminer
Set FoundCell = .Cells.Find( _
What:=LeString, _
LookIn:=xlValues, _
LookAt:=xlWhole)
If Not FoundCell Is Nothing Then
Adr = FoundCell.Address
Do
'lorsque la cellule est trouvé , inscrit ton
'code ici pour la copie sur l'autre feuille

Feuille de destination
With Worksheets("NomFeuilleDeDestination")
FoundCell.entirerow.copy _
.Range("A" & .range("A65536").end(xlup)(2).row


Set FoundCell = .Cells.FindNext( _
After:=FoundCell)
Loop While Not FoundCell Is Nothing And _
FoundCell.Address <> Adr
End If
End With
End With
End Sub
'-----------------------------------------



Tu pourrais faire aussi un filtre automatique sur la colonne dont certaines cellules prennent la valeur "Total" et
copier le résultat du fitre vers ta plage de destination... Si ta plage est importante, cette méthode est sûrement plus
rapide...


Salutations!





"zava" a écrit dans le message de news:0e0401c37dcb$b5be0c30$
Bonjour à tous

J'ai un problème avec la macro ci-dessous.
Ce que je veux faire c'est :
1)dans une 1ère feuille "A traiter" elle cherche dans la
colonne "C" les cellules="Total". Elle selectionne la
ligne entière et la copie
2) elle selectionne la feuille "temp" et recherche la
première cellule vide de la colonne "A" pour coller
3) elle revient à la feuille "A traiter" et supprime la
ligne qui est restée selectionné

Et tant qu'il y a "Total" dans la colonne "C" elle doit
refaire la boucle 1) 2) 3) (cette instruction je ne sais
pas faire)

Voici donc le code que j'ai utilisé

Sub recherche()
'
i = 1
j = 10 " j'ai mis 10 car je ne sais pas faire tant
qu'il existe "Total"
'
For i = 1 To j
Columns("C:C").Select
Selection.Find(What:="Total", After:¬tiveCell,
LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:=True).Activate
'
ActiveCell.Select
Selection.EntireRow.Select
Selection.Copy
Sheets("temp").Select
Range("A1").Select
---------------------
Bug à partir de la ligne suivante avec message :
" erreur d'execution 91
variable objet ou variable de bloc With non definie"
=> je ne sais pas si la boucle se fait comme il faut
--------------------------------------------------

Cells.FindNext(After:¬tiveCell).Activate

ActiveSheet.Paste
Sheets("A traiter").Activate
Selection.Delete
Next i
End Sub

En résumé :
- pourquoi le msg d'erreur et commment l'eviter
- depuis,la recherche Edition/recherche pour une cellule
vide ne marche plus
- quel code à utiliser pour qu'elle cherche le
texte "Total" tant qu'il y en a dans la colonne "C"

j'espère que j'ai bien exposé mon problème et mes attentes

Merci et a+
Avatar
Zava
Bonjour Michdenis et LN

Merci à vous pour vos reponses, je pense que je trouverai
ce qui conviendrai à mon application entre les 2 solutions

A+

zava
-----Message d'origine-----
Bonjour zaza

J'ai enfin trouvé une solution final à ton problème.

Merci à michdenis pour avoir résolu un de mes problèmes
en

même temps.

J'espère que çà te servira.

Sub Macro2()
'
Dim i As Integer
Dim j As Integer
Dim Trouve As Range
Dim Arret As Boolean
Arret = False
For i = 1 To 100
Sheets("A traiter").Select
Columns(3).Select
Set Trouve = Selection.Find(What:="Total",
After:¬tiveCell, _
LookIn:=xlFormulas,
LookAt:=xlPart, _
SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse)
If Trouve Is Nothing Then
Arret = True
MsgBox ("C'est fini")
i = 100
ElseIf Arret <> True Then
Trouve.EntireRow.Copy
Sheets("temp").Select
j = 1
While Cells(j, 3) <> ""
j = j + 1
Wend
Rows(j).Select
ActiveSheet.Paste

Sheets("A traiter").Select
Trouve.EntireRow.Select
Trouve.EntireRow.Delete Shift:=xlUp
End If
Next
End Sub

A bientôt

LN

-----Message d'origine-----
Bonjour Zaza,

Une erreur 91 est générée si la méthode ne trouve pas ce
qu'elle cherche .


Pour faire ce que tu cherches, tu peux t'inspirer ce
cette structure, un exemple similaire se retrouve dans

l'aide
d'excel.

'-----------------------------------------
Sub ChercherMot()

Dim FoundCell As Range
Dim LeString As String, Adr As String

LeString = 2 'La Valeur que tu cherches

With Worksheets("Feuil2") 'à déterminer
.Activate
With .Range("A1:A50") 'à déterminer
Set FoundCell = .Cells.Find( _
What:=LeString, _
LookIn:=xlValues, _
LookAt:=xlWhole)
If Not FoundCell Is Nothing Then
Adr = FoundCell.Address
Do
'lorsque la cellule est trouvé , inscrit
ton

'code ici pour la copie sur l'autre
feuille


Feuille de destination
With Worksheets
("NomFeuilleDeDestination")


FoundCell.entirerow.copy _
.Range("A" & .range("A65536").end
(xlup)(2).row



Set FoundCell = .Cells.FindNext( _
After:=FoundCell)
Loop While Not FoundCell Is Nothing And _
FoundCell.Address <> Adr
End If
End With
End With
End Sub
'-----------------------------------------



Tu pourrais faire aussi un filtre automatique sur la
colonne dont certaines cellules prennent la

valeur "Total"

et
copier le résultat du fitre vers ta plage de
destination... Si ta plage est importante, cette méthode

est sûrement plus
rapide...


Salutations!





"zava" a écrit dans le message
de news:0e0401c37dcb$b5be0c30$

Bonjour à tous

J'ai un problème avec la macro ci-dessous.
Ce que je veux faire c'est :
1)dans une 1ère feuille "A traiter" elle cherche dans la
colonne "C" les cellules="Total". Elle selectionne la
ligne entière et la copie
2) elle selectionne la feuille "temp" et recherche la
première cellule vide de la colonne "A" pour coller
3) elle revient à la feuille "A traiter" et supprime la
ligne qui est restée selectionné

Et tant qu'il y a "Total" dans la colonne "C" elle doit
refaire la boucle 1) 2) 3) (cette instruction je ne sais
pas faire)

Voici donc le code que j'ai utilisé

Sub recherche()
'
i = 1
j = 10 " j'ai mis 10 car je ne sais pas faire tant
qu'il existe "Total"
'
For i = 1 To j
Columns("C:C").Select
Selection.Find(What:="Total", After:¬tiveCell,
LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:=True).Activate
'
ActiveCell.Select
Selection.EntireRow.Select
Selection.Copy
Sheets("temp").Select
Range("A1").Select
---------------------
Bug à partir de la ligne suivante avec message :
" erreur d'execution 91
variable objet ou variable de bloc With non definie"
=> je ne sais pas si la boucle se fait comme il faut
--------------------------------------------------

Cells.FindNext(After:¬tiveCell).Activate

ActiveSheet.Paste
Sheets("A traiter").Activate
Selection.Delete
Next i
End Sub

En résumé :
- pourquoi le msg d'erreur et commment l'eviter
- depuis,la recherche Edition/recherche pour une cellule
vide ne marche plus
- quel code à utiliser pour qu'elle cherche le
texte "Total" tant qu'il y en a dans la colonne "C"

j'espère que j'ai bien exposé mon problème et mes
attentes



Merci et a+



.

.