Compléter un tableau sur une feuille simplement en activant une macro
Bonjour,
Voici un code que j'ai fait grâce à chatgpt et une astuce d'optimisation de temps de production de macro sur ce site :
Sub AfficherInsky()
Application.ScreenUpdating = False
' Demande à l'utilisateur d'entrer la valeur pour la "center ligne"
Dim centerLine As Single
Dim centerlineparabole As Single
centerLine = InputBox("Veuillez insérer la valeur de la center ligne de l'antenne")
centerlineparabole = InputBox("Veuillez insérer la centerline de la parabole")
' Déclare un tableau 2D avec les données à afficher, y compris les calculs avec centerLine
Dim donnees As Variant
donnees = Array( _
Array("Insky", "", 1, "Sigfox LNAC", centerLine + 0.8, 0), _
Array("Insky", "", 1, "Sigfox Tigerbox", centerLine + 0.8, 0), _
Array("Insky", "", 1, "Sigfox support 80/100", centerLine + 0.8, 0), _
Array("Insky", "", 3, "ParaØ0,3m", centerlineparabole, 0), _
Array("Insky", "", 1, "Sigfox omni 80cm", centerLine + 0.8, 0), _
Array("Insky", "", 3, "RRU4418", centerLine + 0.6, 0), _
Array("Insky", "", 3, "RRU8863", centerLine + 0.6, 0), _
Array("Insky", "", 3, "PTTA", 0, centerLine + 0.1), _
Array("Insky", "", 3, "FTTA", 0, centerLine - 0.17), _
Array("Insky", "", 3, "RRU4486", centerLine - 0.4, 0), _
Array("Insky", "", 3, "RRU4485", centerLine - 0.4, 0), _
Array("Insky", "", 1, "800442802", centerLine, 0), _
Array("Insky", "", 2, "800442802(arr)", centerLine, 0), _
Array("Insky", "", 3, "STSP_U-350", 0, centerLine - 2.5) _
)
Dim i As Integer, j As Integer
Dim startCell As Range
' Définit la cellule de départ comme la cellule active
Set startCell = ActiveCell
startCell.Resize(UBound(donnees) + 1, UBound(donnees(0)) + 1).Value = donnees
' Remplit les cellules à partir de la cellule active avec les données du tableau
For i = LBound(donnees) To UBound(donnees)
For j = LBound(donnees(i)) To UBound(donnees(i))
startCell.Offset(i, j).Value = donnees(i)(j)
Next j
Next i
Application.ScreenUpdating = True 'Facultatif
End Sub
Voici le résultats :
Le résultat est très rapide lorsque j'active la macro sur une feuille vierge. Mais quand je l'active sur un classeur rempli de feuilles et de macros , le processus prend jusqu'à 1 minute.
La question est : est ce qu'on peut stocker ces valeurs dans le press papier en appuyant sur la macro pour ensuite uniquement faire un CTRL V ? Parce que j'ai remarqué qu'en collant des valeurs le résultats est imédiats.
Ou alors avez vous une solution pour que le résultats s'affiche rapidement ?
Merci
Bonsoir Exactement10,
A priori, je ne vois rien qui cloche dans ta macro. Y aurait-il d’autres feuilles dans ton classeur avec de nombreux calculs qui se font à chaque fois que ta macro rempli une unique cellule ? Si c’est le ca, tu peux encadrer la partie active de ton avec :
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = Falseet
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = TrueÇa permettra peut-être de résoudre ce ralentissement.
La réponse à ta question est : oui. Mais j'ai essayé l'optimisation , ça ne change pas grand chose, il y a toujours un chargement de plus de 30 secondes.
L'excel est rempli de formules et de macros liés par plusieurs feuilles
Bonjour,
si vous relancez la macro sur X feuilles, vous refaites en effet X fois le calcul. Il est en effet plus malin de copier/coller le résultat.
C’est possible de différentes façons. Si vous voulez copier toute la feuille directement, vous avez Worksheet.Copy method (Excel) | Microsoft Learn qui permet de dupliquer une feuille. Par contre bien évidemment cela vous crée de nouvelles feuilles (comme si vous le faisiez manuellement).
Si vous préférez garder vos feuilles, vous pouvez utiliser quelque chose comme
Feuil1.Cells.Copy
Feuil2.Range(“A1”).PasteSpecial xlPasteAll
Cela vous copie toutes les cellules de la feuille 1 dans la feuille 2. Si vous voulez quelque chose de plus précis vous pouvez joindre un fichier, ou au moins nomer très précisément les feuilles en questions et le processus voulu.