Aide VBA Excel: insertion d'une nouvelle ligne [Résolu/Fermé]

Signaler
-
 alciade -
Bonjour à tous,

Ca fait 3 jours que je perds mes cheveux et vu mon faible niveau j'appelle à l'aide... J'essaye d'analyser un jeu de donnée.

J'ai une feuille dans laquelle j'ai 2 colonnes. La colonne A: est le temps, minute après minute sur un mois. La colonne B: est une hauteur.
A la fin je dois avoir un fichier affichant seulement les hauteurs toutes les 30minutes.
Le soucis c'est qu'il me manque des données.
C'est pour cela que j'essaye d'insérer une ligne toute les minutes manquante en lui affectant NA dans la colonne en hauteur. Ensuite je récupère que les valeurs toutes les 30min.
J'ai déjà écrit un script dont je me suis inspiré d'un ancien post de ce forum (Aide VBA Excel : Inserer des lignes sous condition [Résolu]) mais ça ne marche pas.

Je vous mets le script si cela peut vous aider à mieux comprendre mon pb (dsl si il arrache les yeux à certains...) :

Sub test()

rCell As Range

For Each rCell In Sheets("Feuil1").Range("B3:B")
'Si valeur cellule égale B2 de Feuil10
If rCell = TMP0 Then
'Alors insérer une ligne en ligne 10 (par exemple)
With Sheets("Feuil1")
.Rows("rCell.Row+1").Insert Shift:=xlDown
'Complète la ligne insérée avec les données manquantes
.Cells(rCell.Row + 1, 1).Value = Sheets("Feuil1").Cells(rCell.Row, 1 + 0.02).Value
.Cells(rCell.Row + 1, 2).Value = "NA"
End With
End If

Next rCell

End Sub


3 réponses

Messages postés
16217
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
29 septembre 2020
3 036
Bonjour,
On gagnerait à la fois du temps et de la clarté en ayant le classeur sous les yeux...
Pour cela, mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le lien proposé dans le message de réponse
Dans l'attente

Voici le lien avec le classeur : http://cjoint.com/?0CEk2QtDPLU
Messages postés
16217
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
29 septembre 2020
3 036
Re,
bien reçu

tu dis que tu veux aboutir à un tableau indiquant les hauteurs toutes les 30 minutes soit un nombre de lignes de 48*30 (ou 31 ou 28-29)
pourquoi alors insérer des ces lignes?
en regardant ton envoi entre la ligne 7 et 8 on a un bond de 26 mn
le résultat final montrerait alors que la copie de la ligne 1,8,37 etc ?...

tu dis


Michel
Merci pour votre réponse :)
Oui je cherche à obtenir un tableau ayant un nombre de ligne de 48 (nb de fois qu'il y a 0 et 30 min dans 24h) * 30(nb de jour dans un mois).

J'insère des lignes toutes les minutes, pour remplir les données manquantes par NA et ensuite pouvoir sélectionner une ligne sur 31 (lignes qui correspond aux temps 0 et 30minutes).

Par exemple sur l'envoi il manque 26min entre la ligne 7 et 8 et le résultat final devrait m'afficher (sans compter l'en-tête) la ligne 1, une ligne que j'aurai rajouté daté du 04/12/2014 00:30 avec comme hauteur NA et ensuite la ligne 37 (04/12/2014 01:00) etc...

J'espère que j'ai répondu à votre question...
Messages postés
16217
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
29 septembre 2020
3 036 > alciade
OK, Merci
Sois patient, je dois m'absenter 1 heure ou 2

Solution par VBA
Messages postés
16217
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
29 septembre 2020
3 036
Désolé pour ce retard! : -\
regarderai demain
>
Messages postés
16217
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
29 septembre 2020

Pas de soucis merci beaucoup
Messages postés
16217
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
29 septembre 2020
3 036
Bonjour
Hachement piègée les conditions, surtout avec des minutes à manipuler !
effectivement, terrible pour les cheveux mais commr j'en ai presque plus, ca a été... :-D
https://www.cjoint.com/?3CFnqvVg0u2
Tu dis...
Messages postés
16217
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
29 septembre 2020
3 036
Bonjour,
C'est reparti, patience !...
Messages postés
16217
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
29 septembre 2020
3 036
Re,
ci joint maquette où j'ai mis sur la m^me lfeuille le tableau 0-30mn pour faciliter mes essais
j'arr^te aussi à la ligne 2060 (c'est très long à se balader sur la feuille !)
un point me chagrine : avant dernière mesure "NA" sautée !!!
si c'est indispensable je chercherai à t^te reposée...
Tu dis
https://www.cjoint.com/?3DckoD8HeXN
>
Messages postés
16217
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
29 septembre 2020

Merci beaucoup pour votre réponse et pour votre aide. J'ai chargé le fichier mais malheureusement je n'arrive pas à appliquer la macro pour d'autres jeux de données.
Il me met comme message d'erreur:
" Erreur d'exécution '9'.
L'indice n'appartient pas à la sélection".
Et il me renvoi à cette ligne du code:
"Do Until Minute(T_in(idx1, 1)) = 0 Or Minute(T_in(idx1, 1)) = 30"

Je vous avoue que je n'ai pas trop compris ce qu'il voulait dire....

Il me met la même erreur si je mets en commentaire
" Derlig = 2031 'POUR ESSAIS CODE "

et que j'active la ligne
" Derlig = Sheets(1).Columns("A").Find("*", , , , , xlPrevious).Row "
Messages postés
16217
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
29 septembre 2020
3 036 > alciade
j'ai rechargé les données initiales fournies

siupprimer la ligne
Derlig = 2031 'POUR ESSAIS CODE
et ajouter 1 à Derlig
Derlig = Sheets(1).Columns("A").Find("*", , , , , xlPrevious).Row +1

34630 relevés traités en 0,12 secondes ! :o))
Merci beaucoup super il marche pour l'ensemble de mes données! :-)
J'ai pas exactement un tableau 48*30 il manque souvent 2 petites lignes mais c'est pas grave j'ai réussi à les repérer facilement.
Encore merci beaucoup pour votre aide

Alciade