OVH Cloud OVH Cloud

Variable qui ne varie pas

14 réponses
Avatar
Zanello
Bonjour.

J'ai un problème de variable.
Dans la boucle For... Next, la variable Chan_trouvé ne change pas.
Au premier passage elle prend bien la bonne valeur mais à la boucle d'après
elle garde sa valeur sans la recalculer.
Est-ce qu'un costaud (ou une d'ailleurs...) pourrait me dire où ça pêche.
Merci d'avance.


Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché =
Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub
Workbooks.Open FileName:= _
"C:\WINNT\Profiles\Franck\Bureau\compta\personnel fichier base.xls"
Windows("personnel fichier base.xls").Activate
Range("B45").Select
On Error Resume Next
Chan_trouvé = Range(Cells.Find(What:=Chan_cherché, After:=ActiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False).Address)
If Chan_trouvé = Empty Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next

10 réponses

1 2
Avatar
John Fuss
Essai :
SET Chan_trouvé = Range(Cells.Find(What:=Chan_cherché, After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)

car Chan_trouvé est un objet Range et on doit utiliser SET nomobj = obj.

John


"Zanello" a écrit dans le message de
news:
Bonjour.

J'ai un problème de variable.
Dans la boucle For... Next, la variable Chan_trouvé ne change pas.
Au premier passage elle prend bien la bonne valeur mais à la boucle
d'après

elle garde sa valeur sans la recalculer.
Est-ce qu'un costaud (ou une d'ailleurs...) pourrait me dire où ça pêche.
Merci d'avance.


Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché > Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub
Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier base.xls"
Windows("personnel fichier base.xls").Activate
Range("B45").Select
On Error Resume Next
Chan_trouvé = Range(Cells.Find(What:=Chan_cherché, After:¬tiveCell,
_

LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé = Empty Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next




Avatar
Zanello
C'est vrai.
J'avais enlevé le set pour voir le résultat produit et j'ai oublié de le
coller ici.
D'ailleurs s'il n'y est pas, le résultat est encore pire.
L'erreur que j'ai décrite plus bas arrive avec

Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)



"John Fuss" a écrit dans le message de news:
c91kn7$1d3$
Essai :
SET Chan_trouvé = Range(Cells.Find(What:=Chan_cherché, After:¬tiveCell,
_

LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)

car Chan_trouvé est un objet Range et on doit utiliser SET nomobj = obj.

John


"Zanello" a écrit dans le message de
news:
Bonjour.

J'ai un problème de variable.
Dans la boucle For... Next, la variable Chan_trouvé ne change pas.
Au premier passage elle prend bien la bonne valeur mais à la boucle
d'après

elle garde sa valeur sans la recalculer.
Est-ce qu'un costaud (ou une d'ailleurs...) pourrait me dire où ça
pêche.


Merci d'avance.


Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché > > Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub
Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier base.xls"
Windows("personnel fichier base.xls").Activate
Range("B45").Select
On Error Resume Next
Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell,


_
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé = Empty Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next








Avatar
John Fuss
Tu utilises on error resume next, ça vient peut-être de là, utilise
if Err.number <> 0 then 'si une erreur s'est produite


sinon ton test :
If Chan_trouvé = Empty Then
if Chan_trouvé is Empty then


If Chan_trouvé is empty or err.number = 0 then....

John

"Zanello" a écrit dans le message de
news:
C'est vrai.
J'avais enlevé le set pour voir le résultat produit et j'ai oublié de le
coller ici.
D'ailleurs s'il n'y est pas, le résultat est encore pire.
L'erreur que j'ai décrite plus bas arrive avec

Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)



"John Fuss" a écrit dans le message de news:
c91kn7$1d3$
Essai :
SET Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell,


_
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)

car Chan_trouvé est un objet Range et on doit utiliser SET nomobj = obj.

John


"Zanello" a écrit dans le message de
news:
Bonjour.

J'ai un problème de variable.
Dans la boucle For... Next, la variable Chan_trouvé ne change pas.
Au premier passage elle prend bien la bonne valeur mais à la boucle
d'après

elle garde sa valeur sans la recalculer.
Est-ce qu'un costaud (ou une d'ailleurs...) pourrait me dire où ça
pêche.


Merci d'avance.


Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché > > > Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub
Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier
base.xls"



Windows("personnel fichier base.xls").Activate
Range("B45").Select
On Error Resume Next
Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell,


_
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé = Empty Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next












Avatar
Zanello
Aie
J'ai maintenant une erreur 424 : objet requis
quand il arrive sur

If Chan_trouvé Is Empty Or Err.Number <> 0 Then



' Sélection du chantier cherché
Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub

' Copie des noms pour le chantier sélectionné
Worksheets("pers_chan").Select
i = 1
lignes_chan = Null
nombre_lignes = Worksheets("pers_chan").Range("A1").End(xlDown).Row
While i < nombre_lignes + 1
If Cells(i, 4) = Chan_cherché Then
lignes_chan = lignes_chan & i & ","
End If
i = i + 1
Wend
lignes_chan = Left(lignes_chan, Len(lignes_chan) - 1)
first_cell = "A" & Left(lignes_chan, InStr(lignes_chan, ",") - 1)
last_cell = "C" & Right(lignes_chan, InStr(lignes_chan, ",") - 1)
Range(first_cell, last_cell).Copy

' Recherche du chantier dans personnel fichier base.xls
Dim Chan_trouvé As Range
Windows("personnel fichier base.xls").Activate
Range("B45").Select
Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé Is Empty Or Err.Number <> 0 Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next



"John Fuss" a écrit dans le message de news:
c91mnp$2mq$
Tu utilises on error resume next, ça vient peut-être de là, utilise
if Err.number <> 0 then 'si une erreur s'est produite


sinon ton test :
If Chan_trouvé = Empty Then
if Chan_trouvé is Empty then


If Chan_trouvé is empty or err.number = 0 then....

John

"Zanello" a écrit dans le message de
news:
C'est vrai.
J'avais enlevé le set pour voir le résultat produit et j'ai oublié de le
coller ici.
D'ailleurs s'il n'y est pas, le résultat est encore pire.
L'erreur que j'ai décrite plus bas arrive avec

Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)



"John Fuss" a écrit dans le message de news:
c91kn7$1d3$
Essai :
SET Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell,


_
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)

car Chan_trouvé est un objet Range et on doit utiliser SET nomobj obj.

John


"Zanello" a écrit dans le message de
news:
Bonjour.

J'ai un problème de variable.
Dans la boucle For... Next, la variable Chan_trouvé ne change pas.
Au premier passage elle prend bien la bonne valeur mais à la boucle
d'après

elle garde sa valeur sans la recalculer.
Est-ce qu'un costaud (ou une d'ailleurs...) pourrait me dire où ça
pêche.


Merci d'avance.


Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché > > > > Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub
Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier
base.xls"



Windows("personnel fichier base.xls").Activate
Range("B45").Select
On Error Resume Next
Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell,


_
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé = Empty Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next
















Avatar
Paul V.
Bonjour,

Selon moi, il n'y pas de problème ;-)
Sauf que tu ouvres à chaque boucle le fichier ce qui doit provoquer une
erreur.
J'en déduis donc que tu as une gestion d'erreur qui n'est pas reproduite
dans ton extrait et que c'est cette gestion d'erreur qui provoque ce que tu
décris.

Vérifie s'il y a une gestion d'erreur en amont et tiens moi au courant.

--
HTH

Paul V.

Zanello wrote:
Aie
J'ai maintenant une erreur 424 : objet requis
quand il arrive sur

If Chan_trouvé Is Empty Or Err.Number <> 0 Then



' Sélection du chantier cherché
Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché > Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub

' Copie des noms pour le chantier sélectionné
Worksheets("pers_chan").Select
i = 1
lignes_chan = Null
nombre_lignes > Worksheets("pers_chan").Range("A1").End(xlDown).Row While i <
nombre_lignes + 1 If Cells(i, 4) = Chan_cherché Then
lignes_chan = lignes_chan & i & ","
End If
i = i + 1
Wend
lignes_chan = Left(lignes_chan, Len(lignes_chan) - 1)
first_cell = "A" & Left(lignes_chan, InStr(lignes_chan, ",") - 1)
last_cell = "C" & Right(lignes_chan, InStr(lignes_chan, ",") - 1)
Range(first_cell, last_cell).Copy

' Recherche du chantier dans personnel fichier base.xls
Dim Chan_trouvé As Range
Windows("personnel fichier base.xls").Activate
Range("B45").Select
Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé Is Empty Or Err.Number <> 0 Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next



"John Fuss" a écrit dans le message de news:
c91mnp$2mq$
Tu utilises on error resume next, ça vient peut-être de là, utilise
if Err.number <> 0 then 'si une erreur s'est produite


sinon ton test :
If Chan_trouvé = Empty Then
if Chan_trouvé is Empty then


If Chan_trouvé is empty or err.number = 0 then....

John

"Zanello" a écrit dans le message de
news:
C'est vrai.
J'avais enlevé le set pour voir le résultat produit et j'ai oublié
de le coller ici.
D'ailleurs s'il n'y est pas, le résultat est encore pire.
L'erreur que j'ai décrite plus bas arrive avec

Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)



"John Fuss" a écrit dans le message de news:
c91kn7$1d3$
Essai :
SET Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _ LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address)

car Chan_trouvé est un objet Range et on doit utiliser SET nomobj
= obj.

John


"Zanello" a écrit dans le message de
news:
Bonjour.

J'ai un problème de variable.
Dans la boucle For... Next, la variable Chan_trouvé ne change pas.
Au premier passage elle prend bien la bonne valeur mais à la
boucle d'après elle garde sa valeur sans la recalculer.
Est-ce qu'un costaud (ou une d'ailleurs...) pourrait me dire où
ça pêche. Merci d'avance.


Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché >>>>> Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub
Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier
base.xls" Windows("personnel fichier base.xls").Activate
Range("B45").Select
On Error Resume Next
Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _ LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address) If Chan_trouvé = Empty Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next










Avatar
Zanello
Je change de fenêtre avec windows(toto.xls).activate mais les fichiers sont
déjà ouverts.
L'ouverture des fichiers se fait avant la boucle et il n'y a pas de gestion
d'erreur si ce n'est la ligne de john.
If Chan_trouvé Is Empty Or Err.Number <> 0 Then
J'ai essayé
If Chan_trouvé = "" Or Err.Number <> 0 Then

Je sais pas si c'est correct mais j'ai plus l'erreur
Par contre j'ai toujours mon problème du début (variable qui ne varie pas.)
Ca ne marche qu'au premier tour de la boucle.

Merci à tous les deux pour votre contribution.


"Paul V." a écrit dans le message de news:

Bonjour,

Selon moi, il n'y pas de problème ;-)
Sauf que tu ouvres à chaque boucle le fichier ce qui doit provoquer une
erreur.
J'en déduis donc que tu as une gestion d'erreur qui n'est pas reproduite
dans ton extrait et que c'est cette gestion d'erreur qui provoque ce que
tu

décris.

Vérifie s'il y a une gestion d'erreur en amont et tiens moi au courant.

--
HTH

Paul V.

Zanello wrote:
Aie
J'ai maintenant une erreur 424 : objet requis
quand il arrive sur

If Chan_trouvé Is Empty Or Err.Number <> 0 Then



' Sélection du chantier cherché
Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché > > Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub

' Copie des noms pour le chantier sélectionné
Worksheets("pers_chan").Select
i = 1
lignes_chan = Null
nombre_lignes > > Worksheets("pers_chan").Range("A1").End(xlDown).Row While i <
nombre_lignes + 1 If Cells(i, 4) = Chan_cherché Then
lignes_chan = lignes_chan & i & ","
End If
i = i + 1
Wend
lignes_chan = Left(lignes_chan, Len(lignes_chan) - 1)
first_cell = "A" & Left(lignes_chan, InStr(lignes_chan, ",") - 1)
last_cell = "C" & Right(lignes_chan, InStr(lignes_chan, ",") - 1)
Range(first_cell, last_cell).Copy

' Recherche du chantier dans personnel fichier base.xls
Dim Chan_trouvé As Range
Windows("personnel fichier base.xls").Activate
Range("B45").Select
Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé Is Empty Or Err.Number <> 0 Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next



"John Fuss" a écrit dans le message de news:
c91mnp$2mq$
Tu utilises on error resume next, ça vient peut-être de là, utilise
if Err.number <> 0 then 'si une erreur s'est produite


sinon ton test :
If Chan_trouvé = Empty Then
if Chan_trouvé is Empty then


If Chan_trouvé is empty or err.number = 0 then....

John

"Zanello" a écrit dans le message de
news:
C'est vrai.
J'avais enlevé le set pour voir le résultat produit et j'ai oublié
de le coller ici.
D'ailleurs s'il n'y est pas, le résultat est encore pire.
L'erreur que j'ai décrite plus bas arrive avec

Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)



"John Fuss" a écrit dans le message de news:
c91kn7$1d3$
Essai :
SET Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _ LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address)

car Chan_trouvé est un objet Range et on doit utiliser SET nomobj
= obj.

John


"Zanello" a écrit dans le message de
news:
Bonjour.

J'ai un problème de variable.
Dans la boucle For... Next, la variable Chan_trouvé ne change pas.
Au premier passage elle prend bien la bonne valeur mais à la
boucle d'après elle garde sa valeur sans la recalculer.
Est-ce qu'un costaud (ou une d'ailleurs...) pourrait me dire où
ça pêche. Merci d'avance.


Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché > >>>>> Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub
Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier
base.xls" Windows("personnel fichier base.xls").Activate
Range("B45").Select
On Error Resume Next
Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _ LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address) If Chan_trouvé = Empty Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next














Avatar
Paul V.
Je n'ai fait que lire ton morceau de code mais il me semble que tu as très
clairement une boucle for .. next à l'intérieur de laquelle tu fait une
ouverture répétée du même fichier.
En résumé:

For ligne_Chan_cherché Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
..................
Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier base.xls"
.....................
next

Le reste de ton code à l'air parfait.

Si tu fais un pas à pas, tu détecteras ou se passe l'erreur sans difficulté.

Si tu n'y arrives pas, mets le code complet sur le forum.


--
HTH

Paul V.

Zanello wrote:
Je change de fenêtre avec windows(toto.xls).activate mais les
fichiers sont déjà ouverts.
L'ouverture des fichiers se fait avant la boucle et il n'y a pas de
gestion d'erreur si ce n'est la ligne de john.
If Chan_trouvé Is Empty Or Err.Number <> 0 Then
J'ai essayé
If Chan_trouvé = "" Or Err.Number <> 0 Then

Je sais pas si c'est correct mais j'ai plus l'erreur
Par contre j'ai toujours mon problème du début (variable qui ne varie
pas.) Ca ne marche qu'au premier tour de la boucle.

Merci à tous les deux pour votre contribution.


"Paul V." a écrit dans le message de news:

Bonjour,

Selon moi, il n'y pas de problème ;-)
Sauf que tu ouvres à chaque boucle le fichier ce qui doit provoquer
une erreur.
J'en déduis donc que tu as une gestion d'erreur qui n'est pas
reproduite dans ton extrait et que c'est cette gestion d'erreur qui
provoque ce que tu décris.

Vérifie s'il y a une gestion d'erreur en amont et tiens moi au
courant.

--
HTH

Paul V.

Zanello wrote:
Aie
J'ai maintenant une erreur 424 : objet requis
quand il arrive sur

If Chan_trouvé Is Empty Or Err.Number <> 0 Then



' Sélection du chantier cherché
Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché >>> Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub

' Copie des noms pour le chantier sélectionné
Worksheets("pers_chan").Select
i = 1
lignes_chan = Null
nombre_lignes >>> Worksheets("pers_chan").Range("A1").End(xlDown).Row While i <
nombre_lignes + 1 If Cells(i, 4) = Chan_cherché Then
lignes_chan = lignes_chan & i & ","
End If
i = i + 1
Wend
lignes_chan = Left(lignes_chan, Len(lignes_chan) - 1)
first_cell = "A" & Left(lignes_chan, InStr(lignes_chan, ",") -
1) last_cell = "C" & Right(lignes_chan, InStr(lignes_chan, ",")
- 1) Range(first_cell, last_cell).Copy

' Recherche du chantier dans personnel fichier base.xls
Dim Chan_trouvé As Range
Windows("personnel fichier base.xls").Activate
Range("B45").Select
Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé Is Empty Or Err.Number <> 0 Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next



"John Fuss" a écrit dans le message de news:
c91mnp$2mq$
Tu utilises on error resume next, ça vient peut-être de là, utilise
if Err.number <> 0 then 'si une erreur s'est produite


sinon ton test :
If Chan_trouvé = Empty Then
if Chan_trouvé is Empty then


If Chan_trouvé is empty or err.number = 0 then....

John

"Zanello" a écrit dans le message de
news:
C'est vrai.
J'avais enlevé le set pour voir le résultat produit et j'ai oublié
de le coller ici.
D'ailleurs s'il n'y est pas, le résultat est encore pire.
L'erreur que j'ai décrite plus bas arrive avec

Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)



"John Fuss" a écrit dans le message de news:
c91kn7$1d3$
Essai :
SET Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _ LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address)

car Chan_trouvé est un objet Range et on doit utiliser SET nomobj
= obj.

John


"Zanello" a écrit dans le message de
news:
Bonjour.

J'ai un problème de variable.
Dans la boucle For... Next, la variable Chan_trouvé ne change
pas. Au premier passage elle prend bien la bonne valeur mais à
la boucle d'après elle garde sa valeur sans la recalculer.
Est-ce qu'un costaud (ou une d'ailleurs...) pourrait me dire où
ça pêche. Merci d'avance.


Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché >>>>>>> Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step
-1 Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub
Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier
base.xls" Windows("personnel fichier base.xls").Activate
Range("B45").Select
On Error Resume Next
Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _ LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address) If Chan_trouvé = Empty Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next














Avatar
Zanello
Non non.
Regarde bien, il n'y a pas de Workbooks.Open dans la boucle
J'ai mis tout le code et tu peux voir que l'ouverture se fait avant

Le pas à pas s'arrête sur
Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)

Ca ne marche qu'au premier passage.
Après : erreur 91 variable objet ou variable de bloc with non definie



Sub Prépa_list_chan()
Application.ScreenUpdating = False
Application.DisplayAlerts = False

' Ouverture du fichier pers_chan.xls

ChDir "C:WINNTProfilesFranckBureaucompta"
Workbooks.OpenText FileName:= _
"C:WINNTProfilesFranckBureaucomptapers_chan.xls",
Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:=True, Semicolon:úlse, Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 1), Array(2, 1),
_
Array(3, 1), Array(4, 1), Array(5, 1))

' Transformation agence=0 en agence=ZA

Cells.Replace What:="0", Replacement:="ZA", LookAt:=xlPart, SearchOrder
_
:=xlByRows, MatchCase:úlse

' Création d'un nouveau classeur calculs.xls et renommages feuilles

Workbooks.Add
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs FileName:= _
"C:WINNTProfilesFranckBureaucomptacalculs.xls",
FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:úlse, _
CreateBackup:úlse
Sheets("Feuil2").Select
Sheets("Feuil2").Name = "list_chan_v"
Sheets("Feuil1").Select
Sheets("Feuil1").Name = "pers_chan"
Windows("pers_chan.xls").Activate
Cells.Select
Selection.Copy
Windows("calculs.xls").Activate
Cells.Select
ActiveSheet.Paste
Range("A1").Select
Windows("pers_chan.xls").Activate
ActiveWorkbook.Close

' Copie des chantiers de pers_chan vers list_chan et suppression des
doublons

Cells.Select
Selection.Sort Key1:=Range("D1"), Order1:=xlAscending, Key2:=Range("C1")
_
, Order2:=xlDescending, Key3:=Range("A1"), Order1:=xlAscending, Header _
:=xlNo, OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
Columns("D:D").Select
Selection.Copy
Sheets("list_chan_v").Select
Columns("A:A").Select
ActiveSheet.Paste
Set MaCell = Worksheets("list_chan_v").Range("A1")
Do While Not IsEmpty(MaCell)
Set MaCellSuite = MaCell.Offset(1, 0)
If MaCellSuite.Value = MaCell.Value Then
MaCell.EntireRow.Delete
End If
Set MaCell = MaCellSuite
Loop

' Mise en forme du tableau pers_chan

Sheets("pers_chan").Select
Columns("C:C").Select
Application.CutCopyMode = False
Selection.Replace What:="ZA", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:úlse
Columns("A:C").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Cells.Select
With Selection.Font
.Name = "Arial"
.Size = 9
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With

' Ouverture de personnel fichier base.xls

Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier base.xls"

' Sélection du chantier cherché

Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub

' Copie des noms pour le chantier sélectionné

Worksheets("pers_chan").Select
i = 1
lignes_chan = Null
nombre_lignes = Worksheets("pers_chan").Range("A1").End(xlDown).Row
While i < nombre_lignes + 1
If Cells(i, 4) = Chan_cherché Then
lignes_chan = lignes_chan & i & ","
End If
i = i + 1
Wend
lignes_chan = Left(lignes_chan, Len(lignes_chan) - 1)
first_cell = "A" & Left(lignes_chan, InStr(lignes_chan, ",") - 1)
last_cell = "C" & Right(lignes_chan, InStr(lignes_chan, ",") - 1)
Range(first_cell, last_cell).Copy

' Recherche du chantier dans personnel fichier base.xls

Dim Chan_trouvé As Range
Windows("personnel fichier base.xls").Activate
Range("B45").Select
Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé = "" Or Err.Number <> 0 Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next

Application.ScreenUpdating = True
End Sub



"Paul V." a écrit dans le message de news:

Je n'ai fait que lire ton morceau de code mais il me semble que tu as très
clairement une boucle for .. next à l'intérieur de laquelle tu fait une
ouverture répétée du même fichier.
En résumé:

For ligne_Chan_cherché > Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
..................
Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier base.xls"
.....................
next

Le reste de ton code à l'air parfait.

Si tu fais un pas à pas, tu détecteras ou se passe l'erreur sans
difficulté.


Si tu n'y arrives pas, mets le code complet sur le forum.


--
HTH

Paul V.

Zanello wrote:
Je change de fenêtre avec windows(toto.xls).activate mais les
fichiers sont déjà ouverts.
L'ouverture des fichiers se fait avant la boucle et il n'y a pas de
gestion d'erreur si ce n'est la ligne de john.
If Chan_trouvé Is Empty Or Err.Number <> 0 Then
J'ai essayé
If Chan_trouvé = "" Or Err.Number <> 0 Then

Je sais pas si c'est correct mais j'ai plus l'erreur
Par contre j'ai toujours mon problème du début (variable qui ne varie
pas.) Ca ne marche qu'au premier tour de la boucle.

Merci à tous les deux pour votre contribution.


"Paul V." a écrit dans le message de news:

Bonjour,

Selon moi, il n'y pas de problème ;-)
Sauf que tu ouvres à chaque boucle le fichier ce qui doit provoquer
une erreur.
J'en déduis donc que tu as une gestion d'erreur qui n'est pas
reproduite dans ton extrait et que c'est cette gestion d'erreur qui
provoque ce que tu décris.

Vérifie s'il y a une gestion d'erreur en amont et tiens moi au
courant.

--
HTH

Paul V.

Zanello wrote:
Aie
J'ai maintenant une erreur 424 : objet requis
quand il arrive sur

If Chan_trouvé Is Empty Or Err.Number <> 0 Then



' Sélection du chantier cherché
Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché > >>> Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub

' Copie des noms pour le chantier sélectionné
Worksheets("pers_chan").Select
i = 1
lignes_chan = Null
nombre_lignes > >>> Worksheets("pers_chan").Range("A1").End(xlDown).Row While i <
nombre_lignes + 1 If Cells(i, 4) = Chan_cherché Then
lignes_chan = lignes_chan & i & ","
End If
i = i + 1
Wend
lignes_chan = Left(lignes_chan, Len(lignes_chan) - 1)
first_cell = "A" & Left(lignes_chan, InStr(lignes_chan, ",") -
1) last_cell = "C" & Right(lignes_chan, InStr(lignes_chan, ",")
- 1) Range(first_cell, last_cell).Copy

' Recherche du chantier dans personnel fichier base.xls
Dim Chan_trouvé As Range
Windows("personnel fichier base.xls").Activate
Range("B45").Select
Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé Is Empty Or Err.Number <> 0 Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next



"John Fuss" a écrit dans le message de news:
c91mnp$2mq$
Tu utilises on error resume next, ça vient peut-être de là, utilise
if Err.number <> 0 then 'si une erreur s'est produite


sinon ton test :
If Chan_trouvé = Empty Then
if Chan_trouvé is Empty then


If Chan_trouvé is empty or err.number = 0 then....

John

"Zanello" a écrit dans le message de
news:
C'est vrai.
J'avais enlevé le set pour voir le résultat produit et j'ai oublié
de le coller ici.
D'ailleurs s'il n'y est pas, le résultat est encore pire.
L'erreur que j'ai décrite plus bas arrive avec

Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)



"John Fuss" a écrit dans le message de news:
c91kn7$1d3$
Essai :
SET Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _ LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address)

car Chan_trouvé est un objet Range et on doit utiliser SET nomobj
= obj.

John


"Zanello" a écrit dans le message de
news:
Bonjour.

J'ai un problème de variable.
Dans la boucle For... Next, la variable Chan_trouvé ne change
pas. Au premier passage elle prend bien la bonne valeur mais à
la boucle d'après elle garde sa valeur sans la recalculer.
Est-ce qu'un costaud (ou une d'ailleurs...) pourrait me dire où
ça pêche. Merci d'avance.


Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché > >>>>>>> Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step
-1 Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub
Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier
base.xls" Windows("personnel fichier base.xls").Activate
Range("B45").Select
On Error Resume Next
Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _ LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address) If Chan_trouvé = Empty Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next


















Avatar
Paul V.
Sans vouloir être désagréable, pourrais tu m'expliquer pourquoi tu copie un
code différent dans ta question.
C'est pas drôle.

--
HTH

Paul V.

Zanello wrote:
Non non.
Regarde bien, il n'y a pas de Workbooks.Open dans la boucle
J'ai mis tout le code et tu peux voir que l'ouverture se fait avant

Le pas à pas s'arrête sur
Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)

Ca ne marche qu'au premier passage.
Après : erreur 91 variable objet ou variable de bloc with non definie



Sub Prépa_list_chan()
Application.ScreenUpdating = False
Application.DisplayAlerts = False

' Ouverture du fichier pers_chan.xls

ChDir "C:WINNTProfilesFranckBureaucompta"
Workbooks.OpenText FileName:= _
"C:WINNTProfilesFranckBureaucomptapers_chan.xls",
Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote,
_ ConsecutiveDelimiter:úlse, Tab:=True, Semicolon:úlse,
Comma:úlse _ , Space:úlse, Other:úlse,
FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1))

' Transformation agence=0 en agence=ZA

Cells.Replace What:="0", Replacement:="ZA", LookAt:=xlPart,
SearchOrder _
:=xlByRows, MatchCase:úlse

' Création d'un nouveau classeur calculs.xls et renommages feuilles

Workbooks.Add
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs FileName:= _
"C:WINNTProfilesFranckBureaucomptacalculs.xls",
FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:úlse, _
CreateBackup:úlse
Sheets("Feuil2").Select
Sheets("Feuil2").Name = "list_chan_v"
Sheets("Feuil1").Select
Sheets("Feuil1").Name = "pers_chan"
Windows("pers_chan.xls").Activate
Cells.Select
Selection.Copy
Windows("calculs.xls").Activate
Cells.Select
ActiveSheet.Paste
Range("A1").Select
Windows("pers_chan.xls").Activate
ActiveWorkbook.Close

' Copie des chantiers de pers_chan vers list_chan et suppression des
doublons

Cells.Select
Selection.Sort Key1:=Range("D1"), Order1:=xlAscending,
Key2:=Range("C1") _
, Order2:=xlDescending, Key3:=Range("A1"), Order1:=xlAscending,
Header _ :=xlNo, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom Columns("D:D").Select
Selection.Copy
Sheets("list_chan_v").Select
Columns("A:A").Select
ActiveSheet.Paste
Set MaCell = Worksheets("list_chan_v").Range("A1")
Do While Not IsEmpty(MaCell)
Set MaCellSuite = MaCell.Offset(1, 0)
If MaCellSuite.Value = MaCell.Value Then
MaCell.EntireRow.Delete
End If
Set MaCell = MaCellSuite
Loop

' Mise en forme du tableau pers_chan

Sheets("pers_chan").Select
Columns("C:C").Select
Application.CutCopyMode = False
Selection.Replace What:="ZA", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:úlse
Columns("A:C").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Cells.Select
With Selection.Font
.Name = "Arial"
.Size = 9
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With

' Ouverture de personnel fichier base.xls

Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier
base.xls"

' Sélection du chantier cherché

Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché > Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub

' Copie des noms pour le chantier sélectionné

Worksheets("pers_chan").Select
i = 1
lignes_chan = Null
nombre_lignes > Worksheets("pers_chan").Range("A1").End(xlDown).Row While i <
nombre_lignes + 1 If Cells(i, 4) = Chan_cherché Then
lignes_chan = lignes_chan & i & ","
End If
i = i + 1
Wend
lignes_chan = Left(lignes_chan, Len(lignes_chan) - 1)
first_cell = "A" & Left(lignes_chan, InStr(lignes_chan, ",") - 1)
last_cell = "C" & Right(lignes_chan, InStr(lignes_chan, ",") - 1)
Range(first_cell, last_cell).Copy

' Recherche du chantier dans personnel fichier base.xls

Dim Chan_trouvé As Range
Windows("personnel fichier base.xls").Activate
Range("B45").Select
Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé = "" Or Err.Number <> 0 Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next

Application.ScreenUpdating = True
End Sub



"Paul V." a écrit dans le message de news:

Je n'ai fait que lire ton morceau de code mais il me semble que tu
as très clairement une boucle for .. next à l'intérieur de laquelle
tu fait une ouverture répétée du même fichier.
En résumé:

For ligne_Chan_cherché >> Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
..................
Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier
base.xls" .....................
next

Le reste de ton code à l'air parfait.

Si tu fais un pas à pas, tu détecteras ou se passe l'erreur sans
difficulté.

Si tu n'y arrives pas, mets le code complet sur le forum.


--
HTH

Paul V.

Zanello wrote:
Je change de fenêtre avec windows(toto.xls).activate mais les
fichiers sont déjà ouverts.
L'ouverture des fichiers se fait avant la boucle et il n'y a pas de
gestion d'erreur si ce n'est la ligne de john.
If Chan_trouvé Is Empty Or Err.Number <> 0 Then
J'ai essayé
If Chan_trouvé = "" Or Err.Number <> 0 Then

Je sais pas si c'est correct mais j'ai plus l'erreur
Par contre j'ai toujours mon problème du début (variable qui ne
varie pas.) Ca ne marche qu'au premier tour de la boucle.

Merci à tous les deux pour votre contribution.


"Paul V." a écrit dans le message de news:

Bonjour,

Selon moi, il n'y pas de problème ;-)
Sauf que tu ouvres à chaque boucle le fichier ce qui doit provoquer
une erreur.
J'en déduis donc que tu as une gestion d'erreur qui n'est pas
reproduite dans ton extrait et que c'est cette gestion d'erreur qui
provoque ce que tu décris.

Vérifie s'il y a une gestion d'erreur en amont et tiens moi au
courant.

--
HTH

Paul V.

Zanello wrote:
Aie
J'ai maintenant une erreur 424 : objet requis
quand il arrive sur

If Chan_trouvé Is Empty Or Err.Number <> 0 Then



' Sélection du chantier cherché
Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché >>>>> Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub

' Copie des noms pour le chantier sélectionné
Worksheets("pers_chan").Select
i = 1
lignes_chan = Null
nombre_lignes >>>>> Worksheets("pers_chan").Range("A1").End(xlDown).Row While i <
nombre_lignes + 1 If Cells(i, 4) = Chan_cherché Then
lignes_chan = lignes_chan & i & ","
End If
i = i + 1
Wend
lignes_chan = Left(lignes_chan, Len(lignes_chan) - 1)
first_cell = "A" & Left(lignes_chan, InStr(lignes_chan, ",") -
1) last_cell = "C" & Right(lignes_chan, InStr(lignes_chan,
",") - 1) Range(first_cell, last_cell).Copy

' Recherche du chantier dans personnel fichier base.xls
Dim Chan_trouvé As Range
Windows("personnel fichier base.xls").Activate
Range("B45").Select
Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé Is Empty Or Err.Number <> 0 Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next



"John Fuss" a écrit dans le message de news:
c91mnp$2mq$
Tu utilises on error resume next, ça vient peut-être de là,
utilise if Err.number <> 0 then 'si une erreur s'est produite


sinon ton test :
If Chan_trouvé = Empty Then
if Chan_trouvé is Empty then


If Chan_trouvé is empty or err.number = 0 then....

John

"Zanello" a écrit dans le message de
news:
C'est vrai.
J'avais enlevé le set pour voir le résultat produit et j'ai
oublié de le coller ici.
D'ailleurs s'il n'y est pas, le résultat est encore pire.
L'erreur que j'ai décrite plus bas arrive avec

Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address)



"John Fuss" a écrit dans le message de
news: c91kn7$1d3$
Essai :
SET Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _ LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address)

car Chan_trouvé est un objet Range et on doit utiliser SET
nomobj = obj.

John


"Zanello" a écrit dans le message de
news:
Bonjour.

J'ai un problème de variable.
Dans la boucle For... Next, la variable Chan_trouvé ne change
pas. Au premier passage elle prend bien la bonne valeur mais à
la boucle d'après elle garde sa valeur sans la recalculer.
Est-ce qu'un costaud (ou une d'ailleurs...) pourrait me dire
où ça pêche. Merci d'avance.


Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché >>>>>>>>> Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1
Step -1 Chan_cherché >>>>>>>>> Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value If Chan_cherché = "" Then Exit
Sub Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier
base.xls" Windows("personnel fichier base.xls").Activate
Range("B45").Select
On Error Resume Next
Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _ LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address) If Chan_trouvé = Empty Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next


















Avatar
Zanello
Ah oui désolé.
Le code a changé depuis ce matin.
Mea Culpa


"Paul V." a écrit dans le message de news:

Sans vouloir être désagréable, pourrais tu m'expliquer pourquoi tu copie
un

code différent dans ta question.
C'est pas drôle.

--
HTH

Paul V.

Zanello wrote:
Non non.
Regarde bien, il n'y a pas de Workbooks.Open dans la boucle
J'ai mis tout le code et tu peux voir que l'ouverture se fait avant

Le pas à pas s'arrête sur
Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)

Ca ne marche qu'au premier passage.
Après : erreur 91 variable objet ou variable de bloc with non definie



Sub Prépa_list_chan()
Application.ScreenUpdating = False
Application.DisplayAlerts = False

' Ouverture du fichier pers_chan.xls

ChDir "C:WINNTProfilesFranckBureaucompta"
Workbooks.OpenText FileName:= _
"C:WINNTProfilesFranckBureaucomptapers_chan.xls",
Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote,
_ ConsecutiveDelimiter:úlse, Tab:=True, Semicolon:úlse,
Comma:úlse _ , Space:úlse, Other:úlse,
FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1))

' Transformation agence=0 en agence=ZA

Cells.Replace What:="0", Replacement:="ZA", LookAt:=xlPart,
SearchOrder _
:=xlByRows, MatchCase:úlse

' Création d'un nouveau classeur calculs.xls et renommages feuilles

Workbooks.Add
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs FileName:= _
"C:WINNTProfilesFranckBureaucomptacalculs.xls",
FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:úlse, _
CreateBackup:úlse
Sheets("Feuil2").Select
Sheets("Feuil2").Name = "list_chan_v"
Sheets("Feuil1").Select
Sheets("Feuil1").Name = "pers_chan"
Windows("pers_chan.xls").Activate
Cells.Select
Selection.Copy
Windows("calculs.xls").Activate
Cells.Select
ActiveSheet.Paste
Range("A1").Select
Windows("pers_chan.xls").Activate
ActiveWorkbook.Close

' Copie des chantiers de pers_chan vers list_chan et suppression des
doublons

Cells.Select
Selection.Sort Key1:=Range("D1"), Order1:=xlAscending,
Key2:=Range("C1") _
, Order2:=xlDescending, Key3:=Range("A1"), Order1:=xlAscending,
Header _ :=xlNo, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom Columns("D:D").Select
Selection.Copy
Sheets("list_chan_v").Select
Columns("A:A").Select
ActiveSheet.Paste
Set MaCell = Worksheets("list_chan_v").Range("A1")
Do While Not IsEmpty(MaCell)
Set MaCellSuite = MaCell.Offset(1, 0)
If MaCellSuite.Value = MaCell.Value Then
MaCell.EntireRow.Delete
End If
Set MaCell = MaCellSuite
Loop

' Mise en forme du tableau pers_chan

Sheets("pers_chan").Select
Columns("C:C").Select
Application.CutCopyMode = False
Selection.Replace What:="ZA", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:úlse
Columns("A:C").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Cells.Select
With Selection.Font
.Name = "Arial"
.Size = 9
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With

' Ouverture de personnel fichier base.xls

Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier
base.xls"

' Sélection du chantier cherché

Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché > > Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub

' Copie des noms pour le chantier sélectionné

Worksheets("pers_chan").Select
i = 1
lignes_chan = Null
nombre_lignes > > Worksheets("pers_chan").Range("A1").End(xlDown).Row While i <
nombre_lignes + 1 If Cells(i, 4) = Chan_cherché Then
lignes_chan = lignes_chan & i & ","
End If
i = i + 1
Wend
lignes_chan = Left(lignes_chan, Len(lignes_chan) - 1)
first_cell = "A" & Left(lignes_chan, InStr(lignes_chan, ",") - 1)
last_cell = "C" & Right(lignes_chan, InStr(lignes_chan, ",") - 1)
Range(first_cell, last_cell).Copy

' Recherche du chantier dans personnel fichier base.xls

Dim Chan_trouvé As Range
Windows("personnel fichier base.xls").Activate
Range("B45").Select
Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé = "" Or Err.Number <> 0 Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next

Application.ScreenUpdating = True
End Sub



"Paul V." a écrit dans le message de news:

Je n'ai fait que lire ton morceau de code mais il me semble que tu
as très clairement une boucle for .. next à l'intérieur de laquelle
tu fait une ouverture répétée du même fichier.
En résumé:

For ligne_Chan_cherché > >> Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
..................
Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier
base.xls" .....................
next

Le reste de ton code à l'air parfait.

Si tu fais un pas à pas, tu détecteras ou se passe l'erreur sans
difficulté.

Si tu n'y arrives pas, mets le code complet sur le forum.


--
HTH

Paul V.

Zanello wrote:
Je change de fenêtre avec windows(toto.xls).activate mais les
fichiers sont déjà ouverts.
L'ouverture des fichiers se fait avant la boucle et il n'y a pas de
gestion d'erreur si ce n'est la ligne de john.
If Chan_trouvé Is Empty Or Err.Number <> 0 Then
J'ai essayé
If Chan_trouvé = "" Or Err.Number <> 0 Then

Je sais pas si c'est correct mais j'ai plus l'erreur
Par contre j'ai toujours mon problème du début (variable qui ne
varie pas.) Ca ne marche qu'au premier tour de la boucle.

Merci à tous les deux pour votre contribution.


"Paul V." a écrit dans le message de news:

Bonjour,

Selon moi, il n'y pas de problème ;-)
Sauf que tu ouvres à chaque boucle le fichier ce qui doit provoquer
une erreur.
J'en déduis donc que tu as une gestion d'erreur qui n'est pas
reproduite dans ton extrait et que c'est cette gestion d'erreur qui
provoque ce que tu décris.

Vérifie s'il y a une gestion d'erreur en amont et tiens moi au
courant.

--
HTH

Paul V.

Zanello wrote:
Aie
J'ai maintenant une erreur 424 : objet requis
quand il arrive sur

If Chan_trouvé Is Empty Or Err.Number <> 0 Then



' Sélection du chantier cherché
Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché > >>>>> Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1 Step -1
Chan_cherché = Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value
If Chan_cherché = "" Then Exit Sub

' Copie des noms pour le chantier sélectionné
Worksheets("pers_chan").Select
i = 1
lignes_chan = Null
nombre_lignes > >>>>> Worksheets("pers_chan").Range("A1").End(xlDown).Row While i <
nombre_lignes + 1 If Cells(i, 4) = Chan_cherché Then
lignes_chan = lignes_chan & i & ","
End If
i = i + 1
Wend
lignes_chan = Left(lignes_chan, Len(lignes_chan) - 1)
first_cell = "A" & Left(lignes_chan, InStr(lignes_chan, ",") -
1) last_cell = "C" & Right(lignes_chan, InStr(lignes_chan,
",") - 1) Range(first_cell, last_cell).Copy

' Recherche du chantier dans personnel fichier base.xls
Dim Chan_trouvé As Range
Windows("personnel fichier base.xls").Activate
Range("B45").Select
Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:úlse).Address)
If Chan_trouvé Is Empty Or Err.Number <> 0 Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next



"John Fuss" a écrit dans le message de news:
c91mnp$2mq$
Tu utilises on error resume next, ça vient peut-être de là,
utilise if Err.number <> 0 then 'si une erreur s'est produite


sinon ton test :
If Chan_trouvé = Empty Then
if Chan_trouvé is Empty then


If Chan_trouvé is empty or err.number = 0 then....

John

"Zanello" a écrit dans le message de
news:
C'est vrai.
J'avais enlevé le set pour voir le résultat produit et j'ai
oublié de le coller ici.
D'ailleurs s'il n'y est pas, le résultat est encore pire.
L'erreur que j'ai décrite plus bas arrive avec

Set Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address)



"John Fuss" a écrit dans le message de
news: c91kn7$1d3$
Essai :
SET Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _ LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address)

car Chan_trouvé est un objet Range et on doit utiliser SET
nomobj = obj.

John


"Zanello" a écrit dans le message de
news:
Bonjour.

J'ai un problème de variable.
Dans la boucle For... Next, la variable Chan_trouvé ne change
pas. Au premier passage elle prend bien la bonne valeur mais à
la boucle d'après elle garde sa valeur sans la recalculer.
Est-ce qu'un costaud (ou une d'ailleurs...) pourrait me dire
où ça pêche. Merci d'avance.


Dim Chan_cherché As String
Windows("calculs.xls").Activate
For ligne_Chan_cherché > >>>>>>>>> Worksheets("list_chan_v").Range("A1").End(xlDown).Row To 1
Step -1 Chan_cherché > >>>>>>>>> Worksheets("list_chan_v").Range("A" &
ligne_Chan_cherché).Value If Chan_cherché = "" Then Exit
Sub Workbooks.Open FileName:= _
"C:WINNTProfilesFranckBureaucomptapersonnel fichier
base.xls" Windows("personnel fichier base.xls").Activate
Range("B45").Select
On Error Resume Next
Chan_trouvé = Range(Cells.Find(What:=Chan_cherché,
After:¬tiveCell, _ LookIn:=xlValues, LookAt:=xlPart,
SearchOrder:=xlByRows, _ SearchDirection:=xlNext,
MatchCase:úlse).Address) If Chan_trouvé = Empty Then
MsgBox "pas trouvé le chantier"
Else: Chan_trouvé.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End If
Windows("calculs.xls").Activate
Next






















1 2