Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Erreur 1004 dans une boucle FOR

  • Initiateur de la discussion Initiateur de la discussion Manu57
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

Manu57

Guest
Bonjour le forum,

J'ai un petit soucis depuis quelques jours et je n'arrive pas à trouver la réponse. Je suis débutant donc je ne vois peut etre pas tout de suite la faute. Je n'arrive pas à copier des valeurs d'une feuille à une autre en vérifiant si les noms des colonnes est identiques. Je ne comprend pas pourquoi. Si quelqu'un avais une petite astuce 😕

Code:
 For k = 3 To 6
        Fin = ThisWorkbook.Sheets(k).Cells(2, Columns.Count).End(xlToLeft).Column
        Fini = ThisWorkbook.Sheets(2).Cells(2, Columns.Count).End(xlToLeft).Column
            For m = 12 To Fin
            For l = 12 To Fini
                    If WB1.Worksheets(2).Cells(2, l).Value = WB1.Worksheets(k).Cells(2, m).Value Then
                        WB1.Worksheets(2).Range(Cells(3, l), Cells(x, l)).Copy WB1.Worksheets(k).Cells(3, m)
l'erreur provient de la ligne du dessus mais pourquoi ? Mais si je change la valeur de WB1.Worksheets(2) en WB1.Worksheets(1) cela fonctionne.
                     End If
            Next
            Next
    Next

Cordialement Manu,
 
Re : Erreur 1004 dans une boucle FOR

Ah oui désolé, elle était initialisé au début de mon programme.
je vous transmet l'intégralité de mon programme et si vous avez des questions sur son fonctionnement n'hésitez pas.
Code:
Dim Fichier As String
Public WB1 As Workbook
Dim WB2 As String
Public x As Long
Dim feuilwb1 As String
Dim feuilwb2 As String
Dim FABF As String
Dim i As Long
Dim j As Long
Dim Fin As Long
Dim Fini As Integer
Dim y As Long
Dim k As Long
Dim l As Long
Dim m As Long
Option Explicit



Sub prog()
 
    Set WB1 = ThisWorkbook
    
    feuilwb1 = ActiveWorkbook.ActiveSheet.Name
    
    Fichier = Application.GetOpenFilename
    Workbooks.Open Filename:=Fichier
       
    WB2 = ActiveWorkbook.Name
    feuilwb2 = ActiveWorkbook.ActiveSheet.Name


  x = Workbooks(WB2).Worksheets(feuilwb2).Range("F" & Rows.Count).End(xlUp).Row


    Workbooks(WB2).Worksheets(feuilwb2).Range("A3:CQ" & x).Copy WB1.Worksheets(feuilwb1).Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
    
    WB1.Worksheets(1).Range("A3:K" & x).Copy WB1.Worksheets(2).Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
    
    With WB1.Worksheets(1).Range("A1:K" & x)
        For i = 3 To 6
            .Copy WB1.Worksheets(i).Range("A" & Rows.Count).End(xlUp)
        Next
    End With
    
    
    WB1.Worksheets(1).Range("CO:CJ,CD:CG,AF:AI,L:M").Delete Shift:=xlToLeft
    
    Fin = ThisWorkbook.Sheets(2).Cells(2, Columns.Count).End(xlToLeft).Column
        For i = 1 To Fin
        For j = 1 To Fin
            y = 2
                If WB1.Worksheets(1).Cells(y, i).Value = WB1.Worksheets(2).Cells(y, j).Value Then
                    WB1.Worksheets(1).Range(Cells(y + 1, i), Cells(x, i)).Copy WB1.Worksheets(2).Cells(y + 1, j)
                End If
        Next
        Next
    
   Workbooks(WB2).Close
     
    Copie
    Copie2
    
    Range("A2:CA2").AutoFilter
    
End Sub
Private Sub CommandButton1_Click()

prog

End Sub

Private Sub CommandButton2_Click()

ActiveSheet.Cells.Clear

End Sub

Private Sub CommandButton3_Click()
ActiveSheet.Cells.Clear
Feuil2.clear_OF
Feuil3.clear_CMS
Feuil4.clear_FAB
Feuil5.clear_TEST
Feuil6.clear_ST


End Sub
Sub Copie()
Dim FABF As String
Dim CMSC As Long


'
'    WB1.Worksheets(Feuil3.Name).Range("L3:P" & x) = "=IF(OF!L3="""","""",OF!L3)"
'
'    WB1.Worksheets(Feuil4.Name).Range("L3:X" & x) = "=IF(OF!Q3="""","""",OF!Q3)"
'
'    WB1.Worksheets(Feuil4.Name).Range("Y3:AE" & x) = "=IF(OF!BE3="""","""",OF!BE3)"
'
'    WB1.Worksheets(Feuil5.Name).Range("L3:BL" & x) = "=IF(OF!AH3="""","""",OF!AH3)"
'
'    WB1.Worksheets(Feuil6.Name).Range("L3:O" & x) = "=IF(OF!AC3="""","""",OF!AC3)"
  
    With WB1.Worksheets(Feuil2.Name)
        .Range("CMS").Copy WB1.Worksheets(3).Range("L1").End(xlUp)
        .Range("FAB").Copy WB1.Worksheets(4).Range("L1").End(xlUp)
        .Range("TEST").Copy WB1.Worksheets(5).Range("L1").End(xlUp)
        .Range("ST").Copy WB1.Worksheets(6).Range("L1").End(xlUp)
    End With
    
    FABF = Right(WB1.Worksheets(2).Range("FAB").Address(False, False), 3)
    CMSC = WB1.Worksheets(2).Range("CMS").Columns.Count
    WB1.Worksheets(2).Range("FABB").Copy WB1.Worksheets(4).Range(FABF).End(xlUp).Offset(0, 1 - CMSC)

End Sub
 
Re : Erreur 1004 dans une boucle FOR

Bonjour Manu, bonjour le forum,

Sans le fichier qui va avec, difficile de t'aider...
Q
ue vaut x dans WB1.Sheets(2).Range(Cells(3, l), Cells(x, l)).Copy WB1.Sheets(k).Cells(3, m) ?
Ton code avec indentation et rappel de la variable dans le Next (pour une meilleure lecture) :
Code:
Sub Macro1()
Dim fini As Integer
Dim fin As Integer

fini = Sheets(2).Cells(2, Columns.Count).End(xlToLeft).Column 'pas la peine de le mettre dans la boucle puisque fixe
For k = 3 To 6
    fin = Sheets(k).Cells(2, Columns.Count).End(xlToLeft).Column
    For m = 12 To fin
        For l = 12 To fini
            If WB1.Sheets(2).Cells(2, l).Value = WB1.Sheets(k).Cells(2, m).Value Then
                WB1.Sheets(2).Range(Cells(3, l), Cells(x, l)).Copy WB1.Sheets(k).Cells(3, m)
            End If
        Next l
    Next m
Next k
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
281
Réponses
5
Affichages
910
Réponses
8
Affichages
390
Réponses
4
Affichages
732
Réponses
8
Affichages
780
Réponses
15
Affichages
784
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…