Bloqué sur une macro

Résolu
John97600 Messages postés 7 Date d'inscription mercredi 24 juillet 2024 Statut Membre Dernière intervention 2 août 2024 - Modifié le 28 juil. 2024 à 11:23
danielc0 Messages postés 1232 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 29 octobre 2024 - 2 août 2024 à 09:43

Bonjour à tous :)

J'ai une macro pour copier les données des colonnes A,B,J,Z et L de la ligne sélectionnée de la feuille "Suivi DO" dans les colonnes A,B,C,D et E de la feuille "DS2024".

J'ai fais en sorte que cela se colle toujours à la suite des données existantes.

Cela fonctionne très bien avec ce code :

Sub Retenus()
  Dim lig As Long, i As Long
  i = ActiveCell.Row 'ligne de la cellule active
  ActiveCell.Interior.ColorIndex = 35 'interieur couleur verte
 'ligne destination 'dernière ligne+1)
  lig = Sheets("DS2024").Range("A" & Rows.Count).End(xlUp).Row + 1
' ci dessous   cellule copiée               cellule de destination
  Sheets("DS2024").Range("A" & lig) = ActiveSheet.Range("A" & i)
  Sheets("DS2024").Range("B" & lig) = ActiveSheet.Range("B" & i)
  Sheets("DS2024").Range("C" & lig) = ActiveSheet.Range("J" & i)
  Sheets("DS2024").Range("D" & lig) = ActiveSheet.Range("Z" & i)
  Sheets("DS2024").Range("E" & lig) = ActiveSheet.Range("L" & i)
  End Sub

Je souhaite également faire une extraction de ces cellules dans un autre classeur "Point candidature" dans la feuille "Orientations" mais je n'y arrive pas.

J'ai trouvé une autre méthode mais la formule bloque avec l'erreur d'exécution 424 : objet requis. Voici ma macro :

Sub commission_test()

Dim wk_fichier1 As Workbook
Dim ws_fichier1feuil1 As Worksheet

Dim wk_fichier2 As Workbook
Dim ws_fichier2feuil1 As Worksheet
Dim lstrw As Long
Dim ligne_coller As Long

'définir les variables fichiers et onglets
Set wk_fichier1 = ActiveWorkbook
Set ws_fichier1feuil1 = wk_fichier1.Worksheets(1)

Set wk_fichier2 = Application.Workbooks.Open("\\XXX\Point candidature.xlsx")
Set ws_fichier2feuil1 = wk_fichier2.Worksheets(1)

'identifier dernière ligne colonne A fichier2feuil1
lstrw = ws_fichier2feuil1.Cells(Rows.Count, 1).End(xlUp).Row

ligne_coller = lstrw + 1

'copier coller cellules
ws_fichier2feuil1.Range("A") = fichier1feuil1.Range("A")
ws_fichier2feuil1.Range("B") = ActiveSheet.Range("B")
ws_fichier2feuil1.Range("C") = ActiveSheet.Range("J")
ws_fichier2feuil1.Range("D") = ActiveSheet.Range("Z")
ws_fichier2feuil1.Range("E") = ActiveSheet.Range("L")


End Sub

C'est la ligne 24 qui indique l'erreur d'objet manquant...

Je sens que je ne suis pas loin!

Est-ce que quelqu'un pourrait m'expliquer ou cela coince ?

Ou si je peux reprendre ma première macro et la compléter pour qu'elle s'ouvre se colle dans un autre fichier ?

Merci beaucoup !

John
Windows / Firefox 102.0

A voir également:

8 réponses

vaanbasch Messages postés 717 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 19 octobre 2024 656
Modifié le 28 juil. 2024 à 11:24

Bonjour,

L'erreur "objet requis" se produit généralement lorsque vous faites référence à un objet qui n'existe pas ou n'est pas correctement défini.

Dans votre deuxième macro, l'erreur semble provenir de la ligne où vous tentez de copier les cellules. Voici une version corrigée de votre macro qui devrait fonctionner :+

[code]
Sub commission_test()
    Dim wk_fichier1 As Workbook
    Dim ws_fichier1feuil1 As Worksheet

    Dim wk_fichier2 As Workbook
    Dim ws_fichier2feuil1 As Worksheet
    Dim lstrw As Long
    Dim ligne_coller As Long
    Dim i As Long

    ' Définir les variables fichiers et onglets
    Set wk_fichier1 = ActiveWorkbook
    Set ws_fichier1feuil1 = wk_fichier1.Worksheets("Suivi DO")

    Set wk_fichier2 = Application.Workbooks.Open("\\XXX\Point candidature.xlsx")
    Set ws_fichier2feuil1 = wk_fichier2.Worksheets("Orientations")

    ' Identifier la dernière ligne de la colonne A dans ws_fichier2feuil1
    lstrw = ws_fichier2feuil1.Cells(ws_fichier2feuil1.Rows.Count, 1).End(xlUp).Row
    ligne_coller = lstrw + 1

    ' Récupérer la ligne active dans le fichier 1
    i = ActiveCell.Row

    ' Copier-coller les cellules
    ws_fichier2feuil1.Cells(ligne_coller, 1).Value = ws_fichier1feuil1.Cells(i, 1).Value ' Colonne A
    ws_fichier2feuil1.Cells(ligne_coller, 2).Value = ws_fichier1feuil1.Cells(i, 2).Value ' Colonne B
    ws_fichier2feuil1.Cells(ligne_coller, 3).Value = ws_fichier1feuil1.Cells(i, 10).Value ' Colonne J
    ws_fichier2feuil1.Cells(ligne_coller, 4).Value = ws_fichier1feuil1.Cells(i, 26).Value ' Colonne Z
    ws_fichier2feuil1.Cells(ligne_coller, 5).Value = ws_fichier1feuil1.Cells(i, 12).Value ' Colonne L

    ' Sauvegarder et fermer le fichier 2
    wk_fichier2.Close SaveChanges:=True
End Sub
[/code]

J'ai défini les feuilles de calcul de votre premier classeur (Suivi DO) et du second classeur (Orientations).

Récupéré la ligne active dans ws_fichier1feuil1 et utilisé cette ligne pour copier les données des colonnes spécifiques.

Et j'ai utilisé la méthode .Cells(ligne, colonne) pour copier les valeurs des cellules spécifiques de ws_fichier1feuil1 vers ws_fichier2feuil1.

Normalement, on ne devrait pas être loin de la vérité. :)


0
John97600 Messages postés 7 Date d'inscription mercredi 24 juillet 2024 Statut Membre Dernière intervention 2 août 2024
Modifié le 28 juil. 2024 à 11:26

Bonjour Vaanbasch :)

Merci pour ta réponse :)

J'ai remis de l'ordre dans la formule et donc avec les mise à la ligne cela donne ça :

Sub commission_test()

Dim wk_fichier1 As Workbook
Dim ws_fichier1feuil1 As Worksheet
Dim wk_fichier2 As Workbook
Dim ws_fichier2feuil1 As Worksheet
Dim lstrw As Long
Dim ligne_coller As Long
Dim i As Long
' Définir les variables fichiers et onglets
Set wk_fichier1 = ActiveWorkbook
Set ws_fichier1feuil1 = wk_fichier1.Worksheets("Suivi DO")
Set wk_fichier2 = Application.Workbooks.Open("\\XXX\Point candidature.xlsx")
Set ws_fichier2feuil1 = wk_fichier2.Worksheets("Orientations")
' Identifier la dernière ligne de la colonne A dans ws_fichier2feuil1
lstrw = ws_fichier2feuil1.Cells(ws_fichier2feuil1.Rows.Count, 1).End(xlUp).Row
ligne_coller = lstrw + 1
' Récupérer la ligne active dans le fichier 1
i = ActiveCell.Row
' Copier-coller les cellules
ws_fichier2feuil1.Cells(ligne_coller, 1).Value = ws_fichier1feuil1.Cells(i, 1).Value ' Colonne A
ws_fichier2feuil1.Cells(ligne_coller, 2).Value = ws_fichier1feuil1.Cells(i, 2).Value ' Colonne B
ws_fichier2feuil1.Cells(ligne_coller, 3).Value = ws_fichier1feuil1.Cells(i, 10).Value ' Colonne J
ws_fichier2feuil1.Cells(ligne_coller, 4).Value = ws_fichier1feuil1.Cells(i, 26).Value ' Colonne Z
ws_fichier2feuil1.Cells(ligne_coller, 5).Value = ws_fichier1feuil1.Cells(i, 12).Value ' Colonne L
' Sauvegarder et fermer le fichier 2
wk_fichier2.Close SaveChanges:=True
End Sub

Cela m'ouvre bien le fichier et le ferme.

Mais rien ne s'écrit à l'intérieur... Il ne se passe rien du tout :'(

Je me pose une question, si on a lstrw = ws_fichier2feuil1.Cells(ws_fichier2feuil1.Rows.Count, 1).End(xlUp).Row

Pourquoi rajouter ligne_coller = lstrw + 1 ?

J'ai tenté de supprimer cette ligne et d'écrire

ws_fichier2feuil1.Cells(i, 1).Value = ws_fichier1feuil1.Cells(i, 1).Value ' Colonne A

et là ça me copie bien les colonnes, mais de la ligne 31 ! et elles sont collées à la ligne 31...

Cela me rend chèvre...

Est-ce que le fait que le fichier soit en xlsx pose un soucis ?

Merci pour ton aide :)

0
vaanbasch Messages postés 717 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 19 octobre 2024 656 > John97600 Messages postés 7 Date d'inscription mercredi 24 juillet 2024 Statut Membre Dernière intervention 2 août 2024
27 juil. 2024 à 21:50

Bonjour,

lstrw récupère la dernière ligne utilisée dans la colonne A de la feuille Orientations.

ligne_coller est défini comme lstrw + 1 pour insérer les données sur la ligne suivante.

Les valeurs des cellules des colonnes spécifiques de Suivi DO sont copiées dans Orientations aux nouvelles positions.

Je vais m'intéresser d'un peu plus près à ce code et je reviens vers vous. 

Après je ne suis pas trop sure de pouvoir réussir. D'autre personne doivent être bien plus calé que moi ici. 

0
vaanbasch Messages postés 717 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 19 octobre 2024 656 > John97600 Messages postés 7 Date d'inscription mercredi 24 juillet 2024 Statut Membre Dernière intervention 2 août 2024
Modifié le 28 juil. 2024 à 01:44

Alors voilà. 

Je m'y suis penché plus en détail. Chez moi cela fonctionne.

Pour la 1ère macro pour copier les données de "Suivi DO" vers "DS2024"

Sub Retenus()
    Dim lig As Long, i As Long
    i = ActiveCell.Row 'ligne de la cellule active
    ActiveCell.Interior.ColorIndex = 35 'interieur couleur verte
    
    'ligne destination (dernière ligne + 1)
    lig = Sheets("DS2024").Range("A" & Rows.Count).End(xlUp).Row + 1
    
    ' Copier les valeurs des cellules
    Sheets("DS2024").Range("A" & lig).Value = ActiveSheet.Range("A" & i).Value
    Sheets("DS2024").Range("B" & lig).Value = ActiveSheet.Range("B" & i).Value
    Sheets("DS2024").Range("C" & lig).Value = ActiveSheet.Range("J" & i).Value
    Sheets("DS2024").Range("D" & lig).Value = ActiveSheet.Range("Z" & i).Value
    Sheets("DS2024").Range("E" & lig).Value = ActiveSheet.Range("L" & i).Value
End Sub

Ensuite, la 2ème macro pour copier les données de "DS2024" vers l'autre classeur "Point candidature" dans la feuille "Orientations" :

Sub commission_test()
    Dim wk_fichier1 As Workbook
    Dim ws_fichier1feuil1 As Worksheet
    Dim wk_fichier2 As Workbook
    Dim ws_fichier2feuil1 As Worksheet
    Dim lstrw As Long
    Dim ligne_coller As Long
    Dim i As Long
    Dim filePath As String
    
    ' Définir les variables fichiers et onglets
    Set wk_fichier1 = ActiveWorkbook
    Set ws_fichier1feuil1 = wk_fichier1.Worksheets("DS2024")
    
    ' Définir le chemin du fichier
    filePath = "C:\Users\VotreNomUtilisateur\Desktop\Point candidature.xlsx"
    
    ' Ouvrir le fichier Point candidature.xlsx avec gestion des erreurs
    On Error GoTo ErrorHandler
    Set wk_fichier2 = Application.Workbooks.Open(filePath)
    On Error GoTo 0 ' Réinitialiser la gestion des erreurs
    
    Set ws_fichier2feuil1 = wk_fichier2.Worksheets("Orientations")
    
    ' Identifier la dernière ligne de la colonne A dans ws_fichier2feuil1
    lstrw = ws_fichier2feuil1.Cells(ws_fichier2feuil1.Rows.Count, 1).End(xlUp).Row
    ligne_coller = lstrw + 1
    
    ' Récupérer la ligne active dans DS2024
    i = ws_fichier1feuil1.Cells(ws_fichier1feuil1.Rows.Count, 1).End(xlUp).Row
    
    ' Copier-coller les cellules
    ws_fichier2feuil1.Cells(ligne_coller, 1).Value = ws_fichier1feuil1.Cells(i, 1).Value ' Colonne A
    ws_fichier2feuil1.Cells(ligne_coller, 2).Value = ws_fichier1feuil1.Cells(i, 2).Value ' Colonne B
    ws_fichier2feuil1.Cells(ligne_coller, 3).Value = ws_fichier1feuil1.Cells(i, 3).Value ' Colonne C
    ws_fichier2feuil1.Cells(ligne_coller, 4).Value = ws_fichier1feuil1.Cells(i, 4).Value ' Colonne D
    ws_fichier2feuil1.Cells(ligne_coller, 5).Value = ws_fichier1feuil1.Cells(i, 5).Value ' Colonne E
    
    ' Sauvegarder et fermer le fichier 2
    wk_fichier2.Close SaveChanges:=True
    
    MsgBox "Données copiées et fichier enregistré avec succès."
    
    Exit Sub
    
ErrorHandler:
    MsgBox "Erreur lors de l'ouverture du fichier : " & Err.Description
End Sub

Dans la 2ème macro, il faut définir le chemin d'accès du classeur "Point candidature"

J'ai pris comme exemple celui que j'ai créer sur mon bureau en .xlsx :

' Définir le chemin du fichier
    filePath = "C:\Users\VotreNomUtilisateur\Desktop\Point candidature.xlsx"

Tu dois modifier selon l'emplacement de ton fichier Excel "Point candidature" :)

J'ai ajouté les MsgBox. Tu peux les supprimer si tu veux. C'était pour moi tester.

0
John97600 Messages postés 7 Date d'inscription mercredi 24 juillet 2024 Statut Membre Dernière intervention 2 août 2024 > vaanbasch Messages postés 717 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 19 octobre 2024
Modifié le 29 juil. 2024 à 13:35

Bonjour !

Merci beaucoup pour ta prise de tête pour mon petit casse tête ^^

J'ai tenté de mettre le code sur mon fichier en modifiant les noms d'onglet et le chemin.

ça donne :

Sub commission_test2()

Dim wk_fichier1 As Workbook
Dim ws_fichier1feuil1 As Worksheet
Dim wk_fichier2 As Workbook
Dim ws_fichier2feuil1 As Worksheet
Dim lstrw As Long
Dim ligne_coller As Long
Dim i As Long
Dim filePath As String
    
    ' Définir les variables fichiers et onglets
    Set wk_fichier1 = ActiveWorkbook
    Set ws_fichier1feuil1 = wk_fichier1.Worksheets("Suivi DO")
    
    ' Définir le chemin du fichier
    filePath = "C:\Users\XXX\Desktop\point candidature.xlsx"
    
    ' Ouvrir le fichier Point candidature.xlsx avec gestion des erreurs
    On Error GoTo ErrorHandler
    Set wk_fichier2 = Application.Workbooks.Open(filePath)
    On Error GoTo 0 ' Réinitialiser la gestion des erreurs
    
    Set ws_fichier2feuil1 = wk_fichier2.Worksheets("Orientations")
    
    ' Identifier la dernière ligne de la colonne A dans ws_fichier2feuil1
    lstrw = ws_fichier2feuil1.Cells(ws_fichier2feuil1.Rows.Count, 1).End(xlUp).Row
    ligne_coller = lstrw + 1
    
    ' Récupérer la ligne active dans Suivi DO
    i = ws_fichier1feuil1.Cells(ws_fichier1feuil1.Rows.Count, 1).End(xlUp).Row
    
    ' Copier-coller les cellules
    ws_fichier2feuil1.Cells(ligne_coller, 1).Value = ws_fichier1feuil1.Cells(i, 1).Value ' Colonne A
    ws_fichier2feuil1.Cells(ligne_coller, 2).Value = ws_fichier1feuil1.Cells(i, 2).Value ' Colonne B
    ws_fichier2feuil1.Cells(ligne_coller, 3).Value = ws_fichier1feuil1.Cells(i, 10).Value ' Colonne J
    ws_fichier2feuil1.Cells(ligne_coller, 4).Value = ws_fichier1feuil1.Cells(i, 26).Value ' Colonne Z
    ws_fichier2feuil1.Cells(ligne_coller, 5).Value = ws_fichier1feuil1.Cells(i, 12).Value ' Colonne L
    
    ' Sauvegarder et fermer le fichier 2
    wk_fichier2.Close SaveChanges:=True
    
    MsgBox "Données copiées et fichier enregistré avec succès."
    
    Exit Sub
    
ErrorHandler:
    MsgBox "Erreur lors de l'ouverture du fichier : " & Err.Description
End Sub

Cela copie bien les données dans l'autre tableau !

Mais, sinon c'est pas drôle, quand je sélectionne un nom dans une case (exemple A15) il ne me copie uniquement la dernière ligne de "Suivi DO"... et il va les mettre à partir de la 4e ligne de "Orientations"...

Je pense que l'erreur vient de :

 ' Récupérer la ligne active dans Suivi DO
    i = ws_fichier1feuil1.Cells(ws_fichier1feuil1.Rows.Count, 1).End(xlUp).Row

J'ai tenté de remplacer par :

i = ActiveCell.Row

Mais là ça va me copier maintenant les colonnes de la ligne 17 uniquement... et à partir de la 3e ligne.

J'ai supprimé la mise en forme automatique du tableau et fait un tableau classique.

Maintenant, il ne me copie uniquement les colonnes de la ligne 9...

Je ne comprends pas le problème... Peut-être que c'est mon tableau qui pose problème ? J'ai donc recréé deux tableaux en partant de zéro mais cela ne fonctionne pas non plus...

Je deviens fou...

0
vaanbasch Messages postés 717 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 19 octobre 2024 656 > John97600 Messages postés 7 Date d'inscription mercredi 24 juillet 2024 Statut Membre Dernière intervention 2 août 2024
31 juil. 2024 à 12:47

Je comprend la situation. Il faudrait le fichier comme exemple :)

0
danielc0 Messages postés 1232 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 29 octobre 2024 140
25 juil. 2024 à 09:51

Bonjour à tous,

"Est-ce que quelqu'un pourrait m'expliquer ou cela coince ?"

1. Ton erreur vient du fait que tu utilises fichier1feuil1 au lieu de ws_fichier1feuil1

2.la syntaxe utilisée est incorrecte. Pour utiliser la colonne A, la syntaxe est :

Range("A:A")

pas :

Range(A")

Daniel

Range("A")


0
John97600 Messages postés 7 Date d'inscription mercredi 24 juillet 2024 Statut Membre Dernière intervention 2 août 2024
25 juil. 2024 à 17:29

Bonjour !

Ha oui bien vu ^^

J'ai tenté de reprendre ma formule initiale qui fonctionne et de mettre "A:A" etc mais cela me créé une page sous forme de tableau illimitée et m'efface toutes les données existantes, sans toutefois copier quoique ce soit...

0
danielc0 Messages postés 1232 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 29 octobre 2024 140 > John97600 Messages postés 7 Date d'inscription mercredi 24 juillet 2024 Statut Membre Dernière intervention 2 août 2024
25 juil. 2024 à 17:34

Dans ta première macro, tu as :

Range("A" & lig)

Dans la seconde, il doit falloir mettre :

Range("A" & ligne_coller)

J'avoue ne pas avoir cherché à comprendre plus avant le code.

Daniel

0
Le Pingou Messages postés 12175 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 30 octobre 2024 1 448
29 juil. 2024 à 19:14

Bonjour,

Petite intrusion, avec le fichier comme exemple il serait plus favorable pour vous venir en aide...!


0
vaanbasch Messages postés 717 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 19 octobre 2024 656
31 juil. 2024 à 12:28

Bonjour ;)

Exactement !

0
John97600 Messages postés 7 Date d'inscription mercredi 24 juillet 2024 Statut Membre Dernière intervention 2 août 2024
29 juil. 2024 à 21:50

Bonjour!

Haha pour moi c'est une assistance et non une intrusion ????

Je voulais importer les 2 fichiers avec mon dernier message mais je n'ai pas trouvé comment faire ...

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12175 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 30 octobre 2024 1 448
29 juil. 2024 à 23:37

Bonjour,

Par ici  Accueil de Cjoint.com et suivre instruction puis poster le lien dans prochain message. Note vous : vos pouvez compresser les deux fichiers  et mettre ce dernier dans Cjoint...!


0
John97600 Messages postés 7 Date d'inscription mercredi 24 juillet 2024 Statut Membre Dernière intervention 2 août 2024
Modifié le 31 juil. 2024 à 14:15

Super merci !

Voici le lien : https://www.cjoint.com/c/NGFmeUK65mS

J'ai volontairement effacé les données sensibles.

Merci pour l'aide apportée :)

0
Le Pingou Messages postés 12175 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 30 octobre 2024 1 448
31 juil. 2024 à 15:49

Bonjour,

Merci, cependant il n'y a pas les 2 classeurs dont vous parliez et de plus il manque les 2 macros.

Alors je ne peux pas trouver l'erreur dans les codes. désolé.


0
danielc0 Messages postés 1232 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 29 octobre 2024 140
31 juil. 2024 à 17:08

Bonjour à tous,

Essaie :

Sub test()
Sub commission_test2()

Dim wk_fichier1 As Workbook
Dim ws_fichier1feuil1 As Worksheet
Dim wk_fichier2 As Workbook
Dim ws_fichier2feuil1 As Worksheet
Dim lstrw As Long
Dim ligne_coller As Long
Dim i As Long
Dim filePath As String
    
    ' Définir les variables fichiers et onglets
    Set wk_fichier1 = ActiveWorkbook
    Set ws_fichier1feuil1 = wk_fichier1.Worksheets("Suivi DO")
    
    ' Définir le chemin du fichier
    filePath = "C:\Users\XXX\Desktop\point candidature.xlsx"
    
    ' Ouvrir le fichier Point candidature.xlsx avec gestion des erreurs
    On Error GoTo ErrorHandler
    Set wk_fichier2 = Workbooks.Open(filePath)
    On Error GoTo 0 ' Réinitialiser la gestion des erreurs
    wk_fichier1.Activate
    Set ws_fichier2feuil1 = wk_fichier2.Worksheets("Orientations")
    
    ' Identifier la dernière ligne de la colonne A dans ws_fichier2feuil1
    lstrw = ws_fichier2feuil1.Cells(ws_fichier2feuil1.Rows.Count, 1).End(xlUp).Row
    ligne_coller = lstrw + 1
    
    ' Récupérer la ligne active dans Suivi DO
    With ws_fichier1feuil1
      i = ActiveCell.Row
      
      ' Copier-coller les cellules
      ws_fichier2feuil1.Cells(ligne_coller, 1).Value = .Cells(i, 1).Value ' Colonne A
      ws_fichier2feuil1.Cells(ligne_coller, 2).Value = .Cells(i, 2).Value ' Colonne B
      ws_fichier2feuil1.Cells(ligne_coller, 3).Value = .Cells(i, 10).Value ' Colonne J
      ws_fichier2feuil1.Cells(ligne_coller, 4).Value = .Cells(i, 26).Value ' Colonne Z
      ws_fichier2feuil1.Cells(ligne_coller, 5).Value = .Cells(i, 12).Value ' Colonne L
    End With
    ' Sauvegarder et fermer le fichier 2
    wk_fichier2.Close SaveChanges:=True
    
    MsgBox "Données copiées et fichier enregistré avec succès."
    
    Exit Sub
    
ErrorHandler:
    MsgBox "Erreur lors de l'ouverture du fichier : " & Err.Description
End Sub

Daniel


0
Le Pingou Messages postés 12175 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 30 octobre 2024 1 448
31 juil. 2024 à 18:15

Bonjour,

Petite remarque, une des deux instructions est en trop

Sub test()
Sub commission_test2()
0
danielc0 Messages postés 1232 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 29 octobre 2024 140 > Le Pingou Messages postés 12175 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 30 octobre 2024
31 juil. 2024 à 18:20

Exact ! en plus, j'avais deux "end sub" et ça n'a pas fait tilt ! Merci.

Daniel

0
John97600 Messages postés 7 Date d'inscription mercredi 24 juillet 2024 Statut Membre Dernière intervention 2 août 2024
2 août 2024 à 08:51

Bonjour Daniel,

Merci à toi ça fonctionne !!

J'ai comparé la macro de vaanbasch et la tienne, tu rajoutes notamment

With ws_fichier1feuil1

juste avant "i = ActiveCell.Row" et j'ai l'impression que cela change tout !

Merci à tous pour votre aide précieuse :)

0
danielc0 Messages postés 1232 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 29 octobre 2024 140 > John97600 Messages postés 7 Date d'inscription mercredi 24 juillet 2024 Statut Membre Dernière intervention 2 août 2024
2 août 2024 à 09:43

Bonjour à tous,

En fait, le "With" sert à simplifier la syntaxe :

    With ws_fichier1feuil1
      i = ActiveCell.Row
      
      ' Copier-coller les cellules
      ws_fichier2feuil1.Cells(ligne_coller, 1).Value = .Cells(i, 1).Value ' Colonne A
      ws_fichier2feuil1.Cells(ligne_coller, 2).Value = .Cells(i, 2).Value ' Colonne B
      ws_fichier2feuil1.Cells(ligne_coller, 3).Value = .Cells(i, 10).Value ' Colonne J
      ws_fichier2feuil1.Cells(ligne_coller, 4).Value = .Cells(i, 26).Value ' Colonne Z
      ws_fichier2feuil1.Cells(ligne_coller, 5).Value = .Cells(i, 12).Value ' Colonne L
    End With

au lieu de :

    ws_fichier2feuil1.Cells(ligne_coller, 1).Value = ws_fichier1feuil1.Cells(i, 1).Value ' Colonne A
    ws_fichier2feuil1.Cells(ligne_coller, 2).Value = ws_fichier1feuil1.Cells(i, 2).Value ' Colonne B
    ws_fichier2feuil1.Cells(ligne_coller, 3).Value = ws_fichier1feuil1.Cells(i, 10).Value ' Colonne J
    ws_fichier2feuil1.Cells(ligne_coller, 4).Value = ws_fichier1feuil1.Cells(i, 26).Value ' Colonne Z
    ws_fichier2feuil1.Cells(ligne_coller, 5).Value = ws_fichier1feuil1.Cells(i, 12).Value ' Colonne L
    

Ce que j'ai surtout ajouté, c'est :

wk_fichier1.Activate

"Activecell" se réfère au classeur actif. Cette ligne permet d'afficher le premier classeur qui était passé en arrière-plan avec l'ouverture du second fichier.

Daniel

1
Le Pingou Messages postés 12175 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 30 octobre 2024 1 448
1 août 2024 à 15:01

Bonjour John97600,

Dans l’attente de votre retour j’ai créé 2 classeurs fictifs (selon ce que j’ai compris).

Placer les 2 classeurs dans le même dossier (par exemple sur le Bureau).

Dans la macro [Sub commission_test2() ] sous ' Définir le chemin du fichier
chemin = "D:\Bureau\John97600\Point candidature.xlsx"] veuillez indiquer le chemin correct

A vous la découverte.

Le lien : https://www.cjoint.com/c/NHbnbPkXxEZ


0