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 et sauter une ligne à chaque fois [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Points : 60
    Points
    60
    Par défaut copier coller et sauter une ligne à chaque fois
    Bonjour,

    Voila je voudrais faire un code qui me permet :

    -Dés que la valeur de D10 < 0

    -De copier coller cette valeur dans la cellule A1 par exemple avec dans B1 la date et C1 l'heure

    -Et ensuite si D10 redevient négative, recopier sa valeur dans B2 et la date dans B2 et l heure dans C2

    Et ainsi de suite ..... je mets ce que j'ai commencé à faire

    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
     
    Dim i As Integer
     
     
    For i = 1 To 5
                If Range("D10") >= 0 Then
                Exit Sub
            Else
           Range("D10") .Copy Range("A1")
            Range("D10").Offset(0, 1).Value = Date
            Range("A1").Offset(0, 2).Value = Time
          '("A" & i) & vbNewLine
            End If
        Next i
    End Sub
    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    La valeur de D10 est elle modifié par l'utilisateur, par macro ou le résultat d'une formule?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    En faite, D10 va être le résultat d'un calcul entre 2 cellules qui elles vont variées en permanence car liées à REUTERS et
    donc D10 va changer en permance ....

    En effet, oui D10 contient une formule

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Et quelle formule tu as en D10?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Voila la macro doit :

    -Dés que la valeur de D10 < 0 dont la formule est : une soustraction

    -De copier coller cette valeur dans la cellule A15 par exemple avec dans B15 la date et C15 l'heure

    -Et ensuite si D10 redevient négative, recopier sa valeur dans A16 et la date dans B16 et l heure dans C16

    Et ainsi de suite .....

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Supposons que tu as en D10 la formule suivante: =D8-D9 où D8 et/ou D9 sont changé par l'utilisateur ou par une macro X
    On pourra penser à
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim NewLig As Long
     
    If Target.Address(0, 0) = "D8" Or Target.Address(0, 0) = "D9" Then
       If Range("D10").Value < 0 Then
          NewLig = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row + 1
          Application.EnableEvents = False
          On Error GoTo Erreur
          Range("A" & NewLig).Value = Range("D10").Value
          Range("B" & NewLig).Value = Format(Date, "dd/mm/yyyy")
          Range("C" & NewLig).Value = Format(Time, "hh:mm:ss")
    Erreur:
          Application.EnableEvents = True
       End If
    End If
    End Sub
    Quelle est la fréquence de mise à jour des données issues de Reuters?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    La fréquence de mise à jour est permanente car c est en temps réel

    si je mets D8 = 10 et d9 = 30

    en mettant D10 = D8-D9 ... il ne se passe rien faite ... je pense je m y prends mal en faite


    je vais bien lire le code déjà pour bien le comprendre

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    L'évènement des déclenché quand l'une des cellules D8 ou D9 change de valeur
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Ok je viens de tester c est terrible mais qu'elles sont tes phrases dans le code ou tu indique la destination de données copiées ? ... car la il me colle les données dans A2, B2 et C2

    et je voudrais en faite les mettre dans A12, B12, C12 ... comme ça cela me permet de plus comprendre ... en effet



    toujours un plaisir de te lire et apprendre à travers tes explications Mercatog

    Et bon je te souhaite un très bon week end tout de meme

  10. #10
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    En Ligne 11, mets les titres de colonnes,
    sinon, ajoute cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          NewLig = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row + 1
          If NewLig < 12 Then NewLig = 12 'celle là
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  11. #11
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Ah oui en effet, il me suffisait juste d'intituler les noms des colonnes pour qu'elles se compilent à l'endroit choisi...

    en faite je me trompe peut être mais je pense avoir compris... c est cette phrase qui compile mais données à l'endroit voulu ... ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NewLig = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row + 1
    - j'aime bien comprendre donc je fais mon curieux ... la variable de type nombre entier Newlig est égal à la ligne que l'on souhaite en faite ... si je nomme A26 ... il va compiler les valeurs à partir de A 27 .... peut être je me trompe d'ou ma question ?

    Et la phrase de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.EnableEvents = False
    Permet de désactiver la macro événementielle le temps que la macro copie et ensuite va se réactiver par la même phrase de code mais = True

    Bon week end et merci encore pour tes conseils
    ps:j'ai envie de programmer aussi bien moi aussi

  12. #12
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Dim Cellule as range
    Set Cellule=Cells(ActiveSheet.Rows.Count, 1).End(xlUp)
    Cellule désigne la dernière cellule remplie de la colonne 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim LastLig as long
    LastLig=Cells(ActiveSheet.Rows.Count, 1).End(xlUp).row
    Désigne la ligne de cette cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim NewLig as long
    LastLig=Cells(ActiveSheet.Rows.Count, 1).End(xlUp).row+1
    en décale une ligne en bas de la précédente
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  13. #13
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Bonjour Mercatog,

    Voila j'ai réalisé mon fichier source pour le code que tu m as emis auparavant, dans notre conversation.

    Cependant les formules de ma feuille excel je pense fausse le code, je te laisse un exemplaire de ma feuille excel pour si tu as 30 secondes pour regarder ...

    En faite, si la cellule Jaune est > 0 alors copie de la valeur, de la date et de l heure.
    Le problème que je n avais pas pris en compte la dernière fois est que les 2 cellules de références (cellules vertes) sont des cellules contenant elles meme un calcul.

    Merci d'avance à toi

  14. #14
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    L'évènement Change n'est pas déclenché si le changement de la valeur d'une cellule est issu d'une formule. En effet, en B17 tu as une formule =B12+B15
    B12 et B15 on aussi une formule qui font appel entre autra à D4 qui a aussi une formule =RtGet("IDN_RDF";"EUR=";"BID")
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  15. #15
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Donc en faite, l'événement change n'a pas lieu d'être, une sub normale ira ?

  16. #16
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Sans aucune garantie. essaies ceci sur une copie du fichier test.
    Supprime le code de l'évènement Change et mets celui-ci (évènement Calculate)
    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
    Private Sub Worksheet_Calculate()
    Dim Col As Integer
     
    On Error GoTo Erreur
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    For Col = 2 To 17 Step 5
       If Cells(17, Col).Value < 0 Then
          NewLig = Cells(ActiveSheet.Rows.Count, Col - 1).End(xlUp).Row + 1
          Cells(NewLig, Col - 1).Value = Application.RoundUp(Cells(17, Col).Value, 4)
          Cells(NewLig, Col).Value = Format(Date, "dd-mmm-yyyy")
          Cells(NewLig, Col + 1).Value = Format(Time, "hh:mm:ss")
       End If
    Next Col
    Erreur:
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  17. #17
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Merci Mercatog

    c est une pure merveille ce genre de code et j'aimerai te faire partager cela avec les flux ....

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle copier coller entre 2 fichiers pour chaque ligne
    Par cheerleaders dans le forum Excel
    Réponses: 3
    Dernier message: 19/05/2015, 18h09
  2. Réponses: 2
    Dernier message: 13/05/2015, 10h44
  3. Copier/coller à partir d'une liste avec ligne vide
    Par biobill dans le forum Excel
    Réponses: 3
    Dernier message: 11/02/2015, 10h13
  4. [XL-2010] Copier le contenu d'une ligne x fois selon x
    Par bjou27 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/10/2014, 16h43
  5. [XL-2003] copier coller valeur en une ligne
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/07/2009, 02h16

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