[excel] copie et insertion de colonnes

copie et insertion de colonnes [excel] - VB/VBA/VBS - Programmation

Marsh Posté le 16-06-2004 à 17:08:22    

Bonjour,
 
Dans ma base de données, j'ai un certain nombre d'applications (minimum 1)
J'ai un fichier excel, avec un tableau qui au départ contient 2 colonnes: une colonne (disons D) pour la 1ère appli ( on est sûr qu'il y en a une) et une colonne "total" qui doit être la dernière colonne du tableau.
 
Dans un script VB, je parcours ma BD, pour la 1ère appli trouvée, je remplis la colonne D. Pour chacune des autres appli trouvées, il me faut copier la colonne D (pour garder la mise en forme + formules) et l'insérer entre D et la colonne  "Total".  
 
Je n'arrive pas à faire cela  :(  
 
J'ai comme piste:  
feuille_excel.Columns("D:D" ).Select.copy pour sélectionner la colonne et la copier
 
Mais pour l'insertion, je n'arrive pas à trouver comment faire?  
 
Merci de votre aide!  :hello:  

Reply

Marsh Posté le 16-06-2004 à 17:08:22   

Reply

Marsh Posté le 16-06-2004 à 17:46:05    

myway a écrit :

Bonjour,
 
Dans ma base de données, j'ai un certain nombre d'applications (minimum 1)
J'ai un fichier excel, avec un tableau qui au départ contient 2 colonnes: une colonne (disons D) pour la 1ère appli ( on est sûr qu'il y en a une) et une colonne "total" qui doit être la dernière colonne du tableau.
 
Dans un script VB, je parcours ma BD, pour la 1ère appli trouvée, je remplis la colonne D. Pour chacune des autres appli trouvées, il me faut copier la colonne D (pour garder la mise en forme + formules) et l'insérer entre D et la colonne  "Total".  
 
Je n'arrive pas à faire cela  :(  
 
J'ai comme piste:  
feuille_excel.Columns("D:D" ).Select.copy pour sélectionner la colonne et la copier
 
Mais pour l'insertion, je n'arrive pas à trouver comment faire?  
 
Merci de votre aide!  :hello:


Bon, j'ai trouvé en faisant une macro excel et en regardant le code généré (j'y avais pas pensé :ange: )
voici le code (si jamais ça peut aider qqn par la suite)

Code :
  1. feuille_excel.Columns("D:D" ).Select
  2.     Selection.Copy
  3.     feuille_excel.Columns(colonne_ou_copier & ":" & colonne_ou_copier).Select
  4.     Selection.Insert Shift:=xlToRight


colonne_ou_copier est calculé suivant le numéro de l'application à insérer (colonne_départ (=D) + n°_appli)
 
Désolée du dérangement!  :hello:

Reply

Marsh Posté le 16-06-2004 à 19:18:28    

myway a écrit :


Code :
  1. feuille_excel.Columns("D:D" ).Select
  2.     Selection.Copy
  3.     feuille_excel.Columns(colonne_ou_copier & ":" & colonne_ou_copier).Select
  4.     Selection.Insert Shift:=xlToRight


colonne_ou_copier est calculé suivant le numéro de l'application à insérer (colonne_départ (=D) + n°_appli)
 
Désolée du dérangement!  :hello:


Finalement je n'ai pas totalement résolu mon pb, car je voudrais ne pas copier les valeurs qui sont dans la colonne copiée.Par contre, je voudrais conserver les formules... C'est possible ça?  :??:  
 
 :hello:

Reply

Marsh Posté le 17-06-2004 à 08:11:10    

Pourquoi tu ne reprogrammes pas ta colonne "Total" à chaque fois ? Je suppose que chaque cellule de cette colonne est une somme, facile à programmer. Ca t'eviterait toute cette gymnastique d'insertion....


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
Reply

Marsh Posté le 17-06-2004 à 12:13:13    

Code :
  1. Columns("ref Colonne ou inserer" ).Select
  2.     Selection.Insert Shift:=xlToRight
  3.     Columns("ref Colonne modèle" ).Select
  4.     Selection.Copy
  5.     Columns(colonne_ou_copier & ":" & colonne_ou_copier).Select
  6.     Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:= _
  7.         False, Transpose:=False
  8.     Application.CutCopyMode = False

Reply

Marsh Posté le 17-06-2004 à 15:00:34    

Merci pour l'aide de vous tous, ça marche très bien  :love:  
 
Je rencontre un autre pb  :(  
J'ai créé et ouvert une feuille excel avec 2 onglets.Je m'intéresse pour commencer au 1er onglet "correction". Voilà la code.

Code :
  1. 'Déclaration des variables
  2.     Dim appExcel As Excel.Application 'Application Excel
  3.     Dim wbExcel As Excel.Workbook 'Classeur Excel
  4.     Dim wsExcel As Excel.Worksheet 'Feuille Excel
  5.     'Ouverture de l'application
  6.     Set appExcel = CreateObject("Excel.Application" )
  7.     'Ouverture d'un fichier Excel
  8.     Set wbExcel = appExcel.Workbooks.Open(chemin_report & annee_courant & mois_entier & jour_entier & heure_entiere & minute_entiere & seconde_entiere & nom_report & nom_cluster & "_from_" & li_annee_analyse & li_mois_analyse_entier & ".xls" )
  9.     'wsExcel correspond à la feuille correction
  10.     Set wsExcel = wbExcel.Worksheets("correction" )


J'appelle ensuite une fonction pour copier la colonne et l'insérer là où je veux:

Code :
  1. Call NouvelleColonne((premiere_ligne - 1), "D", col_ou_copier, wsExcel)
  2. Sub NouvelleColonne(ligne_debut As Integer, colonne_a_copier As String, colonne_ou_copier As String, feuille_excel As Excel.Worksheet)
  3.     feuille_excel.Columns(colonne_a_copier & ":" & colonne_a_copier).Select
  4.     Selection.Copy
  5.     feuille_excel.Columns(colonne_ou_copier & ":" & colonne_ou_copier).Select
  6.     Selection.Insert Shift:=xlToRight
  7.     ' effacement des valeurs de la colonne copiée
  8.     Dim ligne_fin As Integer
  9.     ligne_fin = ligne_debut + 12
  10.     Range(colonne_ou_copier & ligne_debut & ":" & colonne_ou_copier & ligne_fin).Select
  11.     Application.CutCopyMode = False
  12.     Selection.ClearContents
  13. End Sub


Quand j'exécute, j'ai une erreur à la 1ère ligne de la fonction: "select methode of Range class failed" ..
 
Toutes mes variables sont bonnes. La seule que je ne peux pas vérifier, c'est feuille_excel, et je pense que ça vient de là. Mais pourquoi ? :??:  
 
Merci!  :hello:  
 
P.S: vous verrez que j'ai pas tout à fait suivi ce que vous m'avez conseillé, mais ça correspond mieux à ce que je veux (vider que qqs cellules)


Message édité par Myway le 17-06-2004 à 15:00:57
Reply

Marsh Posté le 17-06-2004 à 15:20:39    

Pour faire plus simple (j'ai avancé encore dans mes tests), la ligne

Code :
  1. wsExcel.Columns("D:D" ).Select


placée juste après la déclaration et l'ouverture de l'objet excel (voir 1ère partie de code du post précédent) ne marche pas! (erreur : select methode of Range class failed)
 
Une idée ? :??:  
 :hello:

Reply

Marsh Posté le 17-06-2004 à 15:56:35    

Je pense qu'il faut que la feuille soit active avant de sélectionner une colonne.
wsExcel.Activate


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
Reply

Marsh Posté le 17-06-2004 à 16:12:42    

JihemAir a écrit :

Je pense qu'il faut que la feuille soit active avant de sélectionner une colonne.
wsExcel.Activate


Merci beaucoup!
Pourtant c'est bizarre, j'ai un autre script quasiment identique, et là, pas besoin du .activate... Enfin bon, ça marche, c'est l'essentiel!
 
Encore merci!  :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed