Pb d'exécution
Résolu
Cheribay
-
Cheribay -
Cheribay -
A voir également:
- Pb d'exécution
- Le service spouleur d'impression local n'est pas en cours d'exécution - Guide
- Net user des erreurs ont affecté l'exécution de la commande - Forum Windows
- Au démarrage de l’ordinateur, le d' se lance. il permet l’exécution des logiciels applicatifs et gère l’utilisation des ressources matérielles (mémoire, processeur, périphériques). - Forum Alimentation PC
- Il permet l’exécution des logiciels applicatifs et gère l’utilisation des ressources matérielles (mémoire, processeur, périphériques). ✓ - Forum Windows 10
- Problème de périphériques - Forum Pilotes (drivers)
10 réponses
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)
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. 😊
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
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
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...
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
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.
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
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. 😊