Boucle for qui tourne au vinaigre

anthony.unac

XLDnaute Occasionnel
Bonsoir,

Mon code ne marche pas et pourtant je ne comprends pas ou est l'erreur :
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Workbooks.Open Filename:= _
        "C:\Documents and Settings\Administrateur\Bureau\test.xls"
    Windows("Copie de FICHE DE LIAISON NOUVELLE.xls").Activate
    For i = 2 To 366
    If Feuil3.Cells(i, 1) = Feuil1.Cells(2, 4) Then Feuil3.Rows(i).Select
    Next i
    Selection.Copy
    Windows("test.xls").Activate
    Rows(i).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

End Sub

Pouvez vous m'aider ?

Cordialement
Anthony:(
 

anthony.unac

XLDnaute Occasionnel
Re : Boucle for qui tourne au vinaigre

bonsoir

il semble que que tu "Select" une Feuille non active !?
Feuil3.Rows(i).Select !????

C est curieux car dans le code suivant :

Code:
Windows("Copie de FICHE DE LIAISON NOUVELLE.xls").Activate
    For i = 2 To 366
    If Feuil3.Cells(i, 1) = Feuil1.Cells(2, 4) Then Feuil3.Rows(i).Select

On remarque que 2 lignes avant le : "Feuil3.Rows(i)" il y a un : "Windows("Copie de FICHE DE LIAISON NOUVELLE.xls").Activate".
Autrement dit les 3 feuilles du fichier "Copie de FICHE DE LIAISON NOUVELLE.xls" sont actives.
D un autre coté lorsqu on enleve le "Feuil3." on obtient ceci :

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Workbooks.Open Filename:= _
        "C:\Documents and Settings\Administrateur\Bureau\test.xls"
    Windows("Copie de FICHE DE LIAISON NOUVELLE.xls").Activate
    For i = 2 To 366
    If Feuil3.Cells(i, 1) = Feuil1.Cells(2, 4) Then Rows(i).Select
    Next i
    Selection.Copy
    Windows("test.xls").Activate
    Rows(i).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

End Sub

et la c est la ligne i de feuil1 qui est copier :confused: par defaut
 

Roland_M

XLDnaute Barbatruc
Re : Boucle for qui tourne au vinaigre

re

'D'une part je comprends pas ta boucle car tu boucles pour rien jusqu'au bout !?
'Tu ne peut avoir qu'une seule ligne sélectionnée !?
'Il faudrait Exit For après Then Feuil3.Rows(i).Select: Exit For <<<<<<<<

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Workbooks.Open Filename:="C:\Documents and Settings\Administrateur\Bureau\test.xls"
Windows("Copie de FICHE DE LIAISON NOUVELLE.xls").Activate
For i = 2 To 366
 If Feuil3.Cells(i, 1) = Feuil1.Cells(2, 4) Then
    Feuil3.Rows(i).Select
    Selection.Copy: Exit For
 End If
Next i
Windows("test.xls").Activate
Rows(i).Select ' <<<<<<<<<<<<<<<<<< ici qu'elle feuille !?
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
 

kjin

XLDnaute Barbatruc
Re : Boucle for qui tourne au vinaigre

Bonsoir,
Je préfére l'utilisation des noms de feuilles
Code:
Sub Copie()
FichDep = ActiveWorkbook.Name
Workbooks.Open Filename:="C:\Documents and Settings\Administrateur\Bureau\test.xls"
FichDest = ActiveWorkbook.Name
Windows(FichDep).Activate
    With Sheets("Feuil3")
        For i = 2 To 366
            If .Cells(i, 1) = Sheets("Feuil1").Cells(2, 4) Then
            'a priori copie à la même ligne et dans la feuil1 puisque non spécifié !
                .Rows(i).Copy Workbooks(FichDest).Sheets("Feuil1").Rows(i)
            End If
        Next i
    End With
End Sub
A+
kjin
 

anthony.unac

XLDnaute Occasionnel
Re : Boucle for qui tourne au vinaigre

re

'D'une part je comprends pas ta boucle car tu boucles pour rien jusqu'au bout !?
'Tu ne peut avoir qu'une seule ligne sélectionnée !?
'Il faudrait Exit For après Then Feuil3.Rows(i).Select: Exit For <<<<<<<<

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Workbooks.Open Filename:="C:\Documents and Settings\Administrateur\Bureau\test.xls"
Windows("Copie de FICHE DE LIAISON NOUVELLE.xls").Activate
For i = 2 To 366
 If Feuil3.Cells(i, 1) = Feuil1.Cells(2, 4) Then
    Feuil3.Rows(i).Select
    Selection.Copy: Exit For
 End If
Next i
Windows("test.xls").Activate
Rows(i).Select ' <<<<<<<<<<<<<<<<<< ici qu'elle feuille !?
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub

Je vais essayer ca, quand a mes boucles je connais leurs utilités mais je les ecris probablement mal.
J ai du boulot sur les fins de boucles les End et autre Next que je ne maitrise pas vraiment et que je ne sais jamais vraiment ou placer.

Merci pour ton code et ton attention !
 

anthony.unac

XLDnaute Occasionnel
Re : Boucle for qui tourne au vinaigre

Bonsoir,
Je préfére l'utilisation des noms de feuilles
Code:
Sub Copie()
FichDep = ActiveWorkbook.Name
Workbooks.Open Filename:="C:\Documents and Settings\Administrateur\Bureau\test.xls"
FichDest = ActiveWorkbook.Name
Windows(FichDep).Activate
    With Sheets("Feuil3")
        For i = 2 To 366
            If .Cells(i, 1) = Sheets("Feuil1").Cells(2, 4) Then
            'a priori copie à la même ligne et dans la feuil1 puisque non spécifié !
                .Rows(i).Copy Workbooks(FichDest).Sheets("Feuil1").Rows(i)
            End If
        Next i
    End With
End Sub
A+
kjin

C est exactement ca, on copie a la même ligne mais sur la feuille 1 du fichier test.xls.
Merci beaucoup :)

A+
Anthony
 

anthony.unac

XLDnaute Occasionnel
Re : Boucle for qui tourne au vinaigre

re

'D'une part je comprends pas ta boucle car tu boucles pour rien jusqu'au bout !?
'Tu ne peut avoir qu'une seule ligne sélectionnée !?
'Il faudrait Exit For après Then Feuil3.Rows(i).Select: Exit For <<<<<<<<

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Workbooks.Open Filename:="C:\Documents and Settings\Administrateur\Bureau\test.xls"
Windows("Copie de FICHE DE LIAISON NOUVELLE.xls").Activate
For i = 2 To 366
 If Feuil3.Cells(i, 1) = Feuil1.Cells(2, 4) Then
    Feuil3.Rows(i).Select
    Selection.Copy: Exit For
 End If
Next i
Windows("test.xls").Activate
Rows(i).Select ' <<<<<<<<<<<<<<<<<< ici qu'elle feuille !?
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub


En compilant, il me renvoie l erreur d exécution '1004' , la méthode Select de la classe Range a échoué.
Pas cool car le code avait l air bon :(
 

anthony.unac

XLDnaute Occasionnel
Re : Boucle for qui tourne au vinaigre

Bonsoir,
Je préfére l'utilisation des noms de feuilles
Code:
Sub Copie()
FichDep = ActiveWorkbook.Name
Workbooks.Open Filename:="C:\Documents and Settings\Administrateur\Bureau\test.xls"
FichDest = ActiveWorkbook.Name
Windows(FichDep).Activate
    With Sheets("Feuil3")
        For i = 2 To 366
            If .Cells(i, 1) = Sheets("Feuil1").Cells(2, 4) Then
            'a priori copie à la même ligne et dans la feuil1 puisque non spécifié !
                .Rows(i).Copy Workbooks(FichDest).Sheets("Feuil1").Rows(i)
            End If
        Next i
    End With
End Sub
A+
kjin

Meme avec l utilisation de noms de feuille, le compilateur est mecontent :
Erreur d execution '9':
L indice n appartient pas a la selection

(fleche bloque sur la ligne de code:
With Sheets("Feuil3") )

C est chiant ces erreurs de compilation car a chaque fois on a l impression que tout est nickel :mad:
 

anthony.unac

XLDnaute Occasionnel
Re : Boucle for qui tourne au vinaigre

Bonsoir,
Comme je l'ai dit, j'utilise les noms des feuilles parce que plus simple pour s'y retrouver.
Donc si pour toi la "feuil3" n'existe pas, forcément...
A+
kjin

Autant pour moi voici ton code adapte a mes fichiers et il marche tres bien :

Code:
FichDep = ActiveWorkbook.Name
Workbooks.Open Filename:="C:\Documents and Settings\Administrateur\Bureau\test.xls"
FichDest = ActiveWorkbook.Name
Windows(FichDep).Activate
    With Sheets("Suivi Logistique")'<<<<<voila le nom de la feuil3 de depart
        For i = 2 To 366
            If .Cells(i, 1) = Sheets("Fiche de Liaison").Cells(2, 4) Then'<<<<nom de la feuil1 de depart
            'a priori copie à la même ligne et dans la feuil1 puisque non spécifié !
                .Rows(i).Copy Workbooks(FichDest).Sheets("Feuil1").Rows(i)
            End If
        Next i
    End With

Un grand merci donc ;)
 

Discussions similaires

Réponses
2
Affichages
124

Statistiques des forums

Discussions
312 322
Messages
2 087 289
Membres
103 508
dernier inscrit
max5554