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 :

copie d'une plage de cellules : subscript out of range


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Points : 134
    Points
    134
    Par défaut copie d'une plage de cellules : subscript out of range
    Bonjour,

    ça fait depuis ce matin que j'essaie de copier une plage de cellule d'un fichier à un autre, je n'y arrive pas. Voici le code que j'utilise et j'ai un message : "error runtime 9 subscript out of range".
    Si quelq'un peut m'aider, merci d'avance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
            For i = 1 To DerniereLigne
     
    Application.Workbooks(" & nom & .xlsx").Worksheets("Feuil1").Range("A & i & : I & i & ").Value = _
    Application.Workbooks(" & nom & .xls").Worksheets("Feuil1").Range("A & i & :I & i & ").Value
     
             Next
    Là je ne sias plus que faire . Merci

  2. #2
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Points : 116
    Points
    116
    Par défaut
    Bonjour,

    Essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks(" & nom & ".xlsx").Worksheets("Feuil1").Range("A1:I "& DerniereLigne).copy Destination:=Workbooks(" & nom & ".xls").Worksheets("Feuil1").Range("A1")
    pour voir...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    S'agissant d'une boucle, je pense plutôt à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i = 1 To DerniereLigne
               
    Application.Workbooks(nom & ".xlsx").Worksheets("Feuil1").Range("A" & i & ": I" & i).Value = _
    Application.Workbooks(nom & ".xls").Worksheets("Feuil1").Range("A" & i & ":I" & i).Value
     
             Next

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Points : 134
    Points
    134
    Par défaut
    Merci d'avoir répondu,
    J'ai tapé ton code en retirant deux " qui ne passaient pas à la compilation, mais j'ai toujours le même message d'erreur : "Runtime error 9 subscript out of range"

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bizarre, car chez moi cela fonctionne.

    Mais il n'y a pas que deux " à supprimer et il y en a à ajouter.

    Une variable peut être précédée ou suivie de & mais jamais de ".

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Points : 134
    Points
    134
    Par défaut
    Merci Jacques Jean ainsi que toi Neiluj26, le deuxième code passe parfaitement et dire que j'y ai passé la matinée.
    Par contre,si je veux insérer les donneés dans le fichier xlsx sans écrasez le reste. Suis je obligé de faire des inserts de ligne avant de copier ou y a t il une méthode plus simple.

    Merci

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Points : 134
    Points
    134
    Par défaut
    J'ai l'impression qu'il ya un petit décalage dans nos messages. Ton code fonctionne parfaitement.
    Et maintenant, je me demandais si simplement, on pouvait faire la copie sur la premiere ligne du fichier xlsx sans écraser les données dejà existants, ceux ci descendraient.

    Ma question était peut être mal posé :
    LE code précédent écrase mes données.
    Comment faire pour qu'il se copie sans écraser les données existantes.

    Merci

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Vous voulez dire que votre Feuil2 contient déjà des données ?

    Si c'est le cas, il faut deux variables "DernièreLigne", je vais les nommer Dl1 pour la Feuil1 et Dl2 pour la Feuil2 (c'est plus court).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i = 1 To Dl1
    Application.Workbooks(nom & ".xlsx").Worksheets("Feuil2").Range("A" & Dl2 +1 & ": I" & Dl2 + 1).Value = _
    Application.Workbooks(nom & ".xls").Worksheets("Feuil1").Range("A" & i & ":I" & i).Value
     
    Dl2 = Dl2 + 1
             Next
    Sinon, précisez.

    Encore une erreur que j'ai rectifiée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A" & Dl2 + 1 & ": I" & Dl2 + 1).Value =
    
    J'avais oublié le + 1 en rouge.
    Dernière modification par AlainTech ; 28/08/2010 à 15h01. Motif: Fusion de 2 messages

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Points : 134
    Points
    134
    Par défaut
    Merci beaucoup,
    J'ai beaucoup de leçons à tirer de ce poste, et je le reprendrai volontiers à tête reposée.
    Sur vba, j'ai beaucoup de mal pour mélanger variables et non variables. Avez vous un lien qui reprend tout ça.
    Par exemple, j'ai l'impression que quelque fois, les chaines de caratère sont entourés de "" d'autres fois c'est pas nécessaire.
    Si vous avez un lien qui reprend tout ça, je suis preneur.
    En tout merci pou votre aide car j'ai passé toute ma matinée de réaliser cette copie.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Une première réponse, il ne faut pas confondre "chaînes de caractères" et variables texte (string).

    Si vous voulez entrer du texte dans une cellule, dans un TextBox ou autre ListBox il faut mettre les guillemets, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1") = "Bonjour"
    Si vous utilisez une variable : montexte = "Bonjour" il faut écrire :

    car si vous écrivez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1") = "montexte"
    "A1" va contenir montexte et nom la valeur attribuée à cette variable.

    Pour la concaténation de texte et de variables texte (String) vous avez l'exemple dans le code du précédent message. Un rappel :

    Vous voulez afficher en "A1" : Bonjour, puis un nom affecté a une variable de type string.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim nom As String
    nom = "une_tite_question"
    Range("A1") = "Bonjour, " & nom
    Jusque-là c'est simple, non !

    Vous pouvez aussi regarder :
    http://excel.developpez.com/cours/

    et particulièrement la partie consacrée à la programmation et à l'utilisation des variables.

    Ici :
    http://silkyroad.developpez.com/VBA/LesVariables/#LII-E

    avec entre autres les différents types de variables

    ou encore ici, un fichier à télécharger :
    http://bidou.developpez.com/article/VBA/
    Dernière modification par Invité ; 24/08/2010 à 20h18.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Points : 134
    Points
    134
    Par défaut
    Bonjour,
    Merci d'avoir pris le temps de me répondre et de m'orienter vers ces docs.
    J'ai un week end lecture en perspective

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 354
    Points : 134
    Points
    134
    Par défaut
    Bonjour,

    d'abord
    Les exemples que vous avez donné sont très clair , mais prenons un autre exemple.
    Partons de : Range("A1")
    Je veux mettre cet exemple dans une boucle donc je vais utiliser un indice i
    Après vos explications, je pensais l'écrire comme ça :

    Range("""A" & i & """) => je double quote pour protéger mes guillemets
    Mais ça fait une erreur de compilation.
    Par contre au cours de la discussion, vous aviez dit :
    S'agissant d'une boucle, je pense plutôt à :
    Existe t-il des règles particulières pour les boucles ?

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Par contre au cours de la discussion, vous aviez dit :

    S'agissant d'une boucle, je pense plutôt à :
    Existe t-il des règles particulières pour les boucles ?
    Lorsque j'ai écrit cela, c'était en fonction de la réponse de neiluj26 qui oubliait justement qu'il devait s'agir d'une boucle avec le code ci-dessous (et d'autre part il y avait également des guillemets en trop).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(" & nom & ".xlsx").Worksheets("Feuil1").Range("A1:I "& DerniereLigne).copy Destination:=Workbooks(" & nom & ".xls").Worksheets("Feuil1").Range("A1")
    La règle est la même dans une boucle ou ailleurs, les variables ne sont pas incluses dans des guillemets et il n'y a aucune raison de doubler ceux-ci :

    C'est seulement si vous voulez affecter un texte comprenant des guillemets qu'il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Range("A1") = """une_tite_question"""
    ou
    nom =  """une_tite_question"""
    Range("A" & i) = nom
    Le résultat dans la cellule sera : "une_tite_question"

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

Discussions similaires

  1. Problème de copie d'une plage de cellules avec case à cocher
    Par sab_info dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/05/2013, 14h32
  2. Réponses: 4
    Dernier message: 20/04/2012, 20h49
  3. faire une copie d'une plage de cellules sur x feuilles
    Par La Zélie dans le forum Excel
    Réponses: 4
    Dernier message: 11/06/2008, 08h55
  4. Copie d'une plage de cellules
    Par Jeanvaljean44 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/01/2008, 17h46
  5. Problème de copie d'une plage de cellule
    Par Boonichou dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/08/2007, 17h31

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