Ajouter une ligne à une variable de type tableau

Bonjour,

j'ai réalisé une macro qui fonctionne bien mais qui prend un temps très long à tourner.

Mon idée pour l'optimiser est d'utiliser une variable tableau, malheureusement je suis pas très à l'aise avec ce type de variable et je ne sais pas si c'est faisable de transposer ma macro en utilisant un tableau.

Ma macro fait un test sur une cellule de chaque ligne et si le test est vrai insert une nouvelle ligne en dessous en recopiant les valeurs de la ligne testée.

Voici l'extrait de ma macro qui réalise cette opération

[code]Sub part()
'Dédoublement des lignes internes pour pouvoir intégrer un prix part S et un prix part Collectivité
For j = 0 To 20
    If IsEmpty(Range("A7").Offset(j)) = True Then
        Exit For
    End If
    If Range("G7").Offset(j) = "Interne" And IsEmpty(Range("I7").Offset(j)) = True Then
        Rows(j + 7).Select
        Selection.Copy
        Rows(j + 8).Select
        Selection.Insert Shift:=xlDown
        Range("I7").Offset(j).Select
        ActiveCell.FormulaR1C1 = "S"
        Range("I8").Offset(j).Select
        ActiveCell.FormulaR1C1 = "Collectivité"
    End If
Next j
End Sub

[/code]

Est-ce que cette manipulation est possible avec des variables tableau?

Merci pour vos retours.

Bonjour,

(anonymisé)

P.

Inutile de répéter le message !

https://forum.excel-pratique.com/excel/ajouter-une-ligne-a-une-variable-de-type-tableau-t97181.html

Collision avec GMB que je salue

Bonjour et bienvenue sur le forum

zactheriver a écrit :

Est-ce que cette manipulation est possible avec des variables tableau?

On peut toujours essayer mais moi, sans fichier je ne suis pas très doué...

Bye !

Bonjour,

Sans fichier c'est effectivement moins facile, pourquoi passer par un tableau pour un test sur 20 lignes ?

Si ton traitement est long sa viens de ton premier test, Range("A7") est une constante donc tu fera les 20 tours quoi qu'il arrive mais même avec sa je ne vois pas pourquoi ce serait long.

Un bout de code a tester si cela te conviens mieux

Sub part()
'Dédoublement des lignes internes pour pouvoir intégrer un prix part S et un prix part Collectivité
For j = 7 To 27
    If Range("A" & j).value = "" Then Exit For
    If Range("G" &  j).value = "Interne" And Range("I" & j).value= ""Then
        Rows(j ":" j).Select
        Selection.Copy
        Selection.Insert Shift:=xlDown
        Application.CutCopymode = False
        Range("I" & j).value = "S"
        Range("I" & j + 1).value = "Collectivité"
    End If
Next j
End Sub

Bonjour,

Le code que j'ai mis est qu'une partie/modification de la vrai macro surtout au niveau du nombre de lignes testées.

En réalité mon fichier à 1500 lignes en moyenne (le nombre de lignes change chaque mois) ce qui prend énormément de temps.

Je mets en pièce jointe une partie de mon fichier avec seulement 15 lignes de données.

21macro.xlsm (25.03 Ko)

Bonjour,

si j'ai bien compris , un essai sur ton exemple

Pour insérer des ligne on commence par le bas

P.

Sub part2()
Dim Last, I As Integer
Last = [A65000].End(xlUp).Row
For I = Last To 7 Step -1
   If UCase(Cells(I, 7)) = UCase("interne") And Cells(I, 9) = "" Then
   Rows(I).Copy
   Rows(I).EntireRow.Insert shift:=xlUp
   Cells(I, 9) = "Collectivité": Cells(I + 1, 9) = "S"
   End If
Next
Application.CutCopyMode = False
End Sub

Bonjour, Bonjour à tous !

Ton code n'est surtout pas très cohérent. Comme l'a souligné Patrick, on ne fait ni insertion ni suppression de ligne dans le sens descendant, cela t'en fait nécessairement sauter en modifiant les numéros de ligne suivants... Et on dimensionne la plage sur laquelle on intervient !

Il faut surtout que tu fasses disparaître tous les Select qui, eux te prennent effectivement du temps, que tu qualifies tes objets et que tu évites les manoeuvres du style : tester si la cellule en I est vide alors que tu as préalablement effacé la colonne (elle n'a pas pu se remplir depuis ! ) ou vérifier doublement si la cellule en colonne A est vide (IsEmpty est une fonction qui renvoie une valeur booléenne et se suffit donc à elle-même, donc en testant si son renvoi est True, tu doubles le test inutilement !)

Cordialement.

Rechercher des sujets similaires à "ajouter ligne variable type tableau"