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 :

Problème pour travailler sur deux feuilles [XL-2010]


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
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Par défaut Problème pour travailler sur deux feuilles
    Bonjour à tous,

    Voici mon problème: j'ai crée une macro (assez simple sur le fond) qui copie/coupe et colle ensuite dans différentes feuilles à certains endroits. Cependant, pour optimiser mon code je voudrais chasser les Activate pour que mes feuilles ne s'affichent pas à l'écran et gagner du temps sur le processus.
    Voici mon code, celui qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub Archive()
    Dim Classeur As Workbook, Fl As Worksheet, F2 As Worksheet
    Set Classeur = ThisWorkbook
    Set F1 = Classeur.Worksheets("TDB CDT")
    Set F2 = Classeur.Worksheets("Archives Commentaires")
     
    For Ligne = 4 To F1.Range("A" & Rows.Count).End(xlUp).Row
        If Not IsEmpty(F1.Cells(Ligne, "M").Value) And Not IsEmpty(F1.Cells(Ligne, "N").Value) Then
     
        'Décalage archive
        F2.Activate
        Range(Cells(Ligne, "B"), Cells(Ligne, "AA")).Select
        Selection.Cut Destination:=Range(Cells(Ligne, "E"), Cells(Ligne, "AD"))
     
        'Archivage
        F1.Activate
        Range(Cells(Ligne, "J"), Cells(Ligne, "L")).Cut Destination:=F2.Cells(Ligne, "B")
     
        'Décalage commentaire
        F1.Activate
        Range(Cells(Ligne, "M"), Cells(Ligne, "O")).Cut Destination:=F1.Cells(Ligne, "J")
     
        End If
    Next Ligne
    End Sub
    Voilà, je suis sûr que ce code peut être largement optimisé. Ce que je ne comprend pas, c'est que quand j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        'Décalage archive
        F2.Range(Cells(Ligne, "B"), Cells(Ligne, "AA")).Cut Destination:=Range(Cells(Ligne, "E"), Cells(Ligne, "AD"))
     
        'Archivage
        F1.Range(Cells(Ligne, "J"), Cells(Ligne, "L")).Cut Destination:=F2.Cells(Ligne, "B")
     
        'Décalage commentaire
        F1.Range(Cells(Ligne, "M"), Cells(Ligne, "O")).Cut Destination:=F1.Cells(Ligne, "J")
    à la place.
    J'ai une erreur sur Range qui ne connait "_Worksheet" lors de la compil alors que l'écriture me parait sensée et la syntaxe correcte.
    Cela vous parle t il ?
    Merci pour l'aide et/ou commentaires que vous pourrez me fournir.
    Merci d'avance.

    Corentin Bardon

  2. #2
    Membre expérimenté
    Homme Profil pro
    développeur
    Inscrit en
    Février 2013
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : développeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 123
    Par défaut
    Bonjour,

    F1 et F2 sont des variables locales, elles ne peuvent pas être utilisées en dehors de la fonction Archive().
    Il faut les déclarer comme variables globales en dehors de la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Public Fl As Worksheet, F2 As Worksheet
    Sub Archive()
    Dim Classeur As Workbook
    Set Classeur = ThisWorkbook
    Set F1 = Classeur.Worksheets("TDB CDT")
    Set F2 = Classeur.Worksheets("Archives Commentaires")
     
    For Ligne = 4 To F1.Range("A" & Rows.Count).End(xlUp).Row
        If Not IsEmpty(F1.Cells(Ligne, "M").Value) And Not IsEmpty(F1.Cells(Ligne, "N").Value) Then
     
        'Décalage archive
        F2.Activate
        Range(Cells(Ligne, "B"), Cells(Ligne, "AA")).Select
        Selection.Cut Destination:=Range(Cells(Ligne, "E"), Cells(Ligne, "AD"))
     
        'Archivage
        F1.Activate
        Range(Cells(Ligne, "J"), Cells(Ligne, "L")).Cut Destination:=F2.Cells(Ligne, "B")
     
        'Décalage commentaire
        F1.Activate
        Range(Cells(Ligne, "M"), Cells(Ligne, "O")).Cut Destination:=F1.Cells(Ligne, "J")
     
        End If
    Next Ligne
    End Sub
    Essaye comme ça.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Par défaut
    Merci de votre réponse rapide mais le problème persiste. Il m'annonce une :"
    erreur d'exécution 1004
    La méthode 'Range' de l'objet '_Worksheet' a échoué".
    Le débug me surligne ma ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    F2.Range(Cells(Ligne, "B"), Cells(Ligne, "AA")).Cut Destination:=Range(Cells(Ligne, "E"), Cells(Ligne, "AD"))
    Je ne comprend pas car il suffit juste d'aller chercher les valeurs sur les feuilles, et sans les activer cela est faisable d'habitude !!

    Corentin Bardon

  4. #4
    Membre expérimenté
    Homme Profil pro
    développeur
    Inscrit en
    Février 2013
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : développeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 123
    Par défaut
    La variable Ligne n'est probablement pas déclarée en variable globale non plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Fl As Worksheet, F2 As Worksheet, Ligne as integer

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Par défaut
    Le problème reste le même...

  6. #6
    Membre expérimenté
    Homme Profil pro
    développeur
    Inscrit en
    Février 2013
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : développeur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 123
    Par défaut
    Cells prend pour argument le numero de ligne et de colonne donc il faut remplacer les lettres par les chiffres correspondant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Public Fl As Worksheet, F2 As Worksheet, ligne as integer
    Sub Archive()
    Dim Classeur As Workbook
    Set Classeur = ThisWorkbook
    Set F1 = Classeur.Worksheets("TDB CDT")
    Set F2 = Classeur.Worksheets("Archives Commentaires")
     
    For Ligne = 4 To F1.Range("A" & Rows.Count).End(xlUp).Row
        If Not IsEmpty(F1.Cells(Ligne, 13).Value) And Not IsEmpty(F1.Cells(Ligne, 14).Value) Then
     
        'Décalage archive
        F2.Activate
        Range(Cells(Ligne, 2), Cells(Ligne, 27)).Select
        Selection.Cut Destination:=Range(Cells(Ligne, 5), Cells(Ligne, 30))
     
        'Archivage
        F1.Activate
        Range(Cells(Ligne, 10), Cells(Ligne, 12)).Cut Destination:=F2.Cells(Ligne, 2)
     
        'Décalage commentaire
        F1.Activate
        Range(Cells(Ligne, 13), Cells(Ligne, 15)).Cut Destination:=F1.Cells(Ligne, 10)
     
        End If
    Next Ligne
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     'Décalage archive
        F2.Range(Cells(Ligne, 2), Cells(Ligne, 27)).Cut Destination:=F2.Range(Cells(Ligne, 5), Cells(Ligne, 30))
     
        'Archivage
        F1.Range(Cells(Ligne, 10), Cells(Ligne, 12)).Cut Destination:=F2.Cells(Ligne, 2)
     
        'Décalage commentaire
        F1.Range(Cells(Ligne, 13), Cells(Ligne, 15)).Cut Destination:=F1.Cells(Ligne, 10)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. travailler sur deux système pour la même session
    Par slim_java dans le forum Windows Vista
    Réponses: 2
    Dernier message: 19/12/2009, 22h17
  2. Problème de script VB pour comparateurs sur plusieurs feuille
    Par Kerberos69 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/03/2009, 13h49
  3. [E-03] problème pour travailler sur 2 fichiers en même temps
    Par Emily2711 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 24/02/2009, 12h06
  4. [MYSQL] Problème ORDER BY sur deux champs
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 8
    Dernier message: 14/10/2005, 16h46
  5. Problème de requêtes sur deux tables
    Par Pymm dans le forum Access
    Réponses: 6
    Dernier message: 06/09/2005, 09h06

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