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 d'incrémentation et de définition [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut Problème d'incrémentation et de définition
    Bonjour,

    J'ai un fichier excel avec des feuilles vertes et des feuilles jaunes. Il faudrait que les cellules tant des feuilles jaune (i) soit copiées/collées dans les cellules tant des feuilles verte (i).
    Toutes les feuilles vertes sont à gauche et les feuilles jaunes à droite.

    J'ai donc créé la macro suivante :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Sub Macro5()
     
    Dim i, FJ, FV As Integer
    FJ = 0
    FV = 0
    "FJ nombre de feuilles jaunes
    "FV de feuilles vertes
     
    Dim Current As Worksheet
    For Each Current In Worksheets
    Current.Activate
    If Current.Tab.ColorIndex = 6 Or Current.Tab.ColorIndex = 27 Then
    FJ = FJ + 1
    End If
    Next Current
     
    For Each Current In Worksheets
    Current.Activate
    If Current.Tab.ColorIndex = 4 Then
    FV = FV + 1
    End If
    Next Current
    MsgBox FV
    MsgBox FJ
     
    'Compte + vérification
     
    Dim Fverte() As String
    ReDim Fverte(1 To FV)
    For i = 1 To FV
        Fverte(i) = Worksheets(i).Name
    Next i
    Dim Fjaune() As String
    ReDim Fjaune(FV + 1 To FV + FJ)
    For i = FV + 1 To FV + FJ
        Fjaune(i) = Worksheets(i).Name
    Next i
    "donne un nom pour chaque feuille afin de réaliser l'opération suivante (de dire cellule tant de FJ(1) dans cellule tant de FV(1) etc...
     
    For i = 1 To FV
        Sheets(Fjaune(i)).Range("O5").Copy
        Sheets(Fverte(i)).Range("C11").Select
        ActiveSheet.Paste
        Sheets(Fjaune(i)).Range("O6").Copy
        Sheets(Fverte(i)).Range("C9").Select
        ActiveSheet.Paste
        Sheets(Fjaune(i)).Range("L6").Copy
        Sheets(Fverte(i)).Range("C8").Select
        ActiveSheet.Paste
    Next i
    "Truc qui bug
     
     
    End Sub
    J'ai un problème ligne 41. Erreur 9 : l'indice n'appartient pas à la sélection.
    Je ne vois pas comment faire... Peut-être ai-je mal définie mets noms de feuilles ?
    Ou bien peut-être est-ce la ponctuation de la ligne en question...

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    1) Déjà, ca serait beaucoup plus simple de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets(Fverte(i)).Range("C11") = Sheets(Fjaune(i)).Range("O5")
    Sheets(Fverte(i)).Range("C9") = Sheets(Fjaune(i)).Range("O6")
    Sheets(Fverte(i)).Range("C8") = Sheets(Fjaune(i)).Range("L6")
    2) Met tout tes "Dim" au tout début de ta fonction.

    3) Les commentaires sont avec le signe ' et pas "

    4) Test déjà avec ces changements !

    EDIT : Attention, si FV et FJ n'ont pas la même taille tu vas avoir un problème...

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Par défaut
    Bonjour,

    ton problème viens du fait que tu déclare deux tableaux (Fjaune et Fverte)

    Fverte ne vas pas poser problème, sa sera Fjaune car tu l'initialise de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim Fjaune(FV + 1 To FV + FJ)
    si 2 feuilles vertes et 2 feuilles jaunes tu auras:

    Fjaune(3) et Fjaune(4) comme champs disponibles dans FJaune

    Tu déclares de la façon suivante: et tu remplis bien FJaune(3) et Fjaune(4)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = FV + 1 To FV + FJ
        Fjaune(i) = Worksheets(i).Name
    Next i
    mais par la suite, sa pêche: tu demandes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For i = 1 To FV
        Sheets(Fjaune(i)).Range("O5").Copy
        Sheets(Fverte(i)).Range("C11").Select
        ActiveSheet.Paste
        Sheets(Fjaune(i)).Range("O6").Copy
        Sheets(Fverte(i)).Range("C9").Select
        ActiveSheet.Paste
        Sheets(Fjaune(i)).Range("L6").Copy
        Sheets(Fverte(i)).Range("C8").Select
        ActiveSheet.Paste
    Next i
    Donc: tu commences par demande Fjaune(1), qui n'existe pas!!
    voici ce qu'il faudrait mettre (enfin je pense... si FV et FJ n'ont pas la même taille, sa va planter quand même)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For i = 1 To FV
        Sheets(Fjaune(i + FV)).Range("O5").Copy
        Sheets(Fverte(i)).Range("C11").Select
        ActiveSheet.Paste
        Sheets(Fjaune(i + FV)).Range("O6").Copy
        Sheets(Fverte(i)).Range("C9").Select
        ActiveSheet.Paste
        Sheets(Fjaune(i + FV)).Range("L6").Copy
        Sheets(Fverte(i)).Range("C8").Select
        ActiveSheet.Paste
    Next i

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Ho oui bien vu Supierre !

    Bon du coup tu as raison et j'en conclus que c'est même inutile de définir feuilles jaunes et feuilles vertes et j'ai repris le code comme ceci :

    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
    27
    28
    Sub Macro5()
     
    Dim i, Nbr As Integer
    Nbr = 0
     
    Dim Current As Worksheet
    For Each Current In Worksheets
    Current.Activate
    If Current.Tab.ColorIndex = 6 Or Current.Tab.ColorIndex = 27 Then
    Nbr = Nbr + 1
    End If
    Next Current
     
    MsgBox Nbr
     
    Dim Feufeuille() As String
    ReDim Feufeuille(1 To 2 * Nbr)
    For i = 1 To 2 * Nbr
    Feufeuille(i) = Worksheets(i).Name
    Next
     
    For i = 1 To Nbr
    Sheets(Feufeuille(i)).Range("C11") = Sheets(Feufeuille(i + Nbr)).Range("O5")
    Sheets(Feufeuille(i)).Range("C9") = Sheets(Feufeuille(i + Nbr)).Range("O6")
    Sheets(Feufeuille(i)).Range("C8") = Sheets(Feufeuille(i + Nbr)).Range("L6")
    Next i
     
    End Sub
    La macro se déroule bien, je n'ai pas de message d'erreur et ça marche sur environ 90% de mes feuilles (sur les autres il doit y avoir de la magie noire à l'intérieur) !
    En tout cas merci beaucoup à tous les deux !



    PS : oui y a toujours le même nombre de feuilles jaunes et vertes.

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

Discussions similaires

  1. [DOS] Problème pour incrémenter un pointeur de chaîne
    Par Weedou dans le forum Assembleur
    Réponses: 1
    Dernier message: 09/04/2007, 20h51
  2. Probléme d'incrémentation d'heure et de minute
    Par Masmeta dans le forum C++Builder
    Réponses: 3
    Dernier message: 28/03/2007, 08h38
  3. Problème d'incrémentation automatique
    Par ist2008 dans le forum Access
    Réponses: 3
    Dernier message: 19/04/2006, 20h21
  4. Problème d'incrémentation automatique
    Par ist2008 dans le forum Access
    Réponses: 1
    Dernier message: 19/04/2006, 14h30
  5. [XSL] Problème d'incrémentation
    Par OXyGN dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 28/01/2005, 12h48

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