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 :

Calculs sur une plage [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Par défaut Calculs sur une plage
    Bonjour,

    Lorsque je fais un calcul sur une plage par rapport à une autre plage, j'ai un message d'erreur.

    Par exemple, quand je fais : Range("C1:C10").Value = Range("A1:A10").Value, là ça marche, j'ai bien dans les cellules C1 à C10 les valeurs des cellules A1 à A10.
    Par contre, si je fais Range("C1:C10").Value = Range("A1:A10").Value * 2, là j'ai une erreur incompatibilité de type.

    J'ai essayé avec des parenthèses : Range("C1:C10").Value = (Range("A1:A10").Value) * 2, toujours l'erreur
    avec la fonction val : Range("C1:C10").Value = Val(Range("A1:A10").Value) * 2, pas mieux.

    Est-ce que quelqu'un sait pourquoi et qu'elle serait la solution (sans passer par une boucle) ?

    D'avance, MERCI .

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,
    Citation Envoyé par lesurferdu59 Voir le message
    Est-ce que quelqu'un sait pourquoi et qu'elle serait la solution (sans passer par une boucle) ?
    Comme l'erreur l'indique, une incompatibilité de type survient lorsqu'on effectue une opération incompatible avec le type des variables.
    Ici Range("A1:A10").Value est tableau à 2 dimensions (10 lignes et 1 colonne).

    Quand tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C1:C10").Value = (Range("A1:A10").Value) * 2
    C'est comme si tu écrivais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    t = Range("A1:A10").Value
    t = t * 2  ' c'est là que survient l'incompatibilité de type
    Range("C1:C10").Value = t
    Sans faire de boucle tu peux écrire une formule en en C1:C10 puis remplacer cette formule par son résultat.
    Par Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      With Range("C1:C10")
        .Formula = "=IF(A1="""","""",A1 * 2)"
        .Value = .Value
      End With

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Par défaut Plage * 2
    Merci beaucoup Patrice740 pour la rapidité de ta réponse.

    Comme le tableau est très grand (ici l'exemple sur 10 lignes était pour expliquer), ça m'embête de faire autant de formules que de lignes. Je recherchai la possibilité de le faire avec le moindre d'instructions VBA pour éviter d'allonger les lignes de codes et le temps d'exécution. En tout cas ton explication est claire, je comprends maintenant l'erreur d'incompatibilité. Je vais donc me résigner à faire une boucle for/next (3 lignes)

    Encore merci et bonne journée.

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Re,
    Citation Envoyé par lesurferdu59 Voir le message
    Je vais donc me résigner à faire une boucle for/next (3 lignes)
    Pourquoi une boucle ?
    Il n'y en a pas dans le code proposé !
    Ces 2 instructions suffisent pour recopier une plage quelle que soit sa taille.

    Notes que la formule pourrait être plus simple :
    Mais dans ce cas les cellules vides renvoient zéro.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Par défaut Suite
    En fait, je passe par une boucle car je ne veux pas de formule en colonne C. En effet, suite au code VBA, l'utilisateur va changer certaines données de la colonne A, mais il ne faut surtout pas changer celles de la colonne C.
    Je pourrai bien sur, suite au code proposé, faire un collage spécial valeur, mais je ne sais pas si côté temps (car le code doit traiter environ 40 000 lignes), ce qui est mieux.

    En tout cas, chapeau pour la solution proposée. J'ai testé également sans utiliser de Width (donc uniquement la ligne Range("C1:C10").Formula = "=A1*2") et ça marche, sauf toujours l'histoire de la formule à transformer en valeur.

    Merci encore pour ton aide.

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Re,
    Citation Envoyé par lesurferdu59 Voir le message
    ... je ne veux pas de formule en colonne C [...] Je pourrai bien sur, suite au code proposé, faire un collage spécial valeur
    Je vois donc que tu n'as pas essayé le code !!!!
    Ce code ne laisse pas de formule, il intègre le copier / coller valeurs (la 2ème instruction) ...

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

Discussions similaires

  1. Automatiser le calcule de la mediane sur une plage
    Par BINO-OTA dans le forum Excel
    Réponses: 2
    Dernier message: 25/07/2017, 17h52
  2. Réponses: 3
    Dernier message: 06/04/2012, 14h31
  3. [XL-2003] Calcul sur une plage de cellules
    Par kokoVBA dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/08/2009, 10h35
  4. [VB6] Témoin de calcul sur une form
    Par kawel dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 07/08/2006, 19h44
  5. Calcul sur une région répété...
    Par Angeldu74 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/06/2005, 08h00

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