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 :

[Débutant] Copier/Coller qui ne se passe pas comme prévu si formule contient !


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut [Débutant] Copier/Coller qui ne se passe pas comme prévu si formule contient !
    Bonjour,

    Je fais une copie de la formule contenue dans une cellule via un drag and drop du coin inférieur droit de cette cellule. Voici le code correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Rows(NumRow).Select
    Selection.Copy
    Selection.Insert Shift:=xlDown
    Tout se passe bien, sauf pour les cellules contenant une formule de la forme :
    =1,1*1,2*[Data.xls]Facteur!$X35
    (on est sur la 35ème ligne)

    Dans ce cas-là, au lieu de faire la passer la formule à
    =1,1*1,2*[Data.xls]Facteur!$X36
    quand Excel la recopie dans la cellule de la ligne 36, et on reste avec X35.

    Quelqu'un saurait pourquoi? Et comment contourner le problème simplement?
    Pour l'instant, je fais ceci pour corriger le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Cells(NumRow - 1, 2).Select
    Application.CutCopyMode = False
    Selection.AutoFill Destination:=Range(Cells(NumRow - 1, 2), Cells(LastNumRow, 2)), Type:=xlFillDefault
    Ca fonctionne, mais je me dis qu'il doit y avoir une option que j'ai oublié de spécifier et qui ferait ce qu'il faut automatiquement sans avoir à rajouter ce bout de code.

    Merci d'avance.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Effectivement, tu n'est pas obligé de sélectionner la cellule à copier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Range("A1").AutoFill Destination:=Range("A1:A5"), Type:=xlFillDefault
    Tu ajoutes le nom du classeur et de la feuille si nécessaire, c'est tout.
    A+

  3. #3
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Effectivement, mais ce n'était pas le but de ma question.

    Ma question était pourquoi un copy associé à un insert ne se comporte pas avec les formules contenant des "!" comme avec les autres formules?

    Avec une formule du style
    A35+B35
    ça donne
    A36+B36
    , alors qu'avec une formule contenant un "!", celle-ci n'est pas modifiée :
    =SI(NBCAR('Data'!A33)>0;'Data'!A33;"")
    reste
    =SI(NBCAR('Data'!A33)>0;'Data'!A33;"")
    ...

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Non, si tu mets les formules telles que tu les indiques, le N° de ligne est incrémenté dans les deux cas quand tu les recopies vers le bas.
    le "!" n'a rien à voir à l'histoire. Ce qui peut avoir une influence est la signification ou non de l'adresse de la cellule concernée, qui peut avoir 3 types et des mix de deux types
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set mc = Worksheets("Feuil1").Cells(1, 1)
    MsgBox mc.Address()                              ' $A$1
    MsgBox mc.Address(RowAbsolute:=False)         '$A1
    MsgBox mc.Address(ColumnAbsolute:=False)         'A$1
    MsgBox mc.Address(RowAbsolute:=False, ColumnAbsolute:=False)         ' A1
    MsgBox mc.Address(ReferenceStyle:=xlR1C1)        ' L1C1
    Bref, si tu conserves des adresses de lignes "absolues" (avec $) quand tu copies ta ligne, elle conserve son N°.
    Re-bref, pour que tes lignes s'incrémentent en cas de copie, la formule doit être du type "A1" ou "$A1" et non "$A$1" ou "A$1"
    Idem pour les colonnes.
    Tu peux vérifier
    A+

  5. #5
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Attention! Je ne parle pas de recopie vers le bas, mais d'insertion d'une ligne copiée... (je m'a trompé dans le premier post )

    Essaie de faire ça et tu verras ce qu'il se passe :
    1) met dans les cases de la première colonne d'une feuille nommée "Data" le numéro de ligne
    2) dans une seconde feuille du même classeur, rentre la formule suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NBCAR('Data!$Axx)>0;'Data'!$Axx;"")
    où xx représente le numéro de ligne
    3) sélectionne la ligne 33
    4) fais un copier
    5) fais un clic droit sur la ligne sélectionnée et je clique sur le menu "Insérer les cellules copiées"

    Résultat : en ligne 33 tu auras la fomule suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NBCAR('Suivi Détaillé'!$A32)>0;'Suivi Détaillé'!$A32;"")
    (A32 et non pas A33 comme je le voudrai) et dans les lignes suivantes tu auras les formules avec l'indice inférieur d'une unité au numéro de ligne.

    Si tu fais la même chose avec une formule n'ayant pas de "!" (autrement dit ne faisant pas référence à une cellule d'une autre feuille), tu auras bien les bons indices...

  6. #6
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Hello,

    j'ai fait ton test ...

    le résultat me paraît évident, insérer un contenu copié revient à 2 opérations :
    - déplacer la ligne courante vers le bas (il y a conservation des formules)
    - coller la ligne en question

    La ligne qui subit l'insertion voit logiquement ses indices décalés.

    Toute insertion / décalage entraine une rupture dans la suite des indices ...

    Que cherches-tu à faire, je n'ai sans doute pas bien compris.

    En revanche si en cellule A1 je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDIRECT("data!$A" & LIGNE(B1))
    Toute insertion ne décalera pas les indices ...

Discussions similaires

  1. Menu qui ne s'affiche pas comme prévu sous IE
    Par baggie dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 20/07/2012, 16h48
  2. Mission qui ne se passe pas comme prévu
    Par gueulederack dans le forum Emploi
    Réponses: 17
    Dernier message: 10/11/2011, 17h00
  3. Trigger qui ne s'execute pas comme prévu
    Par bringer dans le forum SQLite
    Réponses: 2
    Dernier message: 16/11/2009, 21h54
  4. [E-07] Copier/Coller qui ne marche pas
    Par bdx-77 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/12/2008, 07h00
  5. Ne pas recoder le copier/coller qui marche en standard
    Par cdtkoenig dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 22/10/2007, 18h29

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