Erreur 1004, erreur definie par l'application ou par l'objet

Bonjour

j'essaye à coller des colonnes dans ma feuille et ça bloque à ce niveau

Que pensez vous ?

    
    i = 0
    For Each Col In ColDest                         '---> Recopie des colonnes
        Fdép.Range(Col & 1 & ":" & Col & Fdép.Range(Col & Rows.Count).End(xlUp).Row).copy
        Range("A1").Offset(0, i).PasteSpecial xlPasteAll
        i = i + 1
    Next Col
 

Salut,

comme ça on teste de notre coté l'intégralité du code.

Bonne journée.

Bonjour,

on pourrai au moins avoir le code en entier svpp (avec un "sub" et un "end sub")

Bonjour,

Une boucle For Each... Next a pour objet de parcourir tous les objets d'une collection d'objets...

La syntaxe est du type For Each x(variable objet) In CollectiondesObjetsx...

col est donc nécessairement une variable objet, un objet Range, visant plus particulièrement à cibler une colonne.

ColDest est nécessairement une collection d'objets Range, donc vraisemblablement un objet Range lui-même.

Pour qu'il renvoie une collection de colonnes, vu la diversité des objets de type Range, il serait certainement bon de le forcer un peu à renvoyer des objets Range représentant des colonnes par : ColDest.Columns...

En écrivant à la suite Range(col & 1....), col est utilisé comme variable de type String, ce qui est naturellement incompatible avec son statut de variable objet dans la boucle...

Sous réserve d'autres erreurs, en l'absence des déclarations de variables et de leurs initialisations, on pourrait donc écrire :

    i = 0
    For Each col In ColDest.Columns                        '---> Recopie des colonnes
        col.Resize(Fdép.Cells(Rows.Count, col.Column).End(xlUp).Row).Copy
        Range("A1").Offset(0, i).PasteSpecial xlPasteAll
        i = i + 1
    Next col

Nous devons évidemment trouver en amont les déclarations : Dim col As Range, ColDest As Range [et initialisée avec une référence de plage multicolonnes], Fdép As Worksheet [et initialisée avec une référence de feuille]

Cordialement

voici la totalité de mon code tout ce que je cherche à faire c'est de copier 4 colonnes d'un autre fichier.

Option Explicit

Dim Fdép, F, NomFdest, Fdest, ColDest, Col, i, Flag, NomC, Nom

Sub Recopie()

    Set NomC = ThisWorkbook
    Set Nom = Workbooks.Open("C:\Users\accele\Desktop\GE BALOKI - Nomenclature.xls")
    Set Fdép = Nom.Worksheets("Nom BALOKI")   '---> Feuille de départ
    NomFdest = "Destination"                  '---> Nom de la feuille de destination
    ColDest = Array("A", "D", "C", "E")         '---> Colonnes à copier
    Flag = 0
    For Each F In Worksheets
        If F.Name = NomFdest Then
            Sheets(F.Name).Select
            Range("A1").CurrentRegion.ClearContents '---> initiatlisation du tableau de destination
            Flag = 1
            Exit For
            End If
    Next F
    If Flag = 0 Then
        NomC.Activate
        NomC.Sheets.Add
        ActiveSheet.Name = NomFdest             '---> Création de la feuille "Destination"
    End If

    i = 0
    For Each Col In ColDest                         '---> Recopie des colonnes
        Fdép.Range(Col & 1 & ":" & Col & Fdép.Range(Col & Rows.Count).End(xlUp).Row).copy
        Range("A1").Offset(0, i).PasteSpecial xlPasteAll
        i = i + 1
    Next Col

    Application.CutCopyMode = False
    Cells(1, 1).Select
    Nom.Close False
End Sub

On repart pour un examen !

Mais déjà, déclarer toutes ses variables au niveau module sans que cela soit justifié par l'utilisation des variables dans un ensemble de procédures n'est pas une bonne façon de coder !

Et déclarer toutes ses varaibles sans les typer (donc de type Variant indistinctement) ne l'est pas non plus !


Peux-tu confirmer que tu recherches au départ la feuille "Destination" dans le classeur "Nomenclature.xls" qui vient d'être ouvert ?

vu que mon code bloque et j'arrive pas à trouver le problème, je suis désolée pour ma demande, mais t'en a pas un exemple ou un code avec qui je pourrai récupérer des colonnes d'un fichier et les coller dans une nouvelle feuille de mon classeur ouvert ?

Réponds à ma dernière question.

La logique voudrait que la feuille Destination soit dans ThisWorkbook mais (par non qualification d'objet) le code la cherche dans "Nomenclature.xls".

Je souhaite donc que tu précises ce qu'il en est ?

je me suis un peu perdu dans les changement de classeur ^^

si flag=1 (ce qui m'étonnerai) on ne reviens pas dans le classeur de départ donc :

 Fdép.Range(Col & 1 & ":" & Col & Fdép.Range(Col & Rows.Count).End(xlUp).Row).copy
        Range("A1").Offset(0, i).PasteSpecial xlPasteAll

tu copie la colonne et la recolle en même endroits

Non la feuille destination c'est la feuille que je cree dans mon classeur ou j'execute ma macro. je cherche a copier les colonnes de la feuille "Nom" (du classeur que j'ouvre) dans la feuille "Destination" (du classeur ouvert).

C'est quand on s'amuse à jouer les Select/Activate etc.

Un classeur qu'on ouvre devient actif à l'ouverture !

Tant que l'on en active pas un autre, il reste actif...

le Worksheets qui arrive derrière sans qualification ne peut donc référer qu'au classeur actif !

Ok, on va rectifier tout ça !

Sous réserve d'erreur de frappe éventuelle (ne testant pas...) :

Option Explicit

Sub Recopie()
    Dim Nom As Workbook, Fdép As Worksheet, ColDest, i%, n%
    Set Nom = Workbooks.Open("C:\Users\accele\Desktop\GE BALOKI - Nomenclature.xls")
    Set Fdép = Nom.Worksheets("Nom BALOKI")   '---> Feuille de départ
    ColDest = Split("A D C E")         '---> Colonnes à copier
    On Error GoTo créerdest
    With ThisWorkbook.Worksheets("Destination")
        On Error GoTo 0
        .Range("A1").CurrentRegion.ClearContents
        For i = 0 To UBound(ColDest)
            n = Fdép.Range(ColDest(i) & Rows.Count).End(xlUp).Row
            Fdép.Range(ColDest(i) & 1).Resize(n).Copy .Range("A1").Offset(, i)
        Next i
    End With
    Nom.Close False
    Exit Sub
créerdest:
    ThisWorkbook.Worksheets.Add
    ActiveSheet.Name = "Destination"
    Resume
End Sub

J'ai éliminé la série de boucles For Each... qui avait tendance à compliquer les choses...

Mis la création de feuille sous gestion d'erreur (si elle n'existe pas, erreur, bascule sur l'étiquette de branchement erreur où on la crée, et retour sur la ligne où s'était produit l'erreur...)

Légère modif de la définition de ColDest (pour illustration) : Array est plus simple et plus adéquat pour un tableau de valeurs numériques, mais Split est plus simple souvent pour un tableau de valeurs texte.

Une seule boucle avec i sur le tableau ColDest, dont les indices correspondent à l'Offset de collage, convient. Dans la mesure où tu colles tout, la copie et le collage peuvent intervenir sur la même ligne de code.

Cordialement.

ça marche toujours pas, ça boucle sans arrêt. :/

Bonjour,

Mferrand, dans votre code le "thisworkbook" (dans "With ThisWorkbook.Worksheets("Destination") ") ne fait pas t-il référence à

"Set Nom = Workbooks.Open("C:\Users\accele\Desktop\GE BALOKI - Nomenclature.xls")" et non au classeur ou vous exécuté la macro??

Bonjour,

ThisWorkbook est toujours le classeur qui contient la macro !

On y transfère les données sur la feuille Destination.

Et on crée cette feuille si elle n'y est pas.

Nom est le classeur dans lequel on va chercher les données, après l'avoir ouvert...

L'ensemble doit fonctionner, dès lors que les noms et chemins mis sont les bons !

Cordialement

Bonjour,

merci pour l'info comme quoi on apprend tout les jour ici

Je n'ai pas décelé d'erreur de frappe à la relecture... Si les chemins et noms sont bons, cela doit donc fonctionner.

Si erreur, il faut indiquer quelle erreur, quel numéro d'erreur, sur quelle ligne, et la valeur des variables au moment de l'erreur (que l'on peut afficher dans des info-bulles au survol du curseur tant qu'on n'a pas réinitialisé...)

Sinon avec la boule de cristal, c'est très aléatoire !

Bonjour,

J'ai également un problème : 1004....

Voilà, en PJ le fichier.

J'ai réussis à trouver un super fichier sur internet que quelqu'un avait créé.

Il agit en tant que badgeuse excel et tous les collaborateurs peuvent se connecter avec mot de passe à leur compte et avec bouton, ils n'ont qu'à appuyer pour dire :

qu'ils démarrent leur journée

qu'ils vont en pause

qu'ils reviennent de pause

qu'ils finissent leur journée

et Les données se mettent à jour.

Malheureusement, j'ai un soucis dès que le collaborateur clique sur départ en pause : erreur débogage 1004.

J'ai beau avoir effectué des ajustements, cette erreur ne s'en va pas.

Par ailleurs, je voudrais créer une feuille récapitulative de tous les agents par jour / Mois.

Est-ce que quelqu'un de super calé pourrait m'aider ?

Merci

14anais-1.zip (83.36 Ko)
Rechercher des sujets similaires à "erreur 1004 definie application objet"