Longueur logiciel visual Basics

Fermé
CharlotteGu - Modifié le 17 mai 2017 à 11:59
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 - 17 mai 2017 à 12:03
Bonjour,

J'ai quelques petites connaissances en VBA et voulais l'appliquer de manière très simple, pour m'aider à quelques manipulations rébarbatives relatives à mon travail.
J'ai de nombreuses feuilles au sein d'un classeur EXCEL que je voulais regrouper en une seule. Le code fonctionne mais si je ne lance pas "pas-à-pas"" via F8, le logiciel bug tellement il y a d'onglets. Comment puis-je faire ? Cela vient-il de mon code?

Le voici :

Sub collage()
Dim feuille As Worksheet
Dim a As Long

Set feuille = Sheets(1)
feuille.Activate
feuille.Name = "Ecritures"

For i = 1 To Worksheets.Count
a = Range("A1048576").End(xlUp).Row
    If Sheets(i).Name <> "Ecritures" Then
        Sheets(i).Activate
        Sheets(i).Range("B9:Q45").Copy Destination:=feuille.Rows(a)
        feuille.Activate
    End If
Next
End Sub


EDIT : Ajout des balises de code (la coloration syntaxique).

Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Jordane45
A voir également:

1 réponse

jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
17 mai 2017 à 12:03
Bonjour,

Pour gagner du temps .. tu peux déjà désactiver l'affichage au debut de ton code
Application.DisplayAlerts = False  


Puis le réaciver à la fin
Application.DisplayAlerts = True



Il faudrait aussi savoir si tu veux récupérer uniquement les valeurs de tes cellules ... ou si tu veux aussi la mise en forme.
Si ce ne sont QUE les valeurs qui t'interessent ... le COPIER/COLLER est à proscrire... (y compris les ACTIVATE sur les feuilles )
A la place tu peux utiliser le .VALUE de l'objet RANGE...
par exemple :
range("A1").value = range("B1").value // met la valeur de B1 dans A1 )



NB : Je pense qu'il y a aussi un petit souci sur la ligne
a = Range("A1048576").End(xlUp).Row

A changer par :
a = feuille.Range("A1048576").End(xlUp).Row




0