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 :

Additionner variables texte


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut Additionner variables texte
    Bonjour,

    Dans la colonne A, j'ai des noms de ville

    (j'essaye de faire volontairement simple)

    J'ai une déclaration type J'essaye d'additionner le nom de ville , style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i= 1 to 10000
    if cells(i,1)="PARIS" then ville(1,5)=ville(1,5)+1
    (je fais volontairement très très simple.... : 1 = PARIS, 5 = données de la colonne E),

    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ville(cells(i,1),5)=ville(cells(i,1),5)+1
    Et naturellement, ça ne fonctionne pas.....

    Variable texte et chiffre, ça va pas ensemble .....

    Une des solutions serait de faire (=une recherche INDEX+EQUIV des villes dans une autre feuille :
    http://www.developpez.net/forums/d10...-colonnes-tcd/ )

    Mais avant de m'aventurer dans ce type de code, je souhaitais savoir s'il n'y avait pas une autre possibilité ?

    Merci,

    A+
    Je cherche à calculer

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Bon, j'essaye de créer une fonction, histoire d'automatiser la recherche, j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'feuille principale ' eric=cells(i,1)
    Function essai()
    for j= 1 to 10000
    if sheets("Feuillevilles").cells (j,1)=eric then resu=("Feuillevilles").cells(j,2)
    next
    end function
    'Feuillevilles' contient le nom des villes en B, il y a leur numéro (exemple pour Paris = 1)

    Le problème , c'est quand je fais le pas-à-pas, lorsque la fonction est appelée, "Eric" = vide, de même, lorsque la fonction est terminée, je n'arrive pas à récupérer la valeur "résu"......

    J'ai essayé de trouver sur la FAQ un tuto sur l'utilisation des "Function", mais rien vu.....

    Alors, soit, on peut passer sans une fonction "Function", soit une bonne ame peut m'indiquer un chemin de tuto pour que je comprenne les "function".....

    Merci,

    A+

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Bonjour,

    Si on oublie les variables globales, une fonctions a des arguments et une sortie.
    Les arguments sont contenus entre les parenthèses et la sortie a le nom de la fonction.
    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
     
    eric=cells(i,1)
    Resultat= essai(eric)
    ...
    end
     
     
    Function essai(eric)
    for j= 1 to 10000
    if sheets("Feuillevilles").cells (j,1)=eric then 
         resu=sheets("Feuillevilles").cells(j,2)
         exit for
    else
    endif
    next
    essai= resu
    end function
    devrait fonctionner un peu mieux
    A+

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 121
    Par défaut
    Salut
    Pourquoi ne pas plutôt utiliser CountIf, en faisant par exemple comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").[E2] = WorksheetFunction.CountIf(Sheets("Feuil1").Range("A:A"), "Paris")
    Tu peux ensuite adapter pour ne calculer le nombre de ville que sur un espace plus restreint.
    On peut également imaginer de faire une liste sans doublon a partir de la colonne A, puis de boucler sur cette liste et de replacer "Paris" par le contenu de la case de ta liste pointé par ta boucle et ainsi faire calculer le nombre d’occurrence pour chaque ville.
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Merci PPz78,
    Merci Qwazerty,

    En fait, j'en étais arrivé à la même conclusion que PPz78, mais j'ai fait plus compliqué .....:
    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
    global eric, resu as string
     
    eric = Cells(j, 1)
    Application.Run "essai.xls!Macro"
    ville(resu,5)=ville(resu,5)
    '''''''''''''''''''''''''''
    sub macro()
    For g = 1 To 10000
    '
    If Sheets("Feuillevilles").Cells(g, 1) = eric Then
    resu = Sheets("Feuillevilles").Cells(g, 5)
    End If
     
    Next
     
     
    End Sub
    Je mets en GLOBAL les variables, je les fais calculer dans une macro et je récupère la valeur. Ce qui revient au même que la solution de PPz78, sauf qu'utiliser la "function", c'est plus 'propre', voire, plus rapide ?

    Merci Qwazerty pour l'idée, je la retiens pour une prochaine fois, car elle a le mérite de consommer moins de ressources à ce que j'ai pu comprendre....

    Merci à tous les 2

    Par contre si vous aviez un lien vers un tuto des "function" : j'ai vu des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function er(byref v as integer) as variant
    par exemple, et je ne sais pas comment elles s'utilisent....rien vu sur la FAQ, ni sur le site, donc si vous aviez un tuto, histoire que j'essaye de m'améliorer......

    Merci

    A+ pour de prochaines aventures

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 121
    Par défaut
    Salut
    Hummm, heuu, non tu ne peux pas faire ça, c'est pas propre

    Pour Global, il faut mettre Public, je sais que les 2 marchent mais Global c'est une vieille commande. Si tu fais un coup de F1 sur Global, l'aide t'amène sur Public.

    Ensuite toujours sur la 1ere ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public eric, resu as string
    Voila ce que comprend VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public eric as Variant, resu as string
    Il faut répéter pour chaque variable son type associé.

    Pour les 3 lignes qui suivent
    Application.run est utilisé pour lancer une macro se trouvant dans un autre classeur, donc ici inutil, si tu veux faire référence à une fonction ou procédure public du même classeur , il suffit de mettre son nom tout simplement ou au pire utiliser Call.

    Dans ton cas l'utilisation de Macro n'a strictement aucun intérêt, je te conseille de supprimer tes déclaration Public du début et de regrouper l'ensemble de ton code dans une seule et même procédure.
    Le seul intérêt de créer une procédure ou une fonction, c'est le cas ou une partie de code serait réutilisé plusieurs fois dans des parties différentes du programme, ou à la limite pour soulagé un programme très long, on en est pas encore là .

    De plus dans un cas comme celui que tu présentes, il serait plus intéressant de développer une fonction(Function) plutôt qu'un procédure(Sub), en effet les fonctions retournent une valeur, donc ici tu pourrais directement retourner la valeur que tu stockes actuellement dans resu. Ppz78 t'avais mis sur la voie des fonctions relis son code.
    Prend le temps de regarder dans la section tutoriel du site, tu y trouvera des info sur les concepts de Procédure et Function.


    Par contre pour ne pas risquer de te mélanger les pinceau, je te conseille de remplacer ces 2 lignes du code de Ppz78
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    eric=cells(i,1)
    Resultat= essai(eric)
    Par celles-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Resultat= essai(cells(i,1))
    Car la variable eric dans ces 2 lignes, ne correspond pas à la variable eric utiliser dans la fonction, je ne sais pas si je suis très claire mais tu pourrais écrire cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    eric=cells(i,1)
    Resultat= essai(eric)
    ...
    end
     
     
    Function essai(Nom as string) as integer
    for j= 1 to 10000
    if sheets("Feuillevilles").cells (j,1)=Nom then
    Pour terminer, je crois bien que tu viens de ré-inventer la fonction RechercheV... fais une recherche sur cette fonction, elle fait exactement ce que tu veux faire, dans une plage de cellule (dans ton cas A1:E10000), elle recherche une valeur dans la 1ere colonne (A) et te revois la valeur qui se trouve sur la même ligne mais dans la colonne que tu lui précises (E). La fonction est en plus suffisamment bien conçue pour ne pas t’inquiéter du nombre de lignes que tu lui transmets en plage, donc tu peut lui transmette les colonnes complètes soit (A:E) au lieu de (A1:E10000).

    Il faut parfois bien rechercher dans ce qui existe déjà avant de se développer des outils personnels

    Bon courage
    ++
    QWaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. Afficher une variable texte comme image
    Par Alexandrebox dans le forum Langage
    Réponses: 5
    Dernier message: 14/03/2007, 15h06
  2. Réponses: 18
    Dernier message: 27/10/2006, 14h15
  3. Pb avec une variable texte
    Par polo92 dans le forum Access
    Réponses: 1
    Dernier message: 06/06/2006, 19h09
  4. Plusieurs lignes de texte dans une variable texte
    Par Loko dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 15/12/2005, 12h51
  5. convertir une variable texte en variable date
    Par tafamilk dans le forum ASP
    Réponses: 2
    Dernier message: 12/08/2005, 01h01

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