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 :

Insertion automatique de lignes si manque de lignes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut Insertion automatique de lignes si manque de lignes
    Bonjour.
    J'ai des données enregistrées minutes par minutes que j'exploite sous excel
    Seulement, ça coince par moments en ne m'enregistrant pas la valeur à une minute donnée. Et comme j'ai environ 60000 lignes, pas top de les revoir une par une!

    Mon problème est simple.
    J'ai en colonne B les minutes qui défilent avec par endroit un trou d'une valeur (1 minute manquante)
    J'ai en colonne C les valeurs d'un compteur.
    L'idée serait d'insérer automatiquement une ligne supplémentaire quand il détecte un manque sur la colonne B

    Ne m'y connaissant pas du tout en VBA..je fais appel à vous!
    Je pensais à une boucle IF:
    par exemple (mal écrit car bon sinon j'aurais la solution)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    imax= 60000
    for i=1 to imax step 1
        IF (Bi+1-Bi>1) #en gros écart supérieur à 1minute entre 2 valeurs de temps
        insert ligne et Ci+1=ci
        imax=imax+1
        continu
        ELSE 
        imax
        continu #ne fait rien en gros.
    Bref, j'ai réussi à créer ma macro qui insert une ligne et y colle la valeur de la colonne précédente mais ça je l'ai fait en sachant qu'il me manquait une valeur!!
    j'avais t=00:13:00 (en B16) et t=00:15:00(en B17) donc me manquait 00:14:00. j'ai inséré une ligne et j'ai mis C17=C16...

    ça donne ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Macro4()
    '
    ' 
     
    '
        Rows("17:17").Select
        Selection.Insert Shift:=xlDown
        Range("C17").Select
        ActiveCell.FormulaR1C1 = "=R[-1]C"
        Range("C18").Select
    End Sub

    Comment automatiser à partir de ça?
    En espérant ne pas être incompréhensible, MERCI d'avance!!

  2. #2
    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
    voila un code sans doute pas le meileur mais il devrais marcher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub verification()
    Dim i As long
    dim imax as long  'il fau utiliser des Long au lieu des integer qui sont limité a 32 767
    feuil1.select
    imax = 60000
    For i = 1 To imax
        If Cells(i, 2) = "" Then  ' si la celllule de la ligne i colonne 2 est vide alors
            Cells(i, 2).EntireRow.Insert        'insert une ligne au dessus 
            i=i + 1  'j'aime pas beaucoup faire ca mais c'est pour tenir compte la ligne que l'on vien d'ajouter
           imax=imax + 1
        End If
    Next i
    End Sub
    Fait une sauvegarde avant de lander le code on sait jamais

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Hello vous,
    Si le code de Krovax te convient, comme la ligne " imax=imax + 1" me gène un tantinet, je partirais de la dernière ligne renseignée pour aller sur la première
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         imax = Split(FL1.UsedRange.Address, "$")(4)
         For i = imax To 1 step -1
             If Cells(i, 2) = "" Then Cells(i, 2).EntireRow.Insert 
         Next i
    Ainsi tu n'auras pas le problème de la ligne ajoutée
    (Je n'ai pas vérifié l'algorithme utilisé.)

  4. #4
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut
    bon alors le code fonctionne comme cela mais il ne me fait pas du tout ce que j'escomptais!

    En fait le probleme se situe là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(i, 2) = "" Then
    Or moi j'ai un tableau qui ressemble à ça:

    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
    Date	Heure	Compteur BT
    08/12/2008	00:00:00	0
    08/12/2008	00:02:00	0
    08/12/2008	00:03:00	0
    08/12/2008	00:04:00	0
    08/12/2008	00:05:00	0
    08/12/2008	00:06:00	0
    08/12/2008	00:07:00	0
    08/12/2008	00:08:00	0
    08/12/2008	00:09:00	0
    08/12/2008	00:10:00	0
    08/12/2008	00:11:00	0
    08/12/2008	00:12:00	0
    08/12/2008	00:13:00	0
    08/12/2008	00:15:00	0
    08/12/2008	00:16:00	0
    08/12/2008	00:17:00	0
    Comme on peut le voir il manque la minute 1 et la 14eme.
    En fait il faudrait que j'insere comme vous l'avez compris une ligne entre la 13eme et 15eme et que je donne au compteur la valeur de la 13ème...
    Ensuite si ça me le fait pour tous les trous suivants ç'est top! (j'ai environ 3500 trous étant donné que je dois reprendre tous les résultats du 08/12/08 au 20/01/09...)

    j'ai testé de remplacer et écrire un truc mais VB n'aime pas du tout mon incompétence en ce domaine!! ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If Cells(i, 2) - Cells(i + 1, 2) > 1 Then ' si la celllule de la ligne i colonne 2 est vide alors
            Cells(i, 2).EntireRow.Insert        'insert une ligne au dessus
            Cells(i + 1, 3) = Cells(i, 3)
            i = i + 1 'j'aime pas beaucoup faire ca mais c'est pour tenir compte la ligne que l'on vien d'ajouter
           imax = imax + 1
    A vous les studios!! et merci encore!

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

Discussions similaires

  1. Insertion automatique de ligne de séparation
    Par Mantrisse dans le forum Word
    Réponses: 2
    Dernier message: 29/01/2008, 15h24
  2. Insertion automatique de ligne
    Par binouse18 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/05/2007, 17h27
  3. insertion automatique de lignes dans la crontab
    Par Mr_Brown dans le forum Administration système
    Réponses: 2
    Dernier message: 27/03/2007, 14h03
  4. insertion automatique de plusieurs lignes dans mysql
    Par dejiein dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/06/2006, 10h41
  5. [VBA-E]insertion automatique d'une ligne dans un tableau
    Par janus82 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/04/2006, 15h42

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