Inserer lignes en fonction de plusieurs cellules excel 2007

  • Initiateur de la discussion Initiateur de la discussion grotsblues
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

grotsblues

XLDnaute Occasionnel
Bonjour le forum

Après multiple recherche j ai pas trouvé un code qui aurait pu m aider mais pas moyen de le faire corresponde à mon problème
J ai un fichier excel de plusieurs lignes, je souhaiterez qu'il recopie une partie de la ligne sur la feuille 2 en fonction de plusieurs cellules et qu'il me divise par 100 les montants, le fichier est utilisé tous les mois le format est toujours le même sauf le nombre de lignes qui varies je mets à dispo un exemple pour plus de compréhension

le code que j ai trouve
Sub insererlignes()

[A18].Select: Selection.Clear: L& = 19

With [A1].CurrentRegion
For R& = 2 To .Rows.Count
For C& = 12 To .Columns.Count
L = L + 1
.Cells(R, C).Copy Cells(L, 5)
.Cells(R, 8).Copy Cells(L, 3)
.Cells(R, 9).Copy Cells(L, 4)
.Cells(R, 7).Copy Cells(L, 1)
.Cells(R, 15).Copy Cells(L, 6)

Next C
Next R
End With

End Sub

Je vous remercie par avance de votre aide
 

Pièces jointes

Hello
un exemple avec ce code
VB:
Sub CopiePartieTablo()
Dim TabloInit() As Variant
Dim TabloFinal() As Variant

With Sheets("SAL")
    TabloInit = .UsedRange.Value
End With

For i = LBound(TabloInit, 1) + 1 To UBound(TabloInit, 1)
    For j = 12 To 17
        If TabloInit(i, j) <> "" Then TailleFinal = TailleFinal + 1
    Next j
Next i
ReDim TabloFinal(1 To TailleFinal, 1 To 11)
k = 1
For i = LBound(TabloInit, 1) + 1 To UBound(TabloInit, 1)
    For j = 12 To 17
        If TabloInit(i, j) <> "" Then
            TabloFinal(k, 1) = TabloInit(i, 7)
            TabloFinal(k, 2) = TabloInit(i, 4)
            TabloFinal(k, 3) = TabloInit(i, 5)
            TabloFinal(k, 4) = TabloInit(i, 6)
            TabloFinal(k, 5) = TabloInit(i, 8)
            TabloFinal(k, 6) = TabloInit(i, 9)
            TabloFinal(k, 7) = TabloInit(i, j)
            TabloFinal(k, 8) = TabloInit(i, j + 6) / 100
            TabloFinal(k, 9) = TabloInit(i, 24) / 100
            TabloFinal(k, 10) = TabloInit(i, 25) / 100
            TabloFinal(k, 11) = TabloInit(i, 26) / 100
            k = k + 1
        End If
    Next j
Next i
           
With Sheets("SAL AU FORMAT")
    .UsedRange.Offset(1, 0).Clear
    .Range("A2").Resize(UBound(TabloFinal, 1), UBound(TabloFinal, 2)) = TabloFinal
End With

End Sub
 
Bonsoir et merci beaucoup
Cela fonctionne parfaitement mais j ai une question certainement idiote mais j ai voulu faire fonctionner le code en pas à pas detaillé afin de le comprendre mais il ne se passe rien pourquoi ?

merci pour votre réponse
 
Bonsoir grotsblues, vgendron,
j ai voulu faire fonctionner le code en pas à pas detaillé afin de le comprendre mais il ne se passe rien pourquoi ?
Vous découvrez les tableaux VBA qui sont des matrices.

Pendant que la macro les étudie il ne se passe rien dans la feuille de calcul, c'est pour ça que c'est très rapide.

Une fois le tableau TabloFinal complètement rempli il est restitué en bloc dans la feuille de calcul.

A+
 
Bonjour grotsblues, vgendron, le forum,

Juste une petite variante de la macro de vgendron :
Code:
Sub CopiePartieTablo_bis()
Dim TabloInit, TabloFinal, i&, j%, k&

With Sheets("SAL").UsedRange
  TabloInit = .Resize(, 26)
  ReDim TabloFinal(1 To Application.CountA(.Columns("L:Q")) + 1, 1 To 11)
End With

For i = 2 To UBound(TabloInit)
    For j = 12 To 17
        If TabloInit(i, j) <> "" Then
            k = k + 1
            TabloFinal(k, 1) = TabloInit(i, 7)
            TabloFinal(k, 2) = TabloInit(i, 4)
            TabloFinal(k, 3) = TabloInit(i, 5)
            TabloFinal(k, 4) = TabloInit(i, 6)
            TabloFinal(k, 5) = TabloInit(i, 8)
            TabloFinal(k, 6) = TabloInit(i, 9)
            TabloFinal(k, 7) = TabloInit(i, j)
            TabloFinal(k, 8) = TabloInit(i, j + 6) / 100
            TabloFinal(k, 9) = TabloInit(i, 24) / 100
            TabloFinal(k, 10) = TabloInit(i, 25) / 100
            TabloFinal(k, 11) = TabloInit(i, 26) / 100
        End If
Next j, i
          
With Sheets("SAL AU FORMAT")
    If k Then .Range("A2").Resize(k, 11) = TabloFinal
    .Range("A" & k + 2 & ":K" & .Rows.Count).ClearContents 'RAZ sous le tableau
End With
End Sub
Elle évite le bug si la feuille "SAL" est vide.

Et surtout elle évite un saut d'écran à la restitution quand on l'exécute via une Worksheet_Activate.

Pour tester j'ai recopié le tableau source sur 70 000 lignes : l'exécution se fait en 2,7 secondes chez moi.

Bonne journée.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
79
Réponses
2
Affichages
375
Réponses
4
Affichages
361
Retour