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 by ref sur ma plage


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Data analyst junior
    Inscrit en
    Juin 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Data analyst junior

    Informations forums :
    Inscription : Juin 2020
    Messages : 21
    Points : 5
    Points
    5
    Par défaut Erreur by ref sur ma plage
    Bonjour à tous. J'écris le code suivant :

    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
    Function PourcLocVac(Ma_plage As Range) As Long
     
    Dim Localvac As Long
     
    Dim Localnonvac As Long
     
    Localvac = Worksheet.Function.NB.SI(Ma_plage.Value, "oui")
     
    Localnonvac = Worksheet.Function.NB.SI(Ma_plage.Value, "non")
     
    PourcLocVac = Localvac / (Localvac + Localnonvac)
     
    End Function
     
     
    Sub Poucentage()
     
     
    Sheets("ora").Select
     
    Ma_plage = Range("B2").End(xlDown).Value
     
    Range("D3").Value = PourcLocVac(Ma_plage)
     
     
    End Sub
    Quand j'exécute, j'ai une erreur by ref sur Ma_plage (le tout dernier) et je ne comprends pas pourquoi. Quelqu'un peut m'aider svp ? Merci.

    PS : les cellules contiennent les valeurs oui ou non pour signifier qu'un local est vacant ou non.

  2. #2
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour
    Citation Envoyé par ORKI243 Voir le message
    Quand j'exécute, j'ai une erreur by ref sur Ma_plage (le tout dernier) et je ne comprends pas pourquoi.
    Tu as plusieurs erreurs dans ton code
    - ta fonction résultat d'un division devrait avoir des décimales
    - tu passes des valeurs au lieu d'une plage
    - la définition de ta plage n'est pas correcte
    - tes fonctions sont mal écrites et doivent être en anglais

    Comme ceci cela devrait mieux 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
    25
    26
    Function PourcLocVac(Ma_plage As Range) As Double
     
    Dim Localvac As Long
     
    Dim Localnonvac As Long
     
    Localvac = Application.WorksheetFunction.CountIf(Ma_plage, "oui")
     
    Localnonvac = Application.WorksheetFunction.CountIf(Ma_plage, "non")
     
    PourcLocVac = Localvac / (Localvac + Localnonvac)
     
    End Function
     
     
    Sub Poucentage()
     Dim Ma_plage As Range
     
    Sheets("ora").Select
     
    Set Ma_plage = Range("B2:B" & Range("B2").End(xlDown).Row)
     
    Range("D3").Value = PourcLocVac(Ma_plage)
     
     
    End Sub

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Data analyst junior
    Inscrit en
    Juin 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Data analyst junior

    Informations forums :
    Inscription : Juin 2020
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Vous avez raison ! Merci !!

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Data analyst junior
    Inscrit en
    Juin 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Data analyst junior

    Informations forums :
    Inscription : Juin 2020
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Bonsoir. La ligne de code

    Set Ma_plage = Range("B2:B" & Range("B2").End(xlDown).Row) ne fonctionne pas. J'ai essayé avec Range("B2",Range("B2").end(xlDown) mais cela ne marche correctement que lorsque toutes les cellules sont renseignées sur la colonne. En effet, dès qu'une cellule est vide, le pourcentage n'est pas bon. Et quand je rajoute des lignes, c'est pire.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 761
    Points : 28 619
    Points
    28 619
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il est tout à fait normal que s'ii y a des lignes vides dans la colonne B, le résultat renvoyé ne soit pas celui attendu.
    En effet l'instruction Range("B2:B" & Range("B2").End(xlDown).Row) renvoie un objet Range et celui-ci correspond à ce que l'on fait manuellement lorsque l'on souhaite sélectionner une plage de cellule en faisant Ctrl + Shift (Maj) + Flèche bas
    Donc si dans ma plage de cellule B2:B100, la cellule B9 est vide et que je sélectionne B2 et puis que j'utilise le raccourcis clavier Ctrl + Shift (Maj) + Flèche bas, Excel me sélectionnera B2:B8

    Pour pallier ce problème de ligne vide on part dans ce cas de la dernière ligne de la colonne B et on utilise alors l'argument xlUp qui nous renverra la dernière ligne remplie de la colonne B soit Set Ma_PLage = Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row)

    Personnellement lorsque je dois utiliser des plages classiques, j'utilise la propriété CurrentRegion en partant de la première cellule (ligne, colonne) de ma plage de cellules et ce à condition que la première colonne et la première ligne de ma liste de données sont remplies et cela c'est l'équivalent de la combinaison des touches Ctrl + * et ensuite je prend la Xème colonne de ma plage

    Exemple pour obtenir la moyenne des la colonne D d'une liste de données commençant en A1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub t()
      Dim Ma_PLage As Range
      Set Ma_PLage = Range("A1").CurrentRegion
      MsgBox "La moyenne est " & WorksheetFunction.Average(Ma_PLage.Columns(4))
    End Sub
    Cependant, je conseille vivement d'abandonner les plages classiques et utiliser les tableaux struturés bien plus simple et plus sûr à utiliser en VBA et bien entendu manuellement

    A lire éventuellement Apprendre à utiliser les tableaux structurés Excel : création, manipulations et avantages(1)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [VBA-E]Probleme macro VBA excel 2000 2003
    Par skichatchat dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/04/2007, 21h16
  2. incompatibilité macros VBA excel 2000 et 2003
    Par hiline6 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2007, 12h20
  3. Macro VBA Excel : Comparaison des deux 1ères colonnes de 2 fichiers Excel
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2007, 10h00
  4. Auto install macro vba excel
    Par zootman dans le forum Installation, Déploiement et Sécurité
    Réponses: 6
    Dernier message: 14/06/2006, 21h30
  5. [VBA-E] macro VBA excel suppression graphiques
    Par totoza dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/05/2006, 08h45

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