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 :

Effectuer des calculs uniquement pour les champs numériques


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut Effectuer des calculs uniquement pour les champs numériques
    Bonjour,

    J'ai reçu un fichier excel composé de plusieurs onglets.

    Je dois effectuer des calculs, mais mon souci est que chaque feuille est composée de cellule texte, numérique etc..

    Peut-on effectuer des calculs uniquement pour les champs numériques pour chaque feuille ?

    Le calcul est simple je dois juste appliquer un coefficient multiplicateur.

    Si vous avez une idée, elle est la bienvenue.

    Merci d'avance

    Daniel

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    Si tu es en VBA (pas simplement en Excel) :

    Rien ne t'empêche de parcourir tes cellules par une boucle et de n'effectuer ton opération que si la valeur de la cellule est "numérique". If IsNumeric....
    (voir IsNumeric dans ton aide en ligne).

  3. #3
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    Re,

    Merci Ucfoutu,

    Je connais un peu VBA, mais je maitrise pas vraiment avec Excel.

    Pourrais-tu me fournir un exemple sur lequel je pourrais m'appuyer.

    Merci

    Daniel

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Il va sans doute falloir commencer par le commencement, à savoir la plage des cellules susceptibles de subir ces opérations !

    Car je doute assez que toutes les cellules de ta feuille seraient dans ce cas (ce serait alors une espèce d'usine à gaz ) ....

    Quelle est donc cette plage ?

    EDIT IMPORTANT : et t'assurer aussi et surtout qu'aucune de ces cellules ne soit elle-même le résultat d'une opération basée sur l'exploitation de la valeur d'une ou plusieurs autres cellules ainsi traitées !!! (car alors : appliquer un coefficient à une telle cellule enclancherait un cumul d'application de coefficient !!!)... Gaffe, donc ...

    En fait et pour résumer : à moins qu'il ne s'agisse de cellules "mortes" ou que tu n'aies utilisé (si toutes les cellules sont concernées) Excel non comme un tableur (ce à quoi il est normalement destiné), mais comme un tableau sans calculs (une espèce de traitement de texte ...), il va te falloir bien réfléchir avant de lancer cette manoeuvre.

  5. #5
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    bonjour,

    Je recherche la syntaxe qui permet de séléctionner la plage en cours d'une feuille de calcul.

    Merci

    Daniel

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    comme l'a rappelé Bigalo, il n'y a guere longtempssi l'on veut la somme de plusieur cellule
    a1+a2+a3 renvoie une erreur si l'une des valeurs n'est pas numerique
    =somme(a1:a3) se contente de ne prendre en compte que les valeurs numerique

  7. #7
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonsoir,

    où f désigne bien évidemment une feuille de calcul.

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    Je souhaite appeler votre attention sur ce que je mets en rouge dans cette citation :

    Citation Envoyé par Daniel MOREAU Voir le message
    Je dois effectuer des calculs, mais mon souci est que chaque feuille est composée de cellule texte, numérique etc..

    Peut-on effectuer des calculs uniquement pour les champs numériques pour chaque feuille ?

    Le calcul est simple je dois juste appliquer un coefficient multiplicateur.
    Il ne s'agit pas d'une somme à effectuer sur une colonne ou sur plusieurs colonnes, mais de tout autre chose.

    Je tiens également à rappeler mon message d'avertissement :

    EDIT IMPORTANT : et t'assurer aussi et surtout qu'aucune de ces cellules ne soit elle-même le résultat d'une opération basée sur l'exploitation de la valeur d'une ou plusieurs autres cellules ainsi traitées !!! (car alors : appliquer un coefficient à une telle cellule enclancherait un cumul d'application de coefficient !!!)... Gaffe, donc ...
    Je préfère l'avoir dit deux fois ...

  9. #9
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonsoir,

    Cela paraît assez simple : Edition/Atteindre ou le raccourci F5 (qui fonctionne également avec Excel 2007), permet de sélectionner de nombreuses choses dont les cellules ne contenant qu’une constante numérique :



    On peut donc répéter cette opération manuellement en la couplant avec un Collage Special Multiplication, pour chaque onglet, ou en VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Multiplie()
    Dim Temp As Workbook, Ref As Workbook, f As Worksheet
        Set Ref = ActiveWorkbook
        Set Temp = Workbooks.Add
        ' Ici j'utilise 1,25 comme coefficient multiplicateur. A adapter.
        ActiveCell.FormulaR1C1 = 1.25
        Range("A1").Copy
            For Each f In Ref.Worksheets
                f.Cells.SpecialCells(xlCellTypeConstants, 1).PasteSpecial xlPasteValues, xlMultiply
            Next
        Temp.Close False
    End Sub

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonsoir, Bigalo,

    Simple, ça l'est sans aucun doute...

    Reste à savoir si certaines cellules ne font pas déjà l'objet de calculs ...

  11. #11
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonsoir ucfoutu,

    Pour rendre les choses plus claires, j’ai édité mon message précédent, en y ajoutant une copie d’écran.

    Ne sont prises en compte pour le collage spécial QUE les cellules dont le contenu est numérique ET égal à une constante.

    Par conséquent le traiement n’a aucune incidence sur les cellules contenant une formule, et les calculs se font rigoureusement de la même façon !

    J’avais bien évidemment lu ta remarque, et je suis tout à fait d’accord : il ne faut modifier, bien évidemment que les cellules qui ne résultent pas d’un calcul .

  12. #12
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    bonsoir à tous,

    Tout d'abord merci pour vos réponses.

    J'ai pris bonne note du message de ucfoutu, mais dans mon cas, il n'y a pas de cellules déjà calculées.

    Le fichier est simplement composé de cellules texte, numériques et vides.

    J'ai fait un test avec ce code. De premier abord cela à l'air de fonctionner.

    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
    Private Sub CommandButton1_Click()
     
        'Définit une variable qui va représenter un classeur
        Dim Wb As Workbook
        'Définit une variable qui va représenter une feuille de calcul
        Dim Ws As Worksheet
        'Définit une variable qui va représenter une cellule
        Dim Cell As Range
     
     
        'Boucle sur chaque classeur de l'application Excel
        For Each Wb In Application.Workbooks
            'Boucle sur chaque feuille de chaque classeur
            For Each Ws In Wb.Worksheets
                'Boucle sur chaque cellule de la plage A1:A10
                For Each Cell In Ws.Range("A1:M100")
                    'Si la cellule contient la valeur 3, on multiplie la valeur par 2
                    If IsNumeric(Cell.Value) And Not IsNull(Cell.Value) And (Cell.Value) <> "" Then Cell.Value = Cell.Value * 2
     
              Next Cell
            Next Ws
        Next Wb
     
    End Sub
    Je vous laisse commenter cette ébauche.

    Merci pour votre aide.

    Daniel

  13. #13
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonsoir,

    As-tu testé mon code ? En principe, il fait ce que tu demandes et est beaucoup plus rapide, car on évite le recours à une boucle pour chaque feuille.

  14. #14
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Vais-je oser dire ce que j'ai hurlé pendant près de 15 ans à mes collaborateurs (auxquels j'ai fini par ne plus donner accès à un tableur pour arrêter certaines hémorragies ...) ?

    Allez! j'ose :

    Se servir d'un tableur, dont la vocation est le calcul dynamique, en lieu et place d'un simple traitement de texte (pour présenter des tableaux inertes) me laisse assez rêveur ...

    Belle façon de solliciter son processeur, ma foi ...

  15. #15
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    re,

    Je répond à ta remarque Ucfoutu et je comprend évidemment ton désarroi, mais ma demande est très particulière. En fait j'ai reçu un fichier excel d'un fournisseur qui correspond à ses tarifs produits.

    Ma tâche est de modifier les prix de chaque produits selon un coefficient (30 onglets avec 20 ou 30 produits à chaque fois), et la présentation est très particulière voilà pourquoi j'ai fait cette demande.

    Je voudrai bien te montrer de quoi il en retourne, mais je ne sais pas comment insérer un fichier ou une image

    Merci également à Bigalo, je vais tester ton code et te donne une réponse.

    Merci

    Daniel

  16. #16
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    Re,

    Je viens de tester Bigalo, et j'ai un mesage d'erreur " Erreur d'exécution 1004"

    Pas de cellules correpondantes
    Qu'est-ce qui ne va pas ?

    Daniel

  17. #17
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    As tu fais du pas a pas pour voir quelle ligne provoque cette erreur?
    faut vous prendre en main un peu les gars
    ++
    Qwaz
    Ps: quand tu met du code, préfères les balises code plutôt que citation (bouton #)
    Ps2: Pour les pièces jointes c'est juste en dessous de l'éditeur quand tu crées un message le bouton "Gérer les pièces jointes"

  18. #18
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonsoir,

    A priori, si tu as ce message, cela signifie que dans certaines feuilles il n’y a aucune cellule numérique. Ajoute une gestion d’erreur dans la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            For Each f In Ref.Worksheets
                On Error Resume Next
                f.Cells.SpecialCells(xlCellTypeConstants, 1).PasteSpecial xlPasteAll, xlMultiply
                On Error GoTo 0
            Next
    L’autre option est que les nombres ne sont pas reconnus comme tels (points à la place de virgules par exemple).

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/10/2010, 08h45
  2. [WD-2007] un problème de fou pour les champs calculés
    Par PHAUSTRATE dans le forum Word
    Réponses: 5
    Dernier message: 11/06/2010, 09h05
  3. Réponses: 20
    Dernier message: 30/03/2007, 15h01
  4. Mysql : choix des types pour les champs entre :
    Par Thierry8 dans le forum Administration
    Réponses: 3
    Dernier message: 14/06/2006, 08h22
  5. [Système] Problème pour effectuer des calculs
    Par tissard dans le forum Langage
    Réponses: 10
    Dernier message: 09/12/2005, 14h07

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