Pb d'exécution
Résolu/Fermé
A voir également:
- Pb d'exécution
- Erreur d'execution 1004 ✓ - Forum VB / VBA
- Le service sans fil windows n'est pas en cours d'exécution sur cet ordinateur - Forum WiFi
- Microsoft excel attend la fin de l'exécution d'une action ole d'une autre application ✓ - Forum Word
- Erreur d'exécution 13 incompatibilité de type ✓ - Forum Programmation
- Net user des erreurs ont affecté l'exécution de la commande - Forum Windows
10 réponses
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 716
24 août 2016 à 09:25
24 août 2016 à 09:25
Bonjour,
Si tu veux trouver la bonne colonne de copy il te faut qualifier toutes tes références, car ce n'était pas "Les 2 dernières parenthèses fermantes sont en trop ! " :
Si tu veux trouver la bonne colonne de copy il te faut qualifier toutes tes références, car ce n'était pas "Les 2 dernières parenthèses fermantes sont en trop ! " :
.Columns(Col).Copy WbkColle.Sheets("BDD_2016").Cells(1, WbkColle.Sheets("BDD_2016").Cells(1, Cells.Columns.Count).End(xlToLeft).Column + 1)
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 716
23 août 2016 à 12:01
23 août 2016 à 12:01
Bonjour,
Sans doute comme ceci :
Sans doute comme ceci :
.Columns(Col).Copy WbkColle.Sheets("BDD_2016").Cells(1, Cells.Columns.Count).End(xlToLeft).Column) + 1)
Bonjour Gbinforme et merci pour ton retour.
J'ai intégré la modification mais une erreur se lève avec une fin de compilation attendue (fin d'instruction) sur l'avant dernière parenthèse
.Columns(Col).Copy WbkColle.Sheets("BDD_2016").Cells(1, Cells.Columns.Count).End(xlToLeft).Column) + 1)
Je n'ai pas réussi à trouver...
J'ai intégré la modification mais une erreur se lève avec une fin de compilation attendue (fin d'instruction) sur l'avant dernière parenthèse
.Columns(Col).Copy WbkColle.Sheets("BDD_2016").Cells(1, Cells.Columns.Count).End(xlToLeft).Column) + 1)
Je n'ai pas réussi à trouver...
Merci beaucoup pour ton aide Albkan !
J'ai désormais une erreur l'indice n’appartient pas à la sélection :-(
pourtant ça me paraît pas mal.
J'ai désormais une erreur l'indice n’appartient pas à la sélection :-(
pourtant ça me paraît pas mal.
Sub ImporterColonnes() Dim Fichier, WbkCopy As Workbook, WbkColle As Workbook Dim Colonnes(), Col As Integer, Resultat As Variant Set WbkColle = ThisWorkbook Colonnes = Array("header1", "header2") Workbooks("requetesql_CA.xlsx").Activate Set WbkCopy = ActiveWorkbook With WbkCopy.Sheets("MACHIN") ' For Col = 1 To .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column Resultat = Application.Match(.Cells(1, Col), Colonnes, 0) If Not IsError(Resultat) Then .Columns(Col).Copy WbkColle.Sheets("BDD_2016").Cells(1, Cells.Columns.Count).End(xlToLeft).Column + 1 End If Next Col End With WbkCopy.Close Set WbkCopy = Nothing Set WbkColle = Nothing End Sub
Tu as très bien fait d'indiquer le message d'erreur qui est affiché, mais sur
quelle ligne ça se produit ? Quand tu cliques sur le bouton « Débogage »
et que ça va sur la fenêtre du module VBA en cause, quelle est la ligne
en jaune ? Attention : ça arrive souvent, mais ce n'est pas forcé !
Vérifie bien le nom des 2 feuilles utilisées : "MACHIN" et "BDD_2016" ;
vérifie aussi le nom des colonnes "header1" et "header2".
Si ton problème est réglé, merci d'aller en haut de page pour cliquer
sur « Marquer comme résolu ». À te lire. 😊
Ajout : vérifie bien aussi cette instruction :
Workbooks("requetesql_CA.xlsx").Activate
Le nom "requetesql_CA" est-il exact ? S'il faut une extension, je pense
que ce serait plutôt ".xlsm" mais je crois plutôt qu'il n'en faut pas :
Workbooks("requetesql_CA").Activate
Je rappelle que ton erreur d'indice apparaît lorsque l'élément
d'un tableau ou celui d'une collection n'existe pas.
À te lire. 😊
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
>
Utilisateur anonyme
24 août 2016 à 07:40
24 août 2016 à 07:40
Bonjour à tous,
Juste au passage :
ne renvoie pas un Objet Range (nécessaire pour coller), mais un Integer (le numéro de la première colonne vide)...
Juste au passage :
WbkColle.Sheets("BDD_2016").Cells(1, Cells.Columns.Count).End(xlToLeft).Column + 1
ne renvoie pas un Objet Range (nécessaire pour coller), mais un Integer (le numéro de la première colonne vide)...
Utilisateur anonyme
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
Modifié par albkan le 24/08/2016 à 15:23
Modifié par albkan le 24/08/2016 à 15:23
Bonjour pijaku,
C'est exact ; je pensais que l'erreur de syntaxe venait juste de parenthèses
non appariées ; merci pour ta correction ! Cordialement. 😊
C'est exact ; je pensais que l'erreur de syntaxe venait juste de parenthèses
non appariées ; merci pour ta correction ! Cordialement. 😊
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour à tous et merci beaucoup pour vos retours instructifs.
Sur la base de ce que vous m'avez fait comme retour, j'ai donc légèrement rectifié la macro.
La bonne nouvelle c'est qu'elle fonctionne !!
La mauvaise c'est qu'elle ne donne pas ce que je veux... En fait il ne se passe rien :-)
J'ai contrôlé les noms de fichier. Je pense que je ne suis pas encore au niveau de ce type de macro et vous remercie pour votre aide.
Sur la base de ce que vous m'avez fait comme retour, j'ai donc légèrement rectifié la macro.
La bonne nouvelle c'est qu'elle fonctionne !!
La mauvaise c'est qu'elle ne donne pas ce que je veux... En fait il ne se passe rien :-)
J'ai contrôlé les noms de fichier. Je pense que je ne suis pas encore au niveau de ce type de macro et vous remercie pour votre aide.
Sub ImporterColonnes() Dim Fichier, WbkCopy As Workbook, WbkColle As Workbook Dim Colonnes(), Col As Integer, Resultat As Variant Set WbkColle = Workbooks("FICHIER_QUI_RECEPTIONNE.xlsx") Colonnes = Array("header1", "header2") Set WbkCopy = Workbooks("FICHIER_SOURCE.xlsx") With WbkCopy.Sheets("ONGLET_SOURCE") For Col = 1 To .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column Resultat = Application.Match(.Cells(1, Col), Colonnes, 0) If Not IsError(Resultat) Then .Columns(Col).Copy WbkColle.Sheets("ONGLET_DESTINATION").Cells(1, WbkColle.Sheets("ONGLET_DESTINATION").Cells(1, Cells.Columns.Count).End(xlToLeft).Column + 1) End If Next Col End With Set WbkCopy = Nothing Set WbkColle = Nothing End Sub
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
24 août 2016 à 16:17
24 août 2016 à 16:17
Bonjour,
sous l'éditeur VBA :
1- affiche la fenêtre d'exécution (Ctrl+G)
2- lance ce test :
3- à la fin regarde dans la fenêtre d'exécution et dis nous ce qui y est inscrit
sous l'éditeur VBA :
1- affiche la fenêtre d'exécution (Ctrl+G)
2- lance ce test :
Sub Test() Dim Fichier, WbkCopy As Workbook, WbkColle As Workbook Dim Colonnes(), Col As Integer, Resultat As Variant, Cpt As Long Set WbkColle = Workbooks("FICHIER_QUI_RECEPTIONNE.xlsx") Colonnes = Array("header1", "header2") Set WbkCopy = Workbooks("FICHIER_SOURCE.xlsx") With WbkCopy.Sheets("ONGLET_SOURCE") For Col = 1 To .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column Resultat = Application.Match(.Cells(1, Col), Colonnes, 0) If Not IsError(Resultat) Then Cpt = Cpt + 1: Debug.Print Resultat Next Col End With If Cpt = 0 Then Debug.Print "aucune colonne ne s'appelle header" Set WbkCopy = Nothing Set WbkColle = Nothing End Sub
3- à la fin regarde dans la fenêtre d'exécution et dis nous ce qui y est inscrit
Cheribay
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
24 août 2016 à 16:33
24 août 2016 à 16:33
Pijaku,
J'ai exécuté le test et voici le résultat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
J'ai bien 18 colonnes dont je dois recopier le contenu.
J'ai exécuté le test et voici le résultat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
J'ai bien 18 colonnes dont je dois recopier le contenu.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
24 août 2016 à 18:07
24 août 2016 à 18:07
Comment résultat peut il être égal à 18 alors que l'array colonne n'a que 2 valeurs?
Désolé mais pour ne pas encombrer la macro, je n'avait mis que 2 array colonne afin d'éviter la répétition des 18...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
24 août 2016 à 18:35
24 août 2016 à 18:35
y a t'il autre chose? Fais nous un copié-collé de tout ton code...
Et, au passage, verifie que tu n'as as inversé les noms de tes classeurs et/ou de tes feuilles...
--
Et, au passage, verifie que tu n'as as inversé les noms de tes classeurs et/ou de tes feuilles...
--
Non Pijaku, il n'y a rien d'autre.
Je suis d'autant plus désolé que je viens de tirer ma barre et il se trouve que les copies sont bien réalisées mais en ajout d'entête à la suite des 18 array.
Hors ce que je souhaitais c'est qu'en fonction de l'entête de mon fichier cible, les données présentes dans la colonne ayant la même entête dans mon fichier source soient recopiées. Les entêtes n'ayant pas de correspondance voient leur colonne laissée vide.
Je suis d'autant plus désolé que je viens de tirer ma barre et il se trouve que les copies sont bien réalisées mais en ajout d'entête à la suite des 18 array.
Hors ce que je souhaitais c'est qu'en fonction de l'entête de mon fichier cible, les données présentes dans la colonne ayant la même entête dans mon fichier source soient recopiées. Les entêtes n'ayant pas de correspondance voient leur colonne laissée vide.
Sub ImporterColonnes() Dim Fichier, WbkCopy As Workbook, WbkColle As Workbook Dim Colonnes(), Col As Integer, Resultat As Variant Set WbkColle = Workbooks("FICHIER_QUI_RECEPTIONNE.xlsx") Colonnes = Array("NOM", "PRENOM", "ADRESSE", "CP", "VILLE", "PAYS", "TEL", "FAX", "MAIL", "IM", "POR", "IG", "PREL", "DE", "RE", "TH", "clot", "Pai") Set WbkCopy = Workbooks("FICHIER_SOURCE.xlsx") With WbkCopy.Sheets("ONGLET_SOURCE") For Col = 1 To .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column Resultat = Application.Match(.Cells(1, Col), Colonnes, 0) If Not IsError(Resultat) Then .Columns(Col).Copy WbkColle.Sheets("ONGLET_CIBLE").Cells(1, WbkColle.Sheets("ONGLET_CIBLE").Cells(1, Cells.Columns.Count).End(xlToLeft).Column + 1) End If Next Col End With
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
24 août 2016 à 19:02
24 août 2016 à 19:02
Donc, rien à voir avec la demande initiale. Si quelqu'un veut bien t'aider ce soir, pas de souci, sinon faudra que t'attendes demain que j'ai accès à excel
--
--
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
25 août 2016 à 07:56
25 août 2016 à 07:56
Bonjour,
Des précisions :
Tu as un fichier A contenant les 18 entêtes de colonnes de ton array (nom, prénom, etc). Ce fichier A contient des données que tu veux coller dans un fichier B qui contient également des données. ton fichier B contient, quant à lui X colonnes dont toutes celles du fichier A plus d'autres qui doivent donc rester vide.
C'est bien cela?
Des précisions :
Tu as un fichier A contenant les 18 entêtes de colonnes de ton array (nom, prénom, etc). Ce fichier A contient des données que tu veux coller dans un fichier B qui contient également des données. ton fichier B contient, quant à lui X colonnes dont toutes celles du fichier A plus d'autres qui doivent donc rester vide.
C'est bien cela?
Bonjour et tout d'abord désolé pour le manque d'explication dans ma demande initiale qui vous a fait perdre du temps.
Pijaku, c'est exactement cela.
Pour plus de précision, le fichier A est le FICHIER SOURCE de ma requête et le fichier B mon FICHIER CIBLE qui contient les même colonne que la A plus d'autres colonnes.
Pijaku, c'est exactement cela.
Pour plus de précision, le fichier A est le FICHIER SOURCE de ma requête et le fichier B mon FICHIER CIBLE qui contient les même colonne que la A plus d'autres colonnes.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
25 août 2016 à 08:50
25 août 2016 à 08:50
ET tu lances la macro depuis un troisième classeur?
Cheribay
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
25 août 2016 à 08:56
25 août 2016 à 08:56
Non depuis mon classeur cible.
Je n'ai que les fichiers source et cible d'ouvert.
Je n'ai que les fichiers source et cible d'ouvert.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
>
Cheribay
25 août 2016 à 08:57
25 août 2016 à 08:57
Pourquoi ton classeur cible, s'il contient des macros, s'appelle : "FICHIER_QUI_RECEPTIONNE.xlsx"
xlsm non?
Soit précis!
...stp...
xlsm non?
Soit précis!
...stp...
Cheribay
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
25 août 2016 à 09:11
25 août 2016 à 09:11
Et bien mes macros sont dans mon classeur de macros personnel pas dans mes fichiers.
Je n'ai pas de macro sur les fichiers ouverts
Je n'ai pas de macro sur les fichiers ouverts
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
>
Cheribay
25 août 2016 à 09:16
25 août 2016 à 09:16
Ok.
Alors voici :
Lis bien les commentaires (lignes en vert)
Alors voici :
Lis bien les commentaires (lignes en vert)
Option Explicit Sub ImporterColonnes() Dim WbkCopy As Workbook, WbkColle As Workbook, RngAcopier As Range Dim Colonnes(), Col As Integer, DL As Long, LigneOuColler As Long, ColOuColler As Integer 'J'ai un fichier A qui contient des données Set WbkCopy = Workbooks("FICHIER_SOURCE.xlsx") 'J'ai un fichier B Qui doit recevoir ces données Set WbkColle = Workbooks("FICHIER_QUI_RECEPTIONNE.xlsx") 'il doit les recevoir, après les données déjà présentes, donc dans sa première ligne vide With WbkColle.Sheets("ONGLET_DESTINATION") LigneOuColler = .UsedRange.Rows.Count + 1 End With 'le fichier B contient toutes les colonnes du fichier A, mais pas aux mêmes endroits 'on liste donc les colonnes à copier Colonnes = Array("NOM", "PRENOM", "ADRESSE", "CP", "VILLE", "PAYS", "TEL", "FAX", "MAIL", "IM", "POR", "IG", "PREL", "DE", "RE", "TH", "clot", "Pai") 'dans le classeur A, feuil source With WbkCopy.Sheets("ONGLET_SOURCE") 'on détermine la dernière ligne des plages à copier DL = .UsedRange.Rows.Count 'on boucle sur toutes les colonnes For Col = 1 To .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column 'on choisit la plage à copier (pas de colonne entière) Set RngAcopier = .Range(.Cells(2, Col), .Cells(DL, Col)) 'on repère la colonne portant la même entête dans le fichier B ColOuColler = WbkColle.Sheets("ONGLET_DESTINATION").Rows(1).Cells.Find(.Cells(1, Col), lookat:=xlWhole).Column 'copié/collé RngAcopier.Copy WbkColle.Sheets("ONGLET_DESTINATION").Cells(LigneOuColler, ColOuColler) Next Col End With 'libération de la mémoire Set RngAcopier = Nothing Set WbkCopy = Nothing Set WbkColle = Nothing End Sub
24 août 2016 à 15:23
C'est exact ; je pensais que l'erreur de syntaxe venait juste de parenthèses
non appariées ; merci pour ta correction ! Cordialement. 😊
@Cheribay : désolé de t'avoir donné une mauvaise information ;
ton problème sera sûrement réglé avec la présente solution
de gbinforme. Cordialement. 😊
24 août 2016 à 15:46