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 :

SOMME.SI sur une autre feuille avec recherche précise


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Points : 6
    Points
    6
    Par défaut SOMME.SI sur une autre feuille avec recherche précise
    (Re)Bonjour les gens fort !

    L'idée de mon code final sera de m'afficher la somme d'une recherche spécifique sur une autre page.

    Je m'explique:
    j'ai une feuille "1" ou je mettrais mes résultats, et une feuille "2" ou j'ai mes données (des numéros de comptes et leur solde)
    Ma feuille "2" se présente ainsi:
    40000 30(euros)
    40001 34
    50353 45
    64424 12
    40003 43
    Comme vous l'aurez remarqué les numéros de comptes de sont pas rangé dans l'ordre, ce n'est pas tellement un problème je pense.

    Le but est en fait précisement d'afficher sur la feuille "1" la somme des comptes commençant pas 40 !

    Soit sur la feuille "1" avoir:
    40 107

    ou le 107 est bien sur le résultat de la somme 30 + 34 + 43 = 107
    Maintenant que vous avez compris l'objectif de la macro (je l'espere sinon biensur je serait plus précis!) passons aux choses sérieuses!


    Déjà pour faire une macro, grosso modo j'ai l'habitude de chercher la fonction d'excel qui fait ça puis son nom anglais et hop j'ai de la matiere pour bosser, mais la je serais meme pas le faire en excel

    mon probléme vient de la recherche avec seulement les 2 premieres chiffres de mes numéros :/

    en excel je tente une fonction =SOMME.SI(A1:A5;"40";B1:B5) mais bien sur cela ne marche pas car je ne connais pas de fonction excel permettant simplement la lecture d'un nombre ou d'un caractère (les fonctions GAUCHE DROITE ne sortant qu'un placement)


    Puis ensuite il me faudra coder cela

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Est-ce possible, pour toi, d'insérer une colonne qui contiendrait la valeur des comptes en format Texte ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Oui aucun problème !

    (je ferai un pti enregistreur de macro avec clic droit sur la colonne B et format texte pour les cellules nickel )

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 153
    Points : 215
    Points
    215
    Par défaut
    Bonjour,

    Dans ce cas, tu peux essayer la formule
    =SOMME.SI(A1:A5;"40*";B1:B5)
    Avec A1:A5 en format texte,

    Poulpe

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    À ce moment-là, tu pourras utiliser la formule en ajoutant "*"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI(A1:A5;"40*";B1:B5)
    Si les comptes en texte sont en colonne A

    ou encore en utilisant un chiffre inscrit sur la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI(A1:A5;D1&"*";B1:B5)
    si en D1 tu inscrit le chiffre 40, disons

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    PARFAIT

    donc maintenant tous ça en vba !

    j'ai ça pour le moment mais ça ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    Worksheet("1").Range("A2") = WorksheetFunction.SumIf(Worksheet("2").Range("A1:A5"), "40*", Worksheet("2").Range("B1:B5"))
    End Sub
    et ensuite j'aimerai que le colonne aille de la 1ere ligne à la derniere ligne ça doit ressemblre à quelque chose commme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    Worksheet("1").Range("A2") = WorksheetFunction.SumIf(Worksheet("2").Range("A1048576").End(xlUp).Row
    "40*", Worksheet("2").Range("B1048576").End(xlUp).Row
    )
    End Sub
    vous confirmez?

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Est-ce que "1" et "2" sont bien les noms des feuilles ou bien c'est Feuil1 et Feuil2 ?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Oui je les ai appelé comme ça pour que se soit plus clair sur la conversation

    Sur mon ficher j'ai donc bien renommé mes feuilles en 1 et 2.

  9. #9
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Pourquoi tu t'embêtes ?
    Tu fais une simple boucle "For to" avec un If dedans et le tour est joué.
    Le dixième de seconde que tu perds à l'exécution, tu le regagnes au centuple avec le temps gagné à l'écriture de la macro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Worksheet(1).Cell(1,1).Value = 0
    For VI=1 to 5
       If Left(Worksheet(2).Cells(VI,1).Value,2) = "40" then Worksheet(1).Cell(1,1).Value = Worksheet(1).Cell(1,1) + Worksheet(2).Cell(VI,2)
    Next VI
    A adapter, bien sûr, en fonction des emplacements de tes données et résultats.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Merci Menhir aussi !

    j'ai testé et il marche


    mais je vais resté sur l'idée initiale avec sumif car j'ai déjà beaucoup de boucle donc si je pouvais le faire en une ligne se serait top

    actuellement j'ai donc ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
     
    'je modifie les cellules de la colonne A en texte
    Dim CL As Range
    For Each CL In Sheets(2).Range("A1:A5")
    CL = Val(CL.Text)
    CL.NumberFormat = "@"
    Next
     
    Sheets(1).Range("B2") = Application.WorksheetFunction.SumIf(Sheets(2).Range("A1:A5"), "40*", Sheets(2).Range("B1:B5"))
    End Sub
    et ce code ne marche il a marché une fois mais je m'enbrouille un peu avec les worksheet ou sheets :/

    et je relance aussi pour effectuer ces changement sur une colonne entiere (derniere ligne non vide) j'essaye plein de syntaxe mais aucune m'aboutie

  11. #11
    Membre confirmé Avatar de grisan29
    Homme Profil pro
    ouvrier poseur
    Inscrit en
    Octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ouvrier poseur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 866
    Points : 520
    Points
    520
    Par défaut
    bonsoir nutella14
    mais je m'enbrouille un peu avec les worksheet ou sheets
    voici une explication

    la propriété "Sheets" retourne toutes les feuilles du classeur et donc aussi les feuilles graphiques. Si tu ne veux que les feuilles de calcul, il te faut utiliser la propriété "Worksheets".

    Pascal

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Essaie comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim CL As Range
    For Each CL In Sheets("2").Range("A1:A5")
        CL = "'" & CL
    Next
     
    Sheets("1").Range("B2") = Application.WorksheetFunction.SumIf(Sheets("2").Range("A1:A5"), "40*", Sheets("2").Range("B1:B5"))
    Le format demeure Standard, mais le nombre est changé en texte.
    Autre bizarrerie d'Excel...

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Impeccable ! MERCI


    Résumer donc actuellement j'ai le code suivant (et il marche ! )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
     
    Dim CL As Range
    For Each CL In Sheets(2).Range("A1:A5")
        CL = "'" & CL
    Next
     
    If Application.CountIf(Sheets(2).Range("A1:A5"), "40*") > 0 Then
    Sheets(1).Range("B2") = Application.WorksheetFunction.SumIf(Sheets(2).Range("A1:A5"), "40*", Sheets(2).Range("B1:B5"))
    Else: Range("B2") = "Rien"
    End If
    End Sub
    J'ai rajouté une boucle pour tester la présence ou non de mes numéros de compte pour qu'il me renvoie "Rien" car sinon il me renvoyait 0 et c'est une valeur possible donc facheux


    Il me reste à régler un petite chose avec laquelle je bataille depuis ce matin c'est de laisser la possibilité à l'utilisateur de rentrer le début de numéro de compte qu'il cherche

    j'ai tester ce genre de syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Application.CountIf(Sheets(2).Range("A1:A6"), Sheets(1).Range("B1")*) > 0 Then
    Sheets(1).Range("B5") = Application.WorksheetFunction.SumIf(Sheets(2).Range("A1:A7"), Sheets(1).Range("B1")*, Sheets(2).Range("B1:B7"))
    mais rien à faire

    ou encore Range("B1"*) même Range("B1*") mais toujours une erreure de syntaxe.

    Comment pourrais je faire pour récuperer la valeur écrite par l'utilisateur en feuille 1 cellule B1 afin qu'elle soit le début de mon numéro de compte à chercher (et donc à calculer)?

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    bonjour,

    essai : .Range("B1") & "*",pour ce qui est de tes interrogations sur l'objet Sheet ... rappelle toi bien que si tu ne précise pas le classeur par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.sheets(1....
    ton code utilise collection de feuille du classeur actif .. ce qui est très difficile à maîtriser car à tout moment (durant l'éxécution de ton code) l'utilisateur de ta macro peu changer le classeur actif....

    utilise le classeur Thisworkbook lorsque tu veux utiliser les feuilles contenues dans le classeur qui contient aussi ton code..

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    ça marche nickel merci merci merci



    Donc si j'ai bien compris tu me conseils de mettre mon code dans le ThisWorkbook plutôt que dans un module?

  16. #16
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Dans ta feuille Excel, passe tes numéros de compte en Texte, tu te faciliteras la vie.
    Format de Cellules > Nombre > Catégorie = Texte
    Tout ce qui équivaut à un code ou un numéro de série et, plus largement, tout ce qui ne nécessite pas d'opération numérique doit préférablement être mis en format Texte (excepté les dates).

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    C'est fait aussi merci Menhir


    Autre (again and again ! ) difficulté :/

    En restant sur mon exemple de compte 40 je ne dois maintenant faire la somme QUE des comptes négatifs


    il me faut je pense mettre une condition if dans mon sumif

    "somme des comptes 40, si compte 40 négatif ajouter sinon rien"


    Initialement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(1).Range("B2") = Application.WorksheetFunction.SumIf(Sheets(2).Range("A1:A5"), "40*", Sheets(2).Range("B1:B5"))
    je ne sais pas ou je pourrais placer par exemple un if range.value <0 then ....

    EDIT: ou "simplement" pourvoir rajouter une condition dans mon sumIf du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(1).Range("B2") = Application.WorksheetFunction.SumIf(Sheets(2).Range("A1:A5"), "40*" &  "< 0" , Sheets(2).Range("B1:B5"))
    mais il comprend pas trop trop

  18. #18
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Nutella14 Voir le message
    il me faut je pense mettre une condition if dans mon sumif
    Ou bien tu repends ma méthode, tu ajoutes un AND dans le IF et c'est réglé en 10 secondes...
    Je dis ça je dis rien.

  19. #19
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Tu n'as pas spécifié quelle version tu utilises.
    À partir de 2007, il y a la fonction SOMME.SI.ENS (Sumifs) qui permet plusieurs conditions.
    Sinon, il y a SOMMEPROD (Sumproduct) qui devrait pouvoir fonctionner.

  20. #20
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    j'essaye en effet avec ta méthode aussi Menhir mais j'aimerai avoir les 2 et réussir avec mon pti sumif aussi ^^


    j'utilise la version 2007 j'ai donc bien sumifs.

    Mais je viens de réaliser (après une profonde réflexion vous vous en doutez) que si je rajouter une condition de valeur négative dans mes recherches il ne va donc me cherche que mes NUMEROS DE COMPTE négatif et non les VALEURS de ces comptes qui sont négatifs.

    je me sent perplexe du coup !

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/03/2014, 15h19
  2. [XL-2007] Recherche dans un fichier - réponses collées sur une autre feuille
    Par paulinegue dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 09/06/2011, 17h39
  3. Récupérer la valeur d'une cellule avec fonction sur une autre feuille
    Par rogerlette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/09/2010, 12h38
  4. Réponses: 1
    Dernier message: 27/07/2009, 13h53
  5. Recherche et copier/coller sur une autre feuille
    Par AzelRoth dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/02/2009, 10h21

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