Erreur sur sélection de plage de cellules

laraville -  
melanie1324 Messages postés 1561 Statut Membre -
Bonjour,

J'avais posé une question hier à laquelle vous avez merveilleusement bien répondu, mais je ne parviens pas à retrouver le topic... :/

Je suis toujours sur mon fichier et je suis face à un autre problème:

Je fais une macro qui doit me copier le contenu de la cellule IX et JX en fonction de la valeur de la cellule EX

La macro actuelle ne fonctionne pas et s'arrête à la ligne soulignée et m'affiche l'erreur suivante: Erreur 1004 Erreur définie par l'application ou par l'objet.

Pourriez-vous m'indiquer une solution?

Je vous remercie par avance.

Sub FLIP()

Dim classeurSource As Workbook
Dim classeurDestination As Workbook
Dim i As Integer

'ouvrir le classeur Automatisation en lecture seule
Set classeurSource = Application.Workbooks.Open("S:XXXXX", , True)
Application.DisplayAlerts = False

'définit le classeur destination
Set classeurDestination = Application.Workbooks.Open("YYYYY", , True)

classeurSource.Sheets("Fonds").Activate
Col = "E"
NumLig = 0
With Sheets("Fonds")
NbrLig = Cells(65536, Col).End(xlUp).Row

For Lig = 1 To NbrLig
If Cells(Lig, Col).Value = "Fond Interne" Then
Range(Cells(i, 9), Cells(i, 10)).Select
Selection.Copy
classeurDestination.Sheets("Feuil1").Activate
NumLig = NumLig + 1
Cells(NumLig, 1).Select
Cells(65535, 1).End(xlUp)(2).Select
ActiveSheet.Paste
End If
Next
End With

'fermer le classeur source
classeurSource.Close False

End Sub

5 réponses

Résumé de la discussion

Le fil porte sur une macro VBA qui doit copier le contenu des cellules IX et JX selon la valeur de la cellule EX et qui déclenche l'erreur 1004. Plusieurs corrections suggèrent de déclarer correctement les variables et de vérifier le nom de la feuille source, notamment que la feuille s'appelle bien Fonds et que les références de cellules soient nettes. D'autres propositions montrent une version ajustée qui boucle sur la colonne E et écrit les résultats dans Feuil1, avec utilisation directe des valeurs des colonnes 9 et 10 pour éviter les sélections. En parallèle, certains retours mentionnent que l'exécution peut ralentir ou faire planter Excel temporairement selon les manipulations et les tailles de classeurs.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. melanie1324 Messages postés 1561 Statut Membre 156
     
    bonjour,

    j'ai trouvé ton pb.
    Ta variable i n'est pas définie et tu ui demandes de sélectionner cells(i,9) sauf que i = rien donc ca marche pas.
    Remplace ton code par :
    Sub FLIP()

    Dim classeurSource As Workbook
    Dim classeurDestination As Workbook
    Dim i As Integer

    'ouvrir le classeur Automatisation en lecture seule
    Set classeurSource = Application.Workbooks.Open("S:XXXXX", , True)
    Application.DisplayAlerts = False

    'définit le classeur destination
    Set classeurDestination = Application.Workbooks.Open("YYYYY", , True)

    classeurSource.Sheets("Fonds").Activate
    Col = "E"
    NumLig = 0
    With Sheets("Fonds")
    NbrLig = Cells(65536, Col).End(xlUp).Row

    For Lig = 1 To NbrLig
    If Cells(Lig, Col).Value = "Fond Interne" Then
    Range(Cells(Lig, 9), Cells(Lig, 10)).Select
    Selection.Copy
    classeurDestination.Sheets("Feuil1").Activate
    NumLig = NumLig + 1
    Cells(NumLig, 1).Select
    Cells(65535, 1).End(xlUp)(2).Select
    ActiveSheet.Paste
    End If
    Next
    End With

    'fermer le classeur source
    classeurSource.Close False

    End Sub
    0
  2. laraville
     
    C'est parfait!

    Par contre je voudrais que l'opération se répète jusqu'à la dernière ligne de mon classeur source (Toutes les lignes ayant "Fond Interne" dans la colonne E devront apparaitre dans mo classeur de destination. ici il s'arrète à la ligne 1. Faut-il que je lui fasse une loop?
    0
    1. melanie1324 Messages postés 1561 Statut Membre 156
       
      non, c la macro qui est mal monté , remplaces ton code par :

      Sub FLIP()

      Dim classeurSource As Workbook
      Dim classeurDestination As Workbook
      Dim i As Integer

      'ouvrir le classeur Automatisation en lecture seule
      Set classeurSource = Application.Workbooks.Open("S:XXXXX", , True)
      Application.DisplayAlerts = False

      'définit le classeur destination
      Set classeurDestination = Application.Workbooks.Open("YYYYY", , True)


      classeurSource.Sheets("Fonds").Activate
      Col = "E"
      NumLig = 0
      With Sheets("Fonds")

      For Lig = 1 To 65536
      classeurSource.Sheets("Fonds").Activate

      If Cells(Lig, Col).Value = "Fond Interne" Then
      Range(Cells(Lig, 9), Cells(Lig, 10)).Select
      Selection.Copy
      classeurDestination.Sheets("Feuil1").Activate
      NumLig = NumLig + 1
      Cells(NumLig, 1).Select
      Cells(65535, 1).End(xlUp)(2).Select
      ActiveSheet.Paste
      End If
      Next
      End With

      'fermer le classeur source
      classeurSource.Close False


      End Sub
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour,

      Entre la boucle qui se tape toutes les lignes de 1 à 65536 + les Select, changements de classeurs, ta macro en a pour ... au bas mot 25 minutes à traiter ça... Si elle ne plante pas excel entre temps...
      0
    3. melanie1324 Messages postés 1561 Statut Membre 156
       
      coucou,

      elle peut l'alléger comme ca :


      Sub FLIP()

      Dim classeurSource As Workbook
      Dim classeurDestination As Workbook
      Dim i As Integer

      'ouvrir le classeur Automatisation en lecture seule
      Set classeurSource = Application.Workbooks.Open("S:XXXXX", , True)
      Application.DisplayAlerts = False

      'définit le classeur destination
      Set classeurDestination = Application.Workbooks.Open("YYYYY", , True)

      classeurSource.Sheets("Fonds").Activate

      Col = "E"
      NumLig = 0
      With Sheets("Fonds")

      For Lig = 1 To 65536

      If classeurSource.Sheets("Fonds").Cells(Lig, Col).Value = "Fond Interne" Then
      NumLig = NumLig + 1
      workbooks(classeurDestination).sheets("Feuil1").Cells(NumLig, 1) = workbooks( classeurSource).Sheets("Fonds").Cells(Lig, 9).Value
      workbooks(classeurDestination).sheets("Feuil1").cells(Numlig,2) = workbooks(classeurSource).Sheets("Fonds").Cells(Lig, 10).Value

      End If
      Next
      End With
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      C'est déjà beaucoup mieux.
      Mais pourquoi boucler sur toutes les lignes. C'est ça que je ne comprends pas :
      For Lig = 1 To 65536
      0
    5. laraville
       
      Bonjour à tous,

      Je tiens tout d'abord à vous remercier pour votre aide, j'avance à grands pas grâce à vous!

      J'ai copié ton code mélanie, mais il plante sur la ligne

      workbooks(classeurDestination).sheets("Feuil1").Cells(NumLig, 1) = workbooks( classeurSource).Sheets("Fonds").Cells(Lig, 9).Value

      et sur la suivante.

      Aurais-tu une idée pour le déboguer? je ne connais pas cette syntaxe.
      0
  3. melanie1324 Messages postés 1561 Statut Membre 156
     
    coucou,

    On va essayer comme ca :

    Sub regroupementFR()
    '
    Dim Fichierdeliaison As Variant

    '

    'Ouvre tes fichier set mets à jour les liens

    Workbooks.Open Filename:= _
    "S:\AD Conseil\Fonds\Regroupement des données pour import MS Français.xls", _
    UpdateLinks:=3
    classeur = activeworkbook.name

    Workbooks.Open Filename:="S:\AD Conseil\Fonds\1_Principal data fundlist.xlsm" _
    , UpdateLinks:=3
    a=activeworkbook.name

    'sélectionnes la cellule A1 et tu choisis de copier la dernière cellule située sur la dernière colonne de la dernière ligne
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    ligne = activecell.row
    colonne = activecell.column
    feuille= sheets.name

    ' là tu as un pb, où veux-tu copier ta cellule. Car ces lignes disent que tu vas coller ta cellule qui est déjà sélectionnée mais il convient de dire range("A1").select
    Windows("Regroupement des données pour import MS Français.xls").Activate
    Sheets("Infos 1 principales datas").Select
    'range("A1")
    'je laisse ca mais tu devrais remplacer activecell par range("A1) = par ex
    activecell
    activecell = workbook(a).sheets(feuille).cells(ligne,colonne)

    'copie la colonne D en A
    Columns("D:D").Copy Columns("A:A")

    'on ouvre un autre fichier
    Workbooks.Open Filename:= _
    "S:\AD Conseil\Fonds\BASE FONDS - PROTOTYPE\INPUT\2_Source Morningstar fundlist.xls"

    source = activeworkbook.name

    'essaie et si ca plante dis le, remplace nomfeuillepar le nom te feuille :
    Range("A1:AE159").copy
    workbooks(classeur).activate
    Sheets("Infos de source 2").select
    range("A1").select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

    Fichierdeliaison = Application.GetOpenFilename("Fichiers excel(*.xls),*.xls")
    Fichierdeliaison = ActiveWorkbook.Name

    Columns("F:F").Copy workbooks("Regroupement des données pour import MS Français.xls").Sheets("Custom Data").Columns ("A:A")
    Workbooks("Fichierdeliaison").Sheets("FundManagementStyle").Columns("D:D").Copy workbooks("Regroupement des données pour import MS Français.xls").Sheets("Custom Data").Columns ("B:B")

    Columns("A:B").Copy Sheets("en-GB").Columns("B:C")
    Application.CutCopyMode = False
    ActiveWorkbook.Save
    Windows("Fund Updates.xls").Activate

    ThisWorkbook.Sheets("Commandes").Activate
    Cells(27, 6) = DateValue(Now)

    End SubLien (#31)
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. laraville
     
    Alors ca plante immédiatement sur la ligne 1

    Membre de méthode ou données introuvables.
    0
    1. melanie1324 Messages postés 1561 Statut Membre 156
       
      remplace Dim Fichierdeliaison As Variant

      par
      Dim Fichierdeliaison, classeur, source, a, ligne, colonne As Variant
      0
    2. laraville
       
      En fait il me met ".Name" sur la ligne suivante en surbrillance:

      feuille = Sheets.Name
      0
    3. melanie1324 Messages postés 1561 Statut Membre 156
       
      feuille = activeSheet.Name
      0
    4. laraville
       
      Ah ca avance un peu mieux déjà! J'ai toujours une erreur 424 sur cette même ligne. "Objet requis"
      0
    5. laraville
       
      J'ai solutionné, il me reste une erreur sur

      Workbooks("Fichierdeliaison").Sheets("FundManagementStyle").Columns("D:D").Copy Workbooks("Regroupement des données pour import MS Français.xls").Sheets("Custom Data").Columns("B:B")

      L'indice n'appartient pas à la sélection.
      0