gros fichier excel copier et inserer des lignes

gros fichier excel copier et inserer des lignes - VB/VBA/VBS - Programmation

Marsh Posté le 17-07-2009 à 15:06:15    

Bonjour,  
Je suis perdu en Angleterre au milieu d'anglais qui ne peuvent pas m'aider et sur un clavier QWERTY, j'aurai besoin d'un sauveur.
 
Je vous explique aux mieux la situation, j' ai un gros fichier Excel avec 3 colonnes A, B et C et 785 lignes de la ligne 2 a 787 avec du texte et des chiffres, je souhaite pour chaque ligne contenant des informations insérer 7 lignes en dessous et copier le contenue de la premiere ligne et ceux-ci pour les trois colonnes. Le mieux je pense etant de copier toute la ligne.
Pour le moment je fais tout manuellement, c'est a dire que je selectionne la ligne entiere je la copie puis je fais inserer les cellules copier et cela 7 fois ca me prend un temps monstres.  
je suis oblige d'inserer les lignes a coller parce-qu'en dessous de la ligne que je veux copier 7 fois il y a bien sur d'autres lignes avec des informations dedans que je ne veux pas effacer et que d'ailleurs je veux aussi copier et inserer 7 fois, etc..
 
En clair, je veux juste inserer le contenu de la premiere ligne 7 fois entre la 1ere ligne et la seconde, puis inserer 7 fois le contenue de la seconde ligne entre la seconde ligne et la troisieme ligne, puis faire ca pour les 784 lignes que j'ai au depart ce qui va me donner 784 lignes 8 fois donc un fichier de 6272 entré a la fin.
 
 
 
J'ai bien essayer de faire une macro avec le bouton enregistrer mais mon niveau et vraiment tres tres bas pour faire des macros, etVBA n'en parlons pas. Mais je suis sur que quelqu'un peu me proposer une solution, et si possible m'expliquer comment utiliser la solution car j'ai essayer des progammes VBA trouver sur des forums correspondants avec a peu pres le meme probleme mais aucune solution ne correspond vraiment et n'ont a vrai dire pas bien fonctionner.  
 
Bref si une ame charitable voulez se donner la peine de m'aider, je gagnerai un temps precieux car j'ai d'autres feuilles a traiter de la meme maniere.  
 
Merci d'avance et promis des mon retour en France je m'achete le VBA pour les nuls :D

Reply

Marsh Posté le 17-07-2009 à 15:06:15   

Reply

Marsh Posté le 17-07-2009 à 15:19:18    

Si tu veux pas mettre les mains dans le VBA ça va être compliqué... Va falloir que tu t'y mettes. Déjà enregistre tes actions en macro et regarde le code correspondant. Après tu fais une boucle pour parcourir ton fichier et c'est à peu près fini.

Reply

Marsh Posté le 17-07-2009 à 15:53:54    

On m'a conseille de partir de la derniere ligne et de remonter sa serait plus simple puisque le numero de la ligne du dessus ne change pas apres avoir coller les lignes.
Donc j'ai enregistrer ce programme avec les macros mais le probleme et de faire que cette operation remonte jusqu'au debut du fichier
 
Sub Macro1()  
'  
' Macro1 Macro  
' Macro recorded 17/07/2009 by test  
'  
' Keyboard Shortcut: Ctrl+z  
'  
ActiveWindow.SmallScroll Down:=9  
Rows("1052:1052" ).Select  
Selection.Copy  
Selection.Insert Shift:=xlDown  
Rows("1052:1053" ).Select  
Application.CutCopyMode = False  
Selection.Copy  
Selection.Insert Shift:=xlDown  
Rows("1052:1055" ).Select  
Application.CutCopyMode = False  
Selection.Copy  
Selection.Insert Shift:=xlDown  
End Sub

Reply

Marsh Posté le 17-07-2009 à 15:58:32    

En passant CTRL+Z pour un raccourci macro c'est moyen vu que c'est la raccourci pour annuler.

 

Pourquoi t'as des n° de ligne en 1052 et quelques alors que tu as dit que ça va "de la ligne 2 a 787" ?

 

Edit:

 

Mais sinon teste un truc du genre :

Code :
  1. Dim i as Integer
  2. For i=[numéro de ta dernière ligne] To [numéro de ta 1ere ligne] Step -1
  3.  Rows(i & ":" & i).Select  
  4.  Selection.Copy  
  5.  Selection.Insert Shift:=xlDown  
  6.  Rows(i & ":" & (i+1)).Select  
  7.  Application.CutCopyMode = False  
  8.  Selection.Copy  
  9.  Selection.Insert Shift:=xlDown  
  10.  Rows(i & ":" & (i+3)).Select  
  11.  Application.CutCopyMode = False  
  12.  Selection.Copy  
  13.  Selection.Insert Shift:=xlDown  
  14. Next i


C'est moche mais bon si ça marche et que tu veux pas t'embêter...


Message édité par Deamon le 17-07-2009 à 16:03:49
Reply

Marsh Posté le 17-07-2009 à 16:00:58    

ok pour le racourci ben en fait ma derniere ligne et 1052 maintenant car j'ai commencer a copier et inserer les lignes manuellement
car il faut a tout pris que j'avance sur se travail

Reply

Marsh Posté le 17-07-2009 à 16:02:22    

Donc comme je dois reconnaitre que je suis dans l'incapicite de faire un simple programme ben je fais le robot c'est a dire que je suis moi meme le programme.

Reply

Marsh Posté le 17-07-2009 à 16:03:50    

Mais dans tous les cas merci quand meme de t'interresser a mon probleme meme si je pense qu'en fait il me reste plus que la methode manuelle vu mon niveau.
Mais bon comme on dit qui ne tente rien n'a rien

Reply

Marsh Posté le 17-07-2009 à 16:04:31    

J'ai édité mon message précédent. ;)

Reply

Marsh Posté le 17-07-2009 à 16:05:47    

oki je teste ton petit programme

Reply

Marsh Posté le 17-07-2009 à 16:14:20    

Bon ok je m'incline c'est vraiment genial
faut vraiment que j'apprenne a faire ca.

Reply

Marsh Posté le 17-07-2009 à 16:14:20   

Reply

Marsh Posté le 17-07-2009 à 16:16:47    

Ca a super bien marche tu me sauve pas la vie mais tu m'economise pas mal d'heure de ma vie pour faire autre chose.
merci beaucoup.
Je bosse en biologie et on a de plus en plus besoin de l'informatique comme dans tous les domaines mais quand je vois se qu'on peut faire a connaissant la programation c'est super cool.
Merci a toi encore

Reply

Marsh Posté le 17-07-2009 à 16:17:08    

Ca prend effectivement du temps à apprendre ça mais quand tu vois le temps que tu gagnes après en utilisant les macros plutôt que de tout faire à la main tu te rends compte que ça vaut le coup. ;)

Reply

Marsh Posté le 17-07-2009 à 16:21:50    

Oui ben comme je le disais plutot je crois que le livre de cette ete sera le VBA pour les nuls a moins que tu ne me conseille un meilleur bouquin sur le sujet

Reply

Marsh Posté le 17-07-2009 à 17:01:01    

Salut,


Option Explicit
 
Sub Tst()
Dim LastRow As Long, LastRowA As Long, LastRowB As Long, LastRowC As Long, i As Long, j As Integer
Const Pas As Long = 7
     
    LastRowA = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
    LastRowB = Feuil1.Range("B" & Rows.Count).End(xlUp).Row
    LastRowC = Feuil1.Range("C" & Rows.Count).End(xlUp).Row
     
    LastRow = Application.WorksheetFunction.Max(LastRowA, LastRowB, LastRowC)
    Application.ScreenUpdating = False
    For i = LastRow To 3 Step -1
        If Not IsEmpty(Feuil1.Range("A" & i - 1)) Then
            For j = 1 To Pas
                Feuil1.Range("A" & i).EntireRow.Insert
                Feuil1.Range("A" & i - 1 & ":C" & i - 1).Copy Feuil1.Range("A" & i)
            Next j
        End If
 
        With Application
            .CutCopyMode = False
            .StatusBar = i & " / " & LastRow
        End With
    Next i
 
    LastRowA = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
    LastRowB = Feuil1.Range("B" & Rows.Count).End(xlUp).Row
    LastRowC = Feuil1.Range("C" & Rows.Count).End(xlUp).Row
    LastRow = Application.WorksheetFunction.Max(LastRowA, LastRowB, LastRowC)
    If Not IsEmpty(Feuil1.Range("A" & LastRow)) Then
        Feuil1.Range("A" & LastRow & ":C" & LastRow).Copy Feuil1.Range("A" & LastRow + 1 & ":C" & LastRow + Pas)
    End If
 
    Application.ScreenUpdating = True
End Sub


dans la version Anglaise d'Excel Feuil1 devrait se nommer Sheet1

Reply

Marsh Posté le 17-07-2009 à 17:04:36    

Marine4980 a écrit :

Oui ben comme je le disais plutot je crois que le livre de cette ete sera le VBA pour les nuls a moins que tu ne me conseille un meilleur bouquin sur le sujet


Je ne sais pas pour les bouquins je n'ai pas appris avec des livres.

Reply

Marsh Posté le 17-07-2009 à 17:10:57    

Re, Excel pour les nuls est un bon départ pour la suite voir en premier lieu http://www.bmsltd.co.uk/ExcelProgRef/Default.htm ou http://www.bmsltd.co.uk/Excel2007ProgRef/Default.htm puis http://www.bmsltd.co.uk/ProExcelDev/Default.htm


Message édité par kiki29 le 17-07-2009 à 17:20:08
Reply

Sujets relatifs:

Leave a Replay

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