activer un autre classeur sous excel 2007

juju59

XLDnaute Nouveau
Bonjour à tous,

je me permets de vous écrire car je rencontre un problème...

J'ai fait un code VBA sous excel 2003, dans ce code je passe d'un classeur à l'autre pour récupérer des données sur l'une et les copier sur l'autre.

sous 2003 j'utilisais pour cela :
Code:
Windows(nomdufichier").Activate
ou encore
Code:
Workbooks(nom3).Activate

avec nom3 = Dir("\\chemin\1234567899*.txt") par exemple

Cela ne marche pas sous 2007.

Je n'arrive pas a trouver comment activer une autre feuille ou comment passer d'une feuille à l'autre sans forcement l'activer.

Merci
 

tototiti2008

XLDnaute Barbatruc
Re : activer un autre classeur sous excel 2007

Bonjour juju59,

En général, il n'est pas obligatoire d'activer une feuille pour travailler dessus, cependant les codes que tu as fourni devraient fonctionner correctement en 2007.
As-tu un classeur exemple
 

juju59

XLDnaute Nouveau
Re : activer un autre classeur sous excel 2007

Bonjour à tous,

Merci pour ta réponse tototiti2008, je ne comprends pas pourquoi je ne suis pas obligé d'activer le classeur pour travailler dessus ? Comment puis-je, dans ce cas, faire comprendre à excel qu'il doit changer de classeur ?

Et je suis étonné que ces codes devraient fonctionner sous 2007 ... Quelle peut être la raison de ce message d'erreur dans ce cas ?

Je ne met pas de fichier comme il en faut deux cela me parait un peu compliqué...
Mais voici le code que j'utilise :

Code:
sub exemple ()
Dim classeur1 As Workbook
Dim nom1 As String
Dim chemin As String
 
 
 
 nom2 = Dir("\chemin\01234567899*.txt")
 chemin = "\cheminasuivre\"

If nom2 <> "" Then
    Set classeur2 = Workbooks.Open(chemin & nom2)
     
     ' MODIFICATION SUR CLASSEUR 2
   
    Range("I2").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Windows("Classeur1").Activate

    Range("D9").Select
    ActiveSheet.Paste
   
    Workbooks(nom2).Activate
    
    Range("I6").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
    Windows("classeur1").Activate
    
    Range("E9").Select
    ActiveSheet.Paste
    'somme corrigée copiée
    
    Workbooks(nom2).Activate
    
    Range("A1").Select
    Selection.Copy
    Windows("classeur1").Activate
    Range("H9").Select
    ActiveSheet.Paste

    
    Windows("classeur1").Activate
    Range("B9").Select
    
    
    'MODIFICATION SUR CLASSEUR 1

     
    
    Workbooks(classeur2).Activate
    Application.DisplayAlerts = False
    ActiveWorkbook.Close SaveChanges:=No
     
   End If

end sub

Voila, j'ai un message d'erreur dès le premier Windows("classeur1").Activate

Merci par avance
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : activer un autre classeur sous excel 2007

Bonjour juju,

Classeur1, c'est censé être le classeur actif ?
Si c'est celui qui contient ta macro, tu peux remplacer tous tes

Windows("Classeur1").Activate

par

Thisworkbook.Activate

Thisworkbook désigne toujours le classeur contenant le code VBA

Maintenant ça plante peut-être parce que ton classeur ne s'appelle pas Classeur1 ?
 

juju59

XLDnaute Nouveau
Re : activer un autre classeur sous excel 2007

Merci pour ta réponse.

Effectivement classeur1 contient la macro, ta solution fonctionne !
Et oui il s'appelle bien ainsi, pour preuve absolument tout fonctionne sur 2003... tout cela doit donc venir d'un problème de compatibilité.

Par contre je me demande si:

Workbooks(nom2).Activate va fonctionner...

j'essaie d'aller sur un pc avec excel 2007 au plus vite.

Merci
 
Dernière édition:

juju59

XLDnaute Nouveau
Re : activer un autre classeur sous excel 2007

Tout fonctionne parfaitement à présent.

Le fichier est juste plus lent à réaliser les calcules... Faut-il que je change les formules avec des ";" par des "," par exemple pour qu'il ré-obtienne la rapidité qu'il avait sous 2003 ?

Ou avez vous des idées de l'origine de cette lenteur ?

Cordialement.
 

juju59

XLDnaute Nouveau
Re : activer un autre classeur sous excel 2007

Oui, certes j'avoue bien volontiers que mes formules ne sont pas très très optimisées...

Mais elles ne l'étaient donc pas non plus sous excel 2003, donc ça n'explique pas la lenteur des calculs...

Bon et bien je ne change rien ! Tant pis pour la lenteur des calculs, le résultat est la c'est bien le principal.

Merci tototiti2008

Cordialement
 

tototiti2008

XLDnaute Barbatruc
Re : activer un autre classeur sous excel 2007

Re,

Il va sans dire que tout dépend des formules utilisées

T'invitais à nous fournir un exemple
Si tes formules s'appliquent à toute une colonne ou toute une ligne, la lenteur peut s'expliquer par l'agrandissement de la feuille de calcul entre 2003 et 2007, mais sans exemple de formule...
 

juju59

XLDnaute Nouveau
Re : activer un autre classeur sous excel 2007

Voici un exemple de formule :

Code:
    Range("K1").Select
    Selection.Copy
    Columns("K:P").Select
    ActiveSheet.Paste
    Range("I5").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "somme corigée :"
    Range("I6").Select
    ActiveCell.FormulaR1C1 = "=SUM(C[2]:C[7])/6"
    Range("I7").Select
    'sommes finis
    Range("I2").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ThisWorkbook.Activate
    Range("D8").Select
    ActiveSheet.Paste
    'somme copiée
    Workbooks(nom1).Activate
    Range("I6").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ThisWorkbook.Activate
    Range("E8").Select
    ActiveSheet.Paste
    'somme corrigée copiée
    Workbooks(nom1).Activate
    Range("A1").Select
    Selection.Copy
    ThisWorkbook.Activate
    Range("H8").Select
    ActiveSheet.Paste

Voila, c'est à ce moment que la macro est la plus lente
 

tototiti2008

XLDnaute Barbatruc
Re : activer un autre classeur sous excel 2007

Re,

Si tes formules s'appliquent à toute une colonne ou toute une ligne, la lenteur peut s'expliquer par l'agrandissement de la feuille de calcul entre 2003 et 2007

ActiveCell.FormulaR1C1 = "=SUM(C[2]:C[7])/6"

Et comme par hasard tu additionnes les valeurs de toute la colonne :)
En 2003, tu additionnais 65536 cellules par colonne
en 2007, tu additionnes plus d'un million de cellules par colonnes
D'où la lenteur occasionnée... Donc soit tu n'additionnes que les cellules remplies en modifiant ta formule, soit ça sera plus lent...
 

Discussions similaires

Réponses
3
Affichages
536
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 519
dernier inscrit
Thomas_grc11