IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Copier/Coller dans un emplacement vide


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut Copier/Coller dans un emplacement vide
    Bonjour ,

    Encore jeune novice dans la programmation en VBA , ca fait une semaine que je fouille un peu partout ( peu etre pas assez certain diront .. ) .
    Dans tout les cas voici mon problème.

    J'ai plusieurs fichiers avec dates, horaires, et lieu .
    Premièrement je filtre le lieu donc ca ca va c'est pas trop compliqué .

    Ensuite je creer à coté de ce tableau les informations que je veux qui sont :
    >les horaires ( mais en décimal ( =Cellule*24 ) )
    >le jour ( texte ( cellule;"jjjj") )
    >Trimestre ( ="trim&ent((mois(cellule)-1)/3+1) )
    >Mois ( = mois(cellule) )

    Premièrement je dois réaliser cela , ensuite toute ces donnés je les copie et les coller dans un autre fichier, le fichier mère en quelque sorte.

    La j'utilise de nouveau des filtres pour garder les jours de la semaine , je filtre le mois et j'envoi ces horaires là dans une feuille spécifique à ce mois

    Globalement je veux récuperer les donnés dans plusieurs feuilles

    Comme : Janvier en semaine
    Fevrier en semaine
    ....

    Puis d'autre feuille sous le meme modèle mais

    Janvier le week(end
    Fevrier le week-end
    ....

    Puis

    Trimestre 1 semaine
    Trim 1 week
    Trim 2 semaine
    ...

    Et enfin Semestre 1 semaine
    Semestre 1 week end
    Semestre 2 semaine
    Semestre 2 week-end.

    Et dans chacune de ces feuilles j'ai des tableau en place et des graph pret à analysé les horaires sur la colonne A.


    Et le soucis c'est que je veux qu'à chaque fois que je recupere un nouveau fichier , il fasse le meme boulot de trie et envoie les donnés A la suite dans les feuilles concernés et non par dessus les infos precedentes .

    Voici deux fichiers parmis tant d'autres

    http://www.cijoint.fr/cjlink.php?fil...cijNSXcqUJ.xls
    http://www.cijoint.fr/cjlink.php?fil...cijcJfxlla.xls

    Et le fichier mère

    http://www.cijoint.fr/cjlink.php?fil...cijwyTbdwg.xls

    Pour le moment j'ai ca , mais je trouve que c'est du bricolage ( heureusement que l'enregistreur est là .. )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Sub Transposition() 
    ' 
    Range("A6:I600").Select 
    Range("A600").Activate 
    Selection.AutoFilter 
    Selection.AutoFilter Field:=6, Criteria1:="PORTAIL MONTANT DROIT" 
    Range("B8:E600").Select 
    Selection.Copy 
    Windows("Classeur1.xls").Activate 
    Range("E2").Select 
    ActiveSheet.Paste 
    Windows("Ronde1.xls").Activate 
    Range("A8:A600").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Windows("Classeur1.xls").Activate 
    Range("I2").Select 
    ActiveSheet.Paste 
    Range("A2").Select 
    Application.CutCopyMode = False 
    ActiveCell.FormulaR1C1 = "=RC[4]*24" 
    Range("B2").Select 
    ActiveCell.FormulaR1C1 = "=TEXT(RC[7],""jjjj"")" 
    Range("C2").Select 
    ActiveCell.FormulaR1C1 = "=""trim""&INT((MONTH(RC[6])-1)/3+1)" 
    Range("D2").Select 
    ActiveCell.FormulaR1C1 = "=MONTH(RC[5])" 
    Range("A2:D2").Select 
    Selection.AutoFill Destination:=Range("A2:D46"), Type:=xlFillDefault 
     
    Range("A2:D46").Select 
    Selection.Copy 
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ 
    False, Transpose:=False 
    Range("E2:I600").Select 
    Application.CutCopyMode = False 
    Selection.ClearContents 
     
    Range("E2:I600").Select 
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone 
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone 
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone 
    Selection.Borders(xlEdgeTop).LineStyle = xlNone 
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone 
    Selection.Borders(xlEdgeRight).LineStyle = xlNone 
    Selection.Borders(xlInsideVertical).LineStyle = xlNone 
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone 
    Range("E4:I4").Select 
    ActiveWindow.ScrollRow = 80 
     
     
    Range("A2").Select 
     
     
    End Sub

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Range("A6:I2000").Select
        Selection.AutoFilter
        Selection.AutoFilter Field:=6, Criteria1:="PORTAIL MONTANT DROIT"
        Range("A8:E169").Select
            Selection.Copy
        Windows("Ronde2.xls").Activate
        ActiveWindow.WindowState = xlNormal
        Windows("Classeur1.xls").Activate
        Range("E2").Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Range("A2").Select
        Application.CutCopyMode = False
        ActiveCell.FormulaR1C1 = "=RC[5]*24"
        Range("B2").Select
        ActiveCell.FormulaR1C1 = "=TEXT(RC[3],""jjjj"")"
        Range("C2").Select
        ActiveCell.FormulaR1C1 = "=""trim""&INT((MONTH(RC[2])-1)/3+1)"
        Range("D2").Select
        ActiveCell.FormulaR1C1 = "=MONTH(RC[1])"
        Range("A2:D2").Select
        Selection.AutoFill Destination:=Range("A2:D46"), Type:=xlFillDefault

    Je viens de reussir à faire ca mais je n'arrive toujours pas à trouver l'astuce qui permet de continuer à copier/coller des données à la suite de la précédente.

    Si une ame charitable pouvait me venir en aide .

    ps : on m'a demander de faire ca au boulot et autant vous dire que je suis paumé étant donné que c'est pas dans mes compétences de bases ;

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 105
    Par défaut
    Bonjour kozak,

    En gros tu veux éviter que ton copier/coller écrase tes anciennes données.

    Avant de faire ton copier/coller compte le nombre de ligne qui sont non vide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim i as integer, cpt as integer
    i=1
    cpt=0
    Do while Cells(i,1)<>"" 'Ici on regarde si la cellule ligne i ,colonne 1 (donc A) est non vide si c est le cas alors on ajoute 1 à cpt.
    cpt=cpt+1
    Loop
    Ensuite il te suffit de faire ta sélection en fonction de ton cpt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Range("A" & cpt).Select
    ActiveSheet.Paste 
    Application.CutCopyMode = False
    Voilà

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut
    Il me semble avoir compris le principe de ce que tu viens de me passer.
    Mais est-ce que tu sais si on peux l'appliquer sur 4 colonnes ? ( a,b,c,d ) voir même encore plus ?

    Si c'est pas possible , c'est pas grave j'essayerais de faire avec le bout de programme que tu m'as passer.

    Mais merci beaucoup , même un petit coup de pouce comme cela me fait avancer , c'est dire mon niveau .. mais ca m'aide vraiment donc encore merci !

  5. #5
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Encore mieux pour connaitre le numéro de la dernière ligne renseigné
    Comment connaître les numéros des dernière ligne et dernière colonne renseignées d'une plage de données.


    Après quelque remarque si tu veux accélérer ton code enlève les select
    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("E2").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("E2").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
    Le premier cas dit
    je sélectionne machin et je fait tel opération sur le truc sélectionner
    Autant dire
    je fait tel opération sur machin



    Pour en revenir a ton problème tu récupères donc la variable DerniereLigne (grace à un des code du lien) de la manière qui convient le mieux a ton cas et tu fait comme le suggère Jason

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Range("A" & DerniereLigne +1).Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False


    Sinon tu met ton programme entre des balise de citation QUOTE la petite bulle de la barre d'outil. Ca serait encore mieux si tu utilisé les balise pour les code CODE le petit dièse # un lien

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut
    Krovax merci pour l'astuce du Select mais je pense que je m'occuperais de ça quand le principale serra fait ( la rapidité du programme passe à la fin sans vouloir de vexer , mais c'est bon à savoir quand meme , merci )

    Sinon toujours bloqué sur cette histoire de copier/coller

    J'ai reussis à faire ce petit bout de programme mais il bloque et indique un message d'erreur .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
        Range("A6:I300").Select
        Selection.AutoFilter
        Selection.AutoFilter Field:=6, Criteria1:="PORTAIL MONTANT DROIT"
        Range("K8").Select
        ActiveCell.FormulaR1C1 = "=RC[-9]*24"
        Range("L8").Select
        ActiveCell.FormulaR1C1 = "=TEXT(RC[-11],""jjjj"")"
        Range("M8").Select
        ActiveCell.FormulaR1C1 = "=""trim""&INT((MONTH(RC[-12])-1)/3+1)"
        Range("N8").Select
        ActiveCell.FormulaR1C1 = "=mois"
        Range("N8").Select
        ActiveCell.FormulaR1C1 = "=MONTH(RC[-13])"
        Range("K8:N8").Select '4 colonne selectionner pour copier/coller'
        Selection.FillDown
        Selection.Copy
        Windows("Classeur1.xls").Activate
     
     
        Dim i As Integer, cpt As Integer
        i = 1
        cpt = 0
        Do While Cells(i, 1) <> ""
        cpt = cpt + 1 'erreur d'execution '6' depassement de capacité ??'
        Loop
     
        Range("A2" & cpt).Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
    c'est la ligne cpt = cpt + 1 qui a un fond jaune , je pense que c'est du au faite que je dois coller 4 colonnes non ?
    Si quelqu'un pouvait me debloqué ca serrait sympa.
    Merci bien .

  7. #7
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    si tu as un souci sur le cpt=cpt+1 essaye de déclarer cpt As Long
    Les integer sont limité (de tète) a 32565 (enfin 2^7-1) en positif et 2^7 en négatif.
    Les long vont bien plus loin

    Je croi que l'on ta déja fait la remarque ou alors c'était a un autre
    *
    i cpt vau 25
    tu écrit en ligne
    A225

    Le & signifie que tu met a la suite "bon" & "jour" donne "bonjour"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    i=10
    j=23
    i & j donne 1023
    visiblement ton code pour cpt donne la dernière ligne pleine la première ligne vide est donc juste en dessous il faut faire plus 1

    Essaye donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A" & cpt+1).select

Discussions similaires

  1. copier coller dans un <input text>
    Par denn dans le forum ASP
    Réponses: 2
    Dernier message: 20/09/2005, 16h51
  2. Réponses: 3
    Dernier message: 29/03/2005, 13h39
  3. gerer le copier/coller dans une richEdit
    Par SBP dans le forum MFC
    Réponses: 4
    Dernier message: 10/02/2005, 21h00
  4. Protéger Couper/Copier/Coller dans un Objet en développement
    Par tibi666 dans le forum Composants VCL
    Réponses: 14
    Dernier message: 06/12/2004, 14h52
  5. [Swing]copier coller... dans le menu.
    Par parksto dans le forum Composants
    Réponses: 3
    Dernier message: 10/05/2004, 22h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo