Bloqué sur une macro
Résoludanielc0 Messages postés 1856 Date d'inscription Statut Membre Dernière intervention -
- Bloqué sur une macro
- Code puk bloqué - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Téléphone bloqué code verrouillage - Guide
- Pavé tactile bloqué - Guide
- Compte gmail bloqué - Guide
8 réponses
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é. :)
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")
Bonjour,
Petite intrusion, avec le fichier comme exemple il serait plus favorable pour vous venir en aide...!
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 ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionBonjour,
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...!
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é.
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
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
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
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 :
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 :)
Bonjour,
lstrw
récupère la dernière ligne utilisée dans la colonne A de la feuilleOrientations.
ligne_coller
est défini commelstrw + 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 dansOrientations
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.
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"
Ensuite, la 2ème macro pour copier les données de "DS2024" vers l'autre classeur "Point candidature" dans la feuille "Orientations" :
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 :
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.
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 :
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 :
J'ai tenté de remplacer par :
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...
Je comprend la situation. Il faudrait le fichier comme exemple :)