Eviter selection de feuilles dans une macro

Bonsoir a tous,

j'ai une macro qui marche bien mais qui ne me satisfait pas entièrement car elle sélectionne d'autres feuilles lors de son fonctionnement. En effet, j'ai appris qu'il était possible et meme préférable de travailler dans une feuille sans la sélectionner... Mais je ne sais pas comment faire !

Je vous joints mon fichier, pourriez-vous me proposer une solution alternative qui m'éviterait cette sélection superflue ?

Description de mon fichier :

  • je clique sur "capturar informacion" et ca me copie/colle les données d'aujourd'hui dans la première colonne vide de la dernière feuille
  • si je me suis trompé, je clique sur "cancelar captura" et ca m'efface la colonne correspondant a la date d'aujourd'hui

Vous pourrez remarquer le changement rapide de feuille lors de l'exécution des macros...

Petite question annexe : je veux cacher la feuille "data por linea" mais comme je l'utilise dans la macro ca me donne un message d'erreur, donc je dois la rendre visible... Est-ce qu'avec une solution sans sélection de cette feuille ca me ferait disparaitre le problème ? Si non, comment puis-je faire ?

Bonsoir,

voici déjà le code Guardar_Datos modifié

Sub Guardar_Datos()
'Macro modifié par Dan le 17/11/10
' Guardar_Datos Macro
Dim col As Integer
col = Sheets("Datos Diagramas").Cells(2, Columns.Count).End(xlToLeft).Column + 1
Sheets("Resumen").Range("B5").Copy
Sheets("Datos Diagramas").Cells(2, col).PasteSpecial Paste:=xlPasteValues
    With Sheets("Data por linea")
        .Select
        .Range("C2:C" & Range("C" & Rows.Count).End(xlUp).Row).Copy _
             Sheets("Datos Diagramas").Cells(3, col) '
    End With
End Sub

Amicalement

Merci, je vais essayer et je vous tiens au courant !

Je vais aussi essayer de l'adapter a l'autre bouton

re,

Prends plutôt ce code ci qui tient compte de la feuille cachée

Sub Guardar_Datos()
'Macro modifié par Dan le 17/11/10
' Guardar_Datos Macro
Dim col As Integer
Application.ScreenUpdating = False
col = Sheets("Datos Diagramas").Cells(2, Columns.Count).End(xlToLeft).Column + 1
Sheets("Resumen").Range("B5").Copy
Sheets("Datos Diagramas").Cells(2, col).PasteSpecial Paste:=xlPasteValues
    With Sheets("Data por linea")
        .Visible = True
        Sheets("Datos Diagramas").Select
        .Range("C2:C" & Range("C" & Rows.Count).End(xlUp).Row).Copy Sheets("Datos Diagramas").Cells(3, col)
        .Visible = False
    End With
End Sub

Pour réafficher la feuille, va par Format / Feuille / Afficher

Amicalement

edit Dan : pour le deuxième code, utilise celui-ci après

S

ub Cancelar_Captura()
'Macro Dan pour paulochon le 17/11/10
Dim col As Integer
Application.ScreenUpdating = False
With Sheets("Datos Diagramas")
    col = .Cells(2, Columns.Count).End(xlToLeft).Column
    .Cells(1, col).EntireColumn.Delete
End With

Si ok, n'oublie pas de cloturer le fil en cliquant sur le V vert

Amicalement

Bonsoir à tous,

La feuille "Data por linea" est masquée

Sub Saisie()
Dim cL%
    With Sheets("Datos Diagramas")
        cL = .Cells(2, 250).End(xlToLeft).Column + 1 '1ère colonne vide
        .Cells(2, cL) = Date
        Sheets("Data por linea").Range("C2:C67").Copy
        .Cells(3, cL).PasteSpecial Paste:=xlPasteValues
    End With
    Application.CutCopyMode = False
End Sub
Sub SupprimeColonne()
Dim cL%
    With Sheets("Datos Diagramas")
        cL = .Cells(2, 250).End(xlToLeft).Column
        If .Cells(2, cL) = Date Then .Columns(cL).Delete
    End With
End Sub

édit: on se demande à quoi sert le tableau de la feuille "Resumen" à part la date !

Amicalement

Claude

38paulochon-macro.zip (21.60 Ko)

re,

Claude , pas compris le pourquoi de ton code lorsque la solution est proposée avant. Mais bon.

Bonne soirée

Edit --> Attention que le Cells(2, 250), limite à 250 colonnes. Sous excel 2003, on a 256 colonnes. Sous excel 2007 je pense que c'est 16384.

Salut Dan,

J'ai pris ce poste en main, il n'y avait pas de réponse, tu as répondu le 1er c'est tout

Bonne soirée

Claude

woaw vous etes super rapides !

Dan :

  • ton "guardar datos" est plus élégant mais tu sélectionnes la feuille "Datos Diagrama", et ca ne revient pas sur "Resumen" après :S
  • ton "cancelar captura" est tout aussi élégant mais ne correspond pas a ce que je veux parce qu'avec ta solution ca supprime la dernière colonne quelle que soit la date, et c'est dangereux car si quelqu'un clique deux fois dessus, ca supprimera la colonne de la date antérieure aussi...

Claude :

- Dans les deux cas ce que tu proposes est juste parfait...

Pour ton commentaire sur l'utilité de la page Resumen, je te répondrais que c'est l'aspect visuel qui prime, je veux pouvoir avoir un apercu des chiffres dans un joli tableau avec des mises en forme conditionnelles et tout... Par contre je suis d'accord avec toi que ma structure est plutot lourde...

A la limite ce qui pourrait etre fait c'est supprimer la feuille "Data por linea", et venir chercher les données directement sur la feuille Resumen, mais a l'origine quand j'ai écrit ce qui peut ressembler a une "macro" (j'ai honte de l'appeler ainsi face aux votres hehe), j'ai eu peur de venir chercher les données dans plusieures colonnes différentes du tableau "Resumen" et de les coller dans une seule et meme colonne de "Datos Diagramas". Ce sera donc mon prochain challenge !

En tout cas merci beaucoup aux deux, j'apprends énormément avec vous !

Amicalement

Paul

PS : Ne vous batez pas pour moi hein

rebonjour,

J'ai essayé de refaire une petite macro avec travail dans une autre feuille que l'active mais sans succès... Je veux travailler dans la feuille "L-3" mais rien a faire, le code travaille dans la feuille ou se trouve le bouton de la macro... Pourquoi ne prend-il pas en compte mon "with sheets" ?

PS: le code fonctionne, le seul probleme réside dans cette sélection de feuille

Dim i As Integer

With Sheets("L-3")

For i = 1 To 30
Dim lG As Long
        If Cells(8 + i, 4).Value <= 9 And Not IsEmpty(Cells(8 + i, 1)) Then
        Cells(8 + i, 2).Copy
        lG = Range("L10000").End(xlUp).Row + 1      
        Cells(lG, 12).PasteSpecial Paste:=xlPasteValues
        End If
Next
End With

Bonjour,

Essaye en ajoutant des "." à ton code.

Tu dois avoir Sheets("L-3").Range("L10000").End(xlUp).Row + 1, avec ta méthode en utilisant Range et pas .Range tu obtiens "Feuille active".Range("L10000").End(xlUp).Row + 1

Dim i As Integer

With Sheets("L-3")

For i = 1 To 30
Dim lG As Long
        If .Cells(8 + i, 4).Value <= 9 And Not IsEmpty(.Cells(8 + i, 1)) Then
        .Cells(8 + i, 2).Copy
        lG = .Range("L10000").End(xlUp).Row + 1      
        .Cells(lG, 12).PasteSpecial Paste:=xlPasteValues
        End If
Next
End With

A+

Nikel ca marche

Je n'avais pas remarqué l'utilité des "."

Merci beaucoup!

Rechercher des sujets similaires à "eviter selection feuilles macro"