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 - Problème d'insertion de ligne avec copie de formules [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Points : 52
    Points
    52
    Par défaut VBA - Problème d'insertion de ligne avec copie de formules
    Bonjour à tous,

    Voici le problème pour lequel je sollicite SVP votre aide :

    1 - Dans les cellules suivantes (A2 à B100) j'ai une formule du type (bien évidemment il y a en plus d'autres cellules utilisées sur chaque ligne) :

    A2 --> =SI(A2=A1;FaireCalcul_1;FaireCalcul_2) B2 --> =A2+C2
    A3 --> =SI(A3=A2;FaireCalcul_1;FaireCalcul_2) B3 --> =A3+C3
    A4 --> =SI(A4=A3;FaireCalcul_1;FaireCalcul_2) B4 --> =A4+C4
    A5 --> =SI(A5=A4;FaireCalcul_1;FaireCalcul_2) B5 --> =A5+C5
    " "
    " "
    A100 --> =SI(A100=A99;FaireCalcul_1;FaireCalcul_2) B100 --> =A100+C100

    2 - Pour insérer une ligne j'utilise la procédure suivante (appelée depuis un simple bouton) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub InsèreCopieLigne()
              ActiveCell.EntireRow.Insert
              Rows(ActiveCell.Row + 1).Copy Rows(ActiveCell.Row)
              On Error Resume Next
              Rows(ActiveCell.Row).SpecialCells(xlCellTypeConstants,  23).ClearContents
            End Sub
    3 - Si maintenant j'insère par exemple une ligne entre les cellules A3 et A4, à l'aide de ma procédure : plus rien ne va !
    En effet je constate qu'un décalage se crée dans les références, ce qui perturbe toute la logique mise en place initialement. Voilà les "dégats" :

    A2 --> =SI(A2=A1;FaireCalcul_1;FaireCalcul_2) B2 --> =A2+C2
    A3 --> =SI(A3=A2;FaireCalcul_1;FaireCalcul_2) B3 --> =A3+C3
    A4 --> =SI(A4=A2;FaireCalcul_1;FaireCalcul_2) B4 --> =A4+C4 <-- Ligne insérée
    A5 --> =SI(A5=A3;FaireCalcul_1;FaireCalcul_2) B5 --> =A5+C5 <-- ligne A4 avant insertion et qui a été décalée d'un rang vers le bas
    A6 --> =SI(A6=A5;FaireCalcul_1;FaireCalcul_2) B6 --> =A6+C6

    Au final dans la formule des cellules A4 et A5 la référence à la ligne précédente n'est pas correctement mise à jour que ce soit pour la ligne insérée comme pour la ligne décalée.
    Alors que pour les cellules B4 et B5 tout est OK.

    Y-a-t-il un truc pour palier à ce phénomène ?

    J'espère avoir été suffisamment clair dans les explications du Pb rencontré.

    D'avance MERCI pour m'aider à corriger ce qui ne va pas.
    Cordialement
    oracle7556

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    A2 --> =SI(A2=A1;FaireCalcul_1;FaireCalcul_2)
    étrange formule en A2 qui fait référence à A2
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Points : 52
    Points
    52
    Par défaut
    Bonjour mercatog,

    Je conçois aisément que cette notation puisse être étonnante mais j'ai besoin dans mon process d'exploiter la valeur précédente de la cellule pour déterminer le type de calcul à appliquer à la cellule suivante (en fait une incrémentation dont le pas est variable). C'est tout simple sauf que dans le cas présent Excel ne réagit pas comme je l'escomptais lorsque j'insère une nouvelle ligne. A moins que tu ai une autre idée d'algorythme pour gérer cela ?
    A noter que le problème est le même si je place mon test dans une autre cellule comme par exemple :

    A1 --> "X"
    A2 --> "Y" B2 --> =SI(A2=A1;FaireCalcul_1;FaireCalcul_2)
    A3 --> "Y" B3 --> =SI(A3=A2;FaireCalcul_1;FaireCalcul_2)
    etc...

    Cordialement
    oracle7

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Si on a une formule en B2=A1+A2.
    et on insère une ligne à la place de la ligne 2
    la formule devient en B3=A1+A3!
    Parce qu'on a pas touché à la ligne 1.

    Tu peux palier à ceci par vba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("B3").formular1c1="=R[-1]C[-1]+RC[-1]
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Points : 52
    Points
    52
    Par défaut
    Bonsoir mercatog

    Ton idée est bonne, j'avais aussi envisagé ce type de solution mais comment maintenant l'intégrer dans ma procédure d'insertion de ligne (voir le premier post ci-dessus), là je ne sais pas faire.

    Cordialement
    oracle7556

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Sur une ligne combien tu as de formules?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Points : 52
    Points
    52
    Par défaut
    Bonjour mercatog

    Sur une ligne de 42 colonnes j'ai :
    - 2 cellules qui comportent une "grosse" formule du type qui me pose le problème évoqué ci-dessus (i.e. faisant référence à une ou plusieurs cellules de la ligne précédente).
    - toutes les autres cellules si elles ne comportent pas de formules tout aussi complexes, ont au moins une MFC avec formule elle aussi souvent omplexe.

    De fait j'ai un tableau assez complexe car très dynamique dans son affichage d'une part et d'autre part à cause de la multitude de contrôles de cohérence et de renseignement automatique de données en fonctions d'autres données.

    Aussi si j'ai des formules qui "s'envoient en l'air" lors d'une insertion simple de ligne, cela a rapidement des conséquences importantes et c'est vite la catastrophe dans les données.

    Bon cela dit, je réfléchis par ailleurs à gérer mes calculs (fonctions de données précédentes) par une fonction VBA pour éviter ces déboires.
    Je vais voir ce que cela donne et auquel cas je changerais mon "fusil d'épaule" ...

    Cordialement
    oracle7556

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Points : 1 394
    Points
    1 394
    Par défaut
    et en utilisant des références absolues dans votre feuille de calcul, est ce qu'on ne peut pas résoudre ce problème (la réécriture des formules va être longue malheureusement)

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Points : 52
    Points
    52
    Par défaut
    Bonjour à tous,

    Ne vous cassez plus la tête sur ce problème. Pour moi il n'en est plus un.
    Avec une fonction VBA et quelques ".offset(-1, X)" bien placés j'arrive à mes fin et exit les formules dans les cellules faisant référence à la ligne précédente. L'insertion normale est "nickelle" maintenant.

    Encore MERCI à tous ceux qui ont cherché à m'aider sur ce coup.
    A+

    Cordialement
    oracle7

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

Discussions similaires

  1. Problème avec l'ordre d'insertion des lignes avec BULK INSERT
    Par TomtomGesti dans le forum Développement
    Réponses: 3
    Dernier message: 18/07/2014, 16h50
  2. [XL-2007] Insertion d'une ligne avec copie de certains éléments
    Par Zentin dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/07/2014, 17h48
  3. [XL-2007] Insertion ligne avec copie certaines cellules ligne précédente
    Par John Parker dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 23/08/2013, 16h42
  4. [XL-2003] insertion de ligne en vba avec copie de formules
    Par Adweuz dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/05/2011, 08h40
  5. Insertion de ligne avec VBA
    Par ANTMA dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 24/09/2007, 14h10

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