Bloqué sur une macro
Résoludanielc0 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
- Bloqué sur une macro
- Code puk bloqué - Guide
- Uptobox bloqué - Accueil - Guide services en ligne
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Comment savoir si on est bloqué sur messenger - Guide
- Macro word - Guide
8 réponses
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é. :)
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")
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...
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
29 juil. 2024 à 19:14
Bonjour,
Petite intrusion, avec le fichier comme exemple il serait plus favorable pour vous venir en aide...!
31 juil. 2024 à 12:28
Bonjour ;)
Exactement !
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 ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question29 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...!
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 :)
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é.
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
31 juil. 2024 à 18:15
Bonjour,
Petite remarque, une des deux instructions est en trop
Sub test() Sub commission_test2()
31 juil. 2024 à 18:20
Exact ! en plus, j'avais deux "end sub" et ça n'a pas fait tilt ! Merci.
Daniel
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 :)
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 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
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 :
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 :)
27 juil. 2024 à 21:50
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.
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"
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.
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 :
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...
31 juil. 2024 à 12:47
Je comprend la situation. Il faudrait le fichier comme exemple :)