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 :

Ma macro m'écrase les formule dans la feuille base de donnée


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 36
    Points : 32
    Points
    32
    Par défaut Ma macro m'écrase les formule dans la feuille base de donnée
    Bonjour à tous,
    Voilà je suis débutant et j'ai besoin de votre aide SVP.
    j’exécute une macro de clacul simple à partir d'une feuille source qui contient mes donnée et dont quelques cellules contiennent des formules, mais en exécutant cette macro les formule disparaissent
    ci joint mon code :
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    Sub calcul1()
    'Macro calcul 
    Dim nb_max_ligne As Integer
    Dim nb_max_col As Integer
    Dim i As Integer, j As Integer
    Dim valeur As String
    dim pr as String, cm as String
    Dim pr1 As String, cm1 as String
    Dim pr2 As String, cm2 as String
    Dim colonne
    Dim w_plage As Range, ws_plage As Range
    Dim w_tab
    Dim ws_tab
    Dim w As Worksheet
    Dim ws As Worksheet
    Set ws = Worksheets("dépenses")     'feuille source de donnée ou les formule diparaissent 
    Set w = Worksheets("calcul")          'feuille de destination ou se fait le calcul
    Set ws_plage = ws.Range("A1:FB1000")
    Set w_plage = w.Range("A1:GA11")
     
    nb_max_col = Application.CountA(ws.Rows(2))    'compter le nombre des colonnes
    nb_max_ligne = Application.CountA(ws.Columns(9))    'compter le nombre des lignes
    Range(w.Range("A2").Offset(0, 1), w.Range("A2").End(xlToRight)).ClearContents               'Effacer les anciennes valeurs pour faire le calcul selon les nouvelles valeurs
    Range(w.Range("A3").Offset(0, 1), w.Range("A3").End(xlToRight)).ClearContents              'Effacer les anciennes valeurs pour faire le calcul selon les nouvelles valeurs
    Range(w.Range("A4").Offset(0, 1), w.Range("A4").End(xlToRight)).ClearContents
    Range(w.Range("A5").Offset(0, 1), w.Range("A5").End(xlToRight)).ClearContents
    Range(w.Range("A6").Offset(0, 1), w.Range("A6").End(xlToRight)).ClearContents
    Range(w.Range("A7").Offset(0, 1), w.Range("A7").End(xlToRight)).ClearContents
    Range(w.Range("A8").Offset(0, 1), w.Range("A8").End(xlToRight)).ClearContents
     
    w_tab = w_plage
    ws_tab = ws_plage
              For i = 3 To nb_max_ligne
    valeur = ws_tab(i, 9)
    pr1 = ws_tab(i - 1, 6)   'Se positionner sur la colonne produit pour lire la valeur dedans 
    pr2 = ws_tab(i - 2, 6)   'Se positionner sur la colonne produit pour lire la valeur dedans
    pr = ws_tab(i, 6)
    cm = ws_tab(i, 1)                               'lire la valeur dans la colonne commerçant
    cm1 = ws_tab(i - 1, 1)
    cm2 = ws_tab(i - 2, 1)
     
        For j = 10 To nb_max_col
     
        If valeur = "estimation" And pr = UserForm1.choix_produit And cm = UserForm1.choix_commercant Then
     
        w_tab(2, j - 8) = w_tab(2, j - 8) + ws_tab(i, j)
        End If
     
        If valeur = "réel" And pr1 = UserForm1.choix_produit And cm1 = UserForm1.choix_commercant Then
     
     
         w_tab(4, j - 8) = w_tab(4, j - 8) + ws_tab(i, j)     'Calcul valeurs estimation
        End If
     
        If valeur = "Reste" And pr2 = UserForm1.choix_produit And cm2 = UserForm1.choix_commercant Then
     
         w_tab(6, j - 8) = w_tab(6, j - 8) + ws_tab(i, j)           'Calcul Valeurs réel
     
        End If
        w_tab(3, 2) = w_tab(2, 2)
        w_tab(3, j - 7) = w_tab(3, j - 8) + w_tab(2, j - 7) 'calcul cummulé estimation
     
        w_tab(5, 2) = w_tab(4, 2)
        w_tab(5, j - 7) = w_tab(5, j - 8) + w_tab(4, j - 7)   ' calcul  cumulé reel
     
        w_tab(7, 2) = w_tab(6, 2)
        w_tab(7, j - 7) = w_tab(7, j - 8) + w_tab(6, j - 7)    'calcul cumulé reste
     
        If w_tab(4, j - 8) <> 0 Then             
    w_tab(8, j - 8) = w_tab(6, j - 8) / w_tab(4, j - 8)
    Else: w_tab(8, j - 8) = 0
    End If
        Next j
     
     
     
     Next i
     
     
     
    w_plage = w_tab
    ws_plage = ws_tab
     
    Set w = Nothing
    Set ws = Nothing
    End Sub

    je suis sur que la manipulation ws_plage=ws.range("A1:FB1000")
    ws_tab=ws_plage et à la fin ws_plage=ws_tab me fait perdre mes formules de calcul mais je l'utilise pour optimiser le temps de calcul.
    Est-ce que vous avez quelque chose à proposer pour résoudre ce problème SVP
    Merci d'avance

  2. #2
    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 mxitzny Voir le message
    quelques cellules contiennent des formules
    Quelles cellules ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    il y a des cellules dans ma feuille dépenses qui contiennent des formules de calcules.

  4. #4
    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
    Dans quelles cellules ? (c'est pourtant une question simple, non ?)
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    C'est un peu éparpillé ce n'est pas un range spécifique et bien défini

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    les formules ne sont pas des constantes
    Constitue donc la plage des constantes et fais-en ce que tu veux. Tu ne toucheras ainsi aucunement aux cellules contenant des formules.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim plage As Range
    Set plage = Cells.SpecialCells(xlCellTypeConstants)
    plage.ClearContents
    n'effacera que les cellules contenant des constantes et laissera intactes les formules
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Pouvez-vous m'expliquer ça avec une peu plus de détails car je suis débutant ?
    Merci

  8. #8
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Pouvez-vous m'expliquer ça avec une peu plus de détails car je suis débutant ?
    Je ne vois pas quels "détails" ajouter à mon message .
    Ouvre s'il te plait ton aide interne VBA à la rubrique Range.SpecialCells, méthode
    tout y est dit, non ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  9. #9
    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 mxitzny Voir le message
    C'est un peu éparpillé ce n'est pas un range spécifique et bien défini
    Etant donné qu'il n'y a pas de fonction aléatoire dans ton code, les cellules modifiées n'ont rien avoir avec le hasard.
    Elles sont forcément spécifiques.

    Si tu ne dis pas quelles cellules sont concernées, il est impossible de t'aider.


    Vu que ta macro remplace le contenu de certaines cellules par des valeurs, si les cellules en question contenaient des formules, il est normal qu'elles ne les contiennent plus.

    Si ta macro remplace le contenu de cellules non souhaitées, c'est forcément que ton algorithme n'est pas bon.
    A mon avis (sans garantie puisque tu ne fournis pas assez d'éléments), je pense que tu confonds coordonnées d'une cellule dans une matrice et coordonnées dans la feuille.
    Mais comme tu n'en dis pas assez (et que te tirer les vers du nez commence à être lassant), il n'est pas possible de t'aider plus.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  10. #10
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Si tu ne modifies pas les items du tableau qui contiennent des formules, tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
     
    Sub calcul1()
    Dim MyRnge As Range, Tbl()
     
        Set MyRnge = Range("A1:C3")
        Tbl = MyRnge.Formula
    'Ici tes calculs
        MyRnge = Tbl
    End Sub
    Cordialement,
    Franck

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Bonjour
    Je m'excuse car j'ai mal exprimé mon problème, mais vu que je suis débutant j'ai du mal à comprendre qu'est ce qui ne tourne pas rond dans mon code et surtout comment l'exprimer.
    Je suis arrivé à résoudre le problème en supprimant la ligne 82 de mon code Merci beaucoup pour vos aide

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

Discussions similaires

  1. [XL-2007] Macro pour supprimer les espaces dans les cellules
    Par ab1to dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/11/2009, 16h25
  2. Masquer les formules dans Excel 2007
    Par ruru9 dans le forum Excel
    Réponses: 1
    Dernier message: 08/01/2008, 15h43
  3. [Formule]Macro pour masquer des formules dans une cellule
    Par Hellx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2007, 08h21
  4. [VBA] Macro qui envoie une formule dans une cellule
    Par Okoss dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/04/2007, 22h32
  5. [Excel] Insertion de formule dans ma feuille par macro (erreur400)
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/02/2007, 10h27

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