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 :

Erreur formule suite à la suppression d'une ligne


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 48
    Points : 27
    Points
    27
    Par défaut Erreur formule suite à la suppression d'une ligne
    Bonjour à tous,

    Je travail actuellement sur un fichier possédant une base de données en Feuil1 gérée à l'aide d'un Userform, pour créer une nouvelle ligne, consulter, modifier ou supprimer.

    Mon soucis viens de la suppression de ligne via la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.EntireRow.Delete
    Sur ma Feuil2, je réalise des calculs à l'aide des données de la feuil1, la formule me posant des difficultés est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI.ENS($A$3:$A$5003;Feuil1!$K$15:$K$5015;"<="&B3;Feuil1!$L$15:$L$5015;">"&B3)
    Tout fonctionne, cependant lorsque je réalise une suppression de ligne via mon userform, la formule ne fonctionne plus et m'affiche l'erreur #Valeur. Lorsque je visualise celle-ci, je remarque que ma plage de la feuil1 est passée de $K$15:$K$5015 à $K$15:$K$5014.

    J'ai testé l'option de calcul manuel afin de faire dans un premier temps la suppression et ensuite le calcul mais cela ne fonctionne pas.

    Si quelqu'un aurait une idée de solution pour résoudre mon problème ?!

    Je vous remercie d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Tu peux récupérer la formule avant la suppression de ligne et la ré-appliquer après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim Formule As String
     
    Formule = Worksheets("Feuil2").Range("A1").Formula
    Selection.EntireRow.Delete
    Worksheets("Feuil2").Range("A1").Formula = Formule

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par ValentinLFs Voir le message
    lorsque je réalise une suppression de ligne via mon userform, la formule ne fonctionne plus et m'affiche l'erreur #Valeur. Lorsque je visualise celle-ci, je remarque que ma plage de la feuil1 est passée de $K$15:$K$5015 à $K$15:$K$5014.
    C'est tout à fait normal.
    Il se passerait la même chose si tu faisais une suppression "à la main" : la formule s'adapte à la suppression que tu as faite.

    Le formule SOMME.SI.ENS fait la somme d'une liste en fonction de conditions sur une autre liste. Pour que ça marche, les deux listes doivent être identiques.
    Donc, normalement, si tu supprimes une ligne dans Feuil1, il faudrait, parallèlement, supprimer la ligne équivalente dans Feuil2 pour garder la cohérence.
    Sinon, les lignes des deux feuilles ne correspondront pas, tu crées un décalage et les deux listes deviennent incohérentes.

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheets("Feuil2").Rows(Selection.Row - 12).Delete
    Selection.EntireRow.Delete
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 48
    Points : 27
    Points
    27
    Par défaut
    Bonjour, Theze, Menhir

    Dans un premier temps, merci pour vos réponses !

    Effectivement je n'avais pas pris en compte le fait que toute mes plages devaient rester de la même taille.

    Supprimer la ligne équivalente dans ma feuille de calcul (Feuil2) n'est pas possible puisque les colonnes à coté son également utilisé pour faire des calculs sur d'autres feuilles, si je supprime une ligne entière cela va interférer sur ces autres colonnes.

    Cependant, j'ai trouvé une astuce pour contourner le problème. J'ai créer un bouton avec une fonction permettant d'importer les valeurs des plages K et L sur ma feuille de calculs. Du coup lorsque je supprime ou ajoute une ligne sur la feuil1, rien n'interfère dans les formules puisqu'elles ne sont plus en lien direct, il me suffit d'actualiser les données via ce bouton pour ensuite faire les calculs.
    Cette solution fonctionne avec un petit point négatif puisque le temps de calcul est pour le coup beaucoup plus important dû notamment à l'importation des données, je penses.

    Je vais garder cette solution pour l'instant mais je retiens les vôtres si jamais j'ai vraiment besoin d'optimiser le temps de calcul quand je finaliserais mon fichier.

    Merci encore !

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par ValentinLFs Voir le message
    Supprimer la ligne équivalente dans ma feuille de calcul (Feuil2) n'est pas possible puisque les colonnes à coté son également utilisé pour faire des calculs sur d'autres feuilles, si je supprime une ligne entière cela va interférer sur ces autres colonnes.
    Dans ce cas, ne supprime qu'une seule cellule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheets("Feuil2").Cells(Selection.Row - 12, 1).Delete(xlShiftUp)
    Selection.EntireRow.Delete
    D'une manière ou d'une autre, si tu supprimes une cellule dans une liste, il faudra la supprimer dans l'autre.
    Sinon tes cellules ne correspondront plus, leur relation sera incohérente et ton SOMME.SI.ENS ne signifiera plus rien.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

Discussions similaires

  1. Problème erreur 424 suppression d'une ligne via listbox
    Par Chris171717 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/02/2013, 17h04
  2. [XL-2003] Suppression d'une ligne si erreur "#VALEUR!"
    Par Senelya dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/07/2010, 15h06
  3. [XL-2003] Suppression d'une ligne entière suite à une valeur
    Par will-1981 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 06/04/2009, 01h05
  4. Suppression d'une ligne Access par erreur
    Par dsifm dans le forum Access
    Réponses: 1
    Dernier message: 13/05/2008, 11h49
  5. Réponses: 4
    Dernier message: 24/11/2006, 17h03

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