IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA EXCEL - copie d'un range sans affichage


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien Multiservice
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Technicien Multiservice

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Par défaut VBA EXCEL - copie d'un range sans affichage
    Bonjour à tous,

    Je me tourne vers vous parce que je sèche, je pense que malgré toutes mes recherches d'aide sur le net je ne trouve pas la solution.

    Je cherche à copier un Range d'une feuille sur une autre, mais sans afficher la feuille source "IMPORTANTAR".

    .....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheets("IMPORTANTAR").Range(Cells(LigneEnCours, 1), Cells(LigneEnCours, 19)).Copy
    Worksheets(NomGestionnaire).Range(Cells(LigneEnCoursImport, 1), Cells(LigneEnCoursImport, 19)).PasteSpecial
    ....

    voila concrètement ce que je veux faire, ou du moins :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets(NomGestionnaire).Range(Cells(LigneEnCoursImport, 1), Cells(LigneEnCoursImport, 19)).value = Worksheets("IMPORTANTAR").Range(Cells(LigneEnCours, 1), Cells(LigneEnCours, 19)).value
    j'ai essayé avec et sans .value, le résultat est le même.
    Message d'erreur en retour "ne fait pas partie de la sélection bla bla", c'est à dire que cela ne fonctionne pas tant que ma feuille "IMPORTANTAR" n'est pas selectionnée

    Quelqu'un aurait-il une idée, je bloque depuis des jours dessus ? Activeworkbook ? thisworkbook ?
    application.screenupdating = false ne résout pas mon problème, même si cela paraissait être la méthode la plus simple.

    Je pense que je n'arrive pas à travailler simultanément sur une feuille source et une feuille cible, enfin c'est la conclusion à laquelle j'en suis arrivé.

    Merci d'avance pour votre intéressement.

    cdlt,

  2. #2
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    Bonjour,

    Je pense que cela vient de tes "Cells(LigneEnCours, 19)".

    Conseil :
    Définit 2 variables Worksheet et attribue tes onglets à ces deux variables.
    Il te faut un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim x as worksheet
    dim y as worksheet
    set x = Worksheets(NomGestionnaire)
    set y = Worksheets("IMPORTANTAR")
    x.Range(x.Cells(LigneEnCoursImport, 1), x.Cells(LigneEnCoursImport, 19)).value = y.Range(y.Cells(LigneEnCours, 1), y.Cells(LigneEnCours, 19)).value
    A mon avis, sur la partie y, tel que tu l'as écrit, il va lire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ' Mon y
    y.Range(y.Cells(LigneEnCours, 1), y.Cells(LigneEnCours, 19)).value
     
    ' Ton y
    y.Range(x.Cells(LigneEnCours, 1), x.Cells(LigneEnCours, 19)).value
    Cordialement,

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Whitewolf79 Voir le message
    Je cherche à copier un Range d'une feuille sur une autre, mais sans afficher la feuille source "IMPORTANTAR".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheets("IMPORTANTAR").Range(Cells(LigneEnCours, 1), Cells(LigneEnCours, 19)).Copy
    Worksheets(NomGestionnaire).Range(Cells(LigneEnCoursImport, 1), Cells(LigneEnCoursImport, 19)).PasteSpecial
    Je ne comprends pas ta demande.
    Si "IMPORTANTAR" n'est pas la feuille active, ces deux lignes de code vont faire la copie sans afficher la feuille source.
    Donc, ce que tu proposes là correspond déjà à ta demande en corrigeant juste un détail : pour chaque Cells, indiquer la feuille mère (il serait plus propre de le faire avec un With).

    Petit détail : ton code pourrait être simplifié en mettant la seconde ligne à la suite de la première et en supprimant ".PasteSpecial".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("IMPORTANTAR").Range("A" & LigneEnCours & ":S" & LigneEnCours).Copy Worksheets(NomGestionnaire).Range("A" & LigneEnCoursImport & ":S" & LigneEnCoursImport)
    ou encore mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("IMPORTANTAR").Range("A1:S1").Offset(LigneEnCours - 1, 0).Copy Worksheets(NomGestionnaire).Range("A1:S1").Offset(LigneEnCoursImport - 1, 0)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien Multiservice
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Technicien Multiservice

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Par défaut
    Tout d'abord, merci à tous pour vos réponses rapides,

    Menhir, je comprends ta question, mais en fait mes 2 feuilles sont sur le même classeur (J'en fait une copie au préalable pour éviter l'accés répétitif à un autre classeur. Néanmoins, ta ligne avec offset à l'air interessante, ce n'est pas une fonction que j'utilise mais qui mérite que je m'y penche dessus.

    Je viens d'essayer la méthode de gado2600, cela fonctionne, même si je ne comprends pas l'interêt du double appel à la feuille.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x.Range(x.Cells(LigneEnCoursImport, 1), x.Cells(LigneEnCoursImport, 19)).value = y.Range(y.Cells(LigneEnCours, 1), y.Cells(LigneEnCours, 19)).value
    x.range suivi de x.cells puisque les Cells sont comprises dans mon Range demandé.

    Les copier sont données, par contre la mise en forme ne l'est pas comment la transposer également d'une feuille à l'autre ? il y a-t-il un paramètre particulier à inserer ? ou une ligne de code supplémentaire uniquement pour copier la mise en forme ?

    merci a vous tous de votre réactivité

    cdlt,

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Whitewolf79 Voir le message
    Menhir, je comprends ta question, mais en fait mes 2 feuilles sont sur le même classeur
    Je ne vois pas en quoi ça interfère avec ce que tu demandes.

    x.range suivi de x.cells puisque les Cells sont comprises dans mon Range demandé.
    Non, les Cells restent des objets autonomes.
    Si tu n'indiques pas à quel feuilles ils sont reliés, VBA les reliera à la ActiveSheet.
    Et si ton Range n'est pas lié à ActiveSheet, c'est comme essayer de constituer une zone dans une feuille avec les éléments d'une autre feuille : VBA ne comprend plus et il plante.

    Par contre, si tu remplaces les Cells par des coordonnées en mode Texte (comme je l'ai fait dans les lignes que je propose), il n'y a pas de problème.

    Les copier sont données, par contre la mise en forme ne l'est pas comment la transposer également d'une feuille à l'autre ?
    Il suffit d'indiquer à quelle feuille appartiennent les cellules sur laquelle s'applique la mise en forme.

Discussions similaires

  1. [VBA-excel] import de fichier txt sans délimiteur de texte
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/01/2008, 05h49
  2. [VBA Excel] - Copie Aléatoire de données entre 2 feuilles
    Par ethan64 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/07/2006, 17h34
  3. [VBA][Excel] Copie de feuille a l'identique
    Par le_sonic dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/01/2006, 16h48
  4. [VBA][Excel] Copie écran
    Par KOFJCH dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/12/2005, 15h01
  5. vba excel - Comment saisir une cellule sans faire entrer
    Par brethomeau dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/11/2005, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo