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 :

Lecture caractère cellule pour programme [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 7
    Par défaut Lecture caractère cellule pour programme
    Bonjour à tous,

    je vais essayer d'être clair, mais rien n'est moins sur.

    Je souhaite que la fonction que j'ai créée fonctionne à l'aide de différentes variables.
    Les différentes propositions d'une des variables sont les captions des optionbutton que j'ai mis dans une userform.
    La fonction devrait donc prendre une valeur différente selon la variable indiquée. (Mais la pratique s'éloigne parfois de la théorie...)

    Pour me faciliter la tache, j'ai décidé de faire ça indirectement en faisant apparaitre le caption de mon optionbutton dans une cellule excel.
    La fonction que j'ai créée dépend donc d'une commande "If". Seulement je n'arrive pas à ce que mon programme reconnaisse le mot de la cellule mentionnée précédemment (qui est donc aussi le caption de l'optionbutton et une des variables de la fonction) pour prendre la valeur voulue.

    Ce que j'ai essayé (entre autre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function Fonction(Nbligne As Integer, CaptionOptbutton As String) As Single
    
    Dim i As Integer
    Fonction = 0
    For i = 3 To Nbligne
    
    If Worksheets("feuil1").Cells(i, 2) = CaptionOptbutton Then (c'est cette condition que vba ne comprend pas, du moins je pense!)
    
    Fonction = Worksheets("feuil1").Cells(i, 3).Value + Fonction
    
    Else: Fonction = Fonction
    End If
    Next
    End Function
    Dans mon programme, j'appelle alors ma fonction en écrivant dans les variables directement le nom qui se trouve dans la cellule (celle qui correspond au caption de mon optionbutton) et le résultat trouvé est systématiquement 0...

    Si vous avez compris ce long charabia et que vous avez une idée, je suis toute ouïe.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    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 : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Quelle est la finalité de cette fonction que tu nommes Fonction (lui donner un autre nom serait peut-être déjà plus parlant) ?
    Tu dis que tu penses que c'est sur la ligne contenant le IF que le problème aurait lieu. Tu penses ou tu es certain ?
    En principe le programme s'arrête là où il y a un problème avec la ligne en jaune. Sinon il faut pratiquer le pas à pas (la touche F8).
    Placer l'instruction STOP à la première ligne de la fonction et ensuite F8
    Tu types les variables Nbligne et i comme des entiers or les lignes dans une feuille Excel excèdent le maximum qu'autorise un entier. Il est préférable de les typer comme Long (Entier long).
    Je sais que le problème ne vient pas de là mais il est inutile d'initialiser (Fonction = 0) le nom de la fonction (par défaut sa valeur sera nulle).
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 7
    Par défaut
    En fait je veux faire la somme des montants des cellules affichées à coté des cellules "Guillaume". (C'est le nom d'un des optbutton.)
    "Guillaume" n'apparait pas à chaque lignes, je ne peux donc pas faire une simple somme de chaque ligne, il faut que j'arrive à sélectionner les montants qui intéressent Guillaume uniquement.

    Je n'ai pas de bug dans mon programme donc pas de ligne surlignée, mais au lieu de m'afficher la somme des montants à cotés des cellules "Guillaume", la cellule affiche 0.

    Voici ma fonction plus clairement écrite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function Somme(Nbligne As Integer, Acheteur As String) As Single 'Acheteur étant la variable que je remplace par guillaume dans le programme
     
    Dim i As Long
    For i = 3 To Nbligne
    If Worksheets("feuil1").Cells(i, 2) = "Acheteur" Then
    Somme = Worksheets("feuil1").Cells(i, 3).Value + Somme
    Else: Somme = Somme
    End If
    Next
    End Function

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    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 : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Utiliser comme nom de fonction le nom de la formule SOMME d'excel (version française) n'est pas le meilleur choix.
    Manifestement, tu cultives l'ambiguïté des noms "Acheteur"comme valeur pour le nom d'une d'une variable dont le nom est similaire, Fonction pour le nom d'une fonction dans ton premier message etc...
    Pour ton information, il existe nativement dans excel une formule nommée SOMME.SI qui peut te donner le même résultat que cette fonction VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI($A$2:$A$50;"Guillaume";$B$2:$B$50)
    Cette formule donnera la somme des valeurs se trouvant dans la plage B2:B50 à chaque ligne de la plage A2:A50 si la valeur "Guillaume" s'y trouve.
    Mais bien entendu, il est également possible par VBA d'utiliser la même fonction avec l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorksheetFunction.SumIf
    Mais j'imagine que le pseudo F.PIGNON est une bonne blague.
    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

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 7
    Par défaut
    Il est vrai que somme n'est pas le meilleur nom pour une fonction. (La première fois j'ai remplacé somme par fonction pour ne pas s'attarder sur ce détail, mais dans mon programme je n'avais pas écris fonction).

    Ensuite l'ambiguité que tu soulèves pour acheteur est peut etre le problème de mon programme.

    Je veux pouvoir changer de nom en utilisant la même formule.

    Voici ce que je tape ensuite dans mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Depenseguillaume as Single
    Dim Depensemartin as Single
     
    Depenseguillaume = Somme(Ligne, Guillaume)
    Depensemartin = Somme(Ligne, Martin)        
     
    Worksheets("Feuil1").Cells(3, 5) = "Guillaume a dépensé " & Depenseguillaume & " €."
    Worksheets("Feuil1").Cells(3, 5) = "Martin a dépensé " & Depensemartin & " €."
    J'ai déja essayé de changer ma fonction en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function Somme(Nbligne As Long, Acheteur As String) As Single
    Dim i As Long
    For i = 3 To Nbligne
    If Worksheets("Feuil1").Cells(i, 2) = Acheteur Then 'J'ai enlevé les guillemets à acheteur
    Somme = Worksheets("Feuil1").Cells(i, 3).Value + Somme
    Else: Somme = Somme
    End If
    Next
    End Function
    Mais j'ai toujours le même problème.

    Je vais essayer avec SumIf, mais j'aimerais beaucoup comprendre ce qui ne va pas dans mon programme...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 7
    Par défaut
    J'ai résolu mon problème, il me manquait:

    Mais j'avoue me considérer comme le François Pignon du vba parfois.

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

Discussions similaires

  1. [XL-2003] Lecture + remplacement cellules, programme qui boucle indéfiniment
    Par many6976 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/07/2013, 14h25
  2. [Batch] Problème avec caractère ! lors d'une lecture de fichier pour extraction
    Par damsmut dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 20/11/2012, 16h21
  3. Problème de lecture de cellule date par le programme vb.net
    Par lesultan2007 dans le forum VB.NET
    Réponses: 6
    Dernier message: 12/11/2012, 18h41
  4. Réponses: 3
    Dernier message: 27/08/2003, 21h14
  5. cle pour programme
    Par mumu2001 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 04/11/2002, 10h34

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