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 :

Fonction SI + NB.SI Excel en VBA [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 43
    Par défaut Fonction SI + NB.SI Excel en VBA
    Bonjour à tous !

    Je cherche désespéremment à transcrire une formule avec un NB.SI en code VBA (afin d'alléger les délais d'ouverture car j'ai une comparaison qui se fait entre 2 fichiers différents sur 4000 lignes)

    Voici la formule que je veux remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SI(NB.SI('[TdB.xls]Status'!$G:$G;Base!C5)>0;"x";"")
    elle permet de trouver au moins un cas dans la plage G:G d'un autre fichier (TdB.xls) égal à la colonne C de mon fichier actuel et si c'est le cas je met un "x" dans la colonne O de mon fichier actuel.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 24
    Par défaut
    Essaye ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("ta feuil").Range("cellules ou ecrire la formule").FormulaLocal = "=SI(NB.SI('[TdB.xls]Status'!$G:$G;Base!C5)>0;'""x"";"""") "

  3. #3
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 43
    Par défaut
    Malheureusement ca part dans un calcul interminable et ca plante ...

    Mon fichier est déjà très lourd et j'aimerai me débarasser de cette formule et partir sur une boucle If avec test comme un NB.SI à l'intérieur mais je n'ai aucune idée de comment le faire

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Par défaut
    Salut,

    Ce que tu souhaites c'est simplement le résultat dans ta feuille "Base" et pas la formule, n'est ce pas ?

    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
     
    Sub compteur()
    Dim Monfichier As Workbook, i As Integer
     
    Set Monfichier = Workbooks("TdB.xls")
     
    i = 5 'point de départ
     
    For i = 5 To 4000
        If WorksheetFunction.CountIf(Monfichier.Sheets("Status").Columns(7), Sheets("Base").Cells(i, 3)) > 0 Then
    ' je te mets le résultat dans la 4ème colonne comme je ne sais pas où tu veux le mettre, soit la colonne "D"
     
            Sheets("Feuil1").Cells(i, 4) = "X"     
    Else
            Sheets("Feuil1").Cells(i, 4) = ""
        End If
    Next i
     
    End Sub
    Ca s'execute en 10 secondes sur 4000 lignes environ avec ma bécane bien sûr.
    Si tu veux des renseignements n'hésite pas.
    A+

  5. #5
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 43
    Par défaut
    Super merci c'est exactement ce que je cherche !!!

    Par contre il me dit " Erreur d'exécution 9 : L'indice n'appartient pas à la sélection".

    Mon fichier est bien dans le meme dossier et j'ai vérifié les noms du fichier et des onglets

    D'ou est ce que ca peut venir ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Par défaut
    De rien,

    quand tu clique sur déboguage il pointe quelle ligne ?

    Et sinon n'oublie pas de changer le nom des feuilles là où tu veux écrire le résultat. remplace Feuil1 par Base.

    Une petite question ton fichier ne varie pas en nombre de lignes ?

  7. #7
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 43
    Par défaut
    Je n'ai pas accès au déboguage, simplement "OK"

    J'ai bien remplacé les noms de feuilles et mon nombre de lignes est fixe.
    Le code a l'air nickel, je comprends pas d'ou vient cette erreur

    Voici le code exact :

    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
    Sub compteur()
    Dim Monfichier As Workbook, i As Integer
     
    Set Monfichier = Workbooks("import.xls")
     
    i = 5 'point de départ
     
    For i = 5 To 4000
        If WorksheetFunction.CountIf(Monfichier.Sheets("HL").Columns(7), Sheets("Base").Cells(i, 3)) > 0 Then
     
            Sheets("Base").Cells(i, 18) = "x"
    Else
            Sheets("Base").Cells(i, 18) = ""
        End If
    Next i
     
    End Sub

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Par défaut
    Mets le code dans un module, u'est ce qui se passe ?

  9. #9
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 43
    Par défaut
    Toujours la même chose ... Je viens de tester sous Excel 2010 j'ai le mode déboguage avec l'erreur cette fois.
    Il me dit "MonFichier" = Nothing et c'est "import.xls" qui n'appartient pas à la sélection... reste à savoir ce que ca veut dire ...

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    import.xls est ouvert?

    Sinon, tu dois l'ouvrir
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 43
    Par défaut
    Effectivement avec les 2 fichiers ouverts ca marche ! Mais j'aurai aimé que ca fonctionne sans ouvrir import.xls

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Par défaut
    Salut,

    Dans ce cas utilise au début l'instruction suivante : par contre tu vas inscrire le nom du chemin dans la macro en dur, donc si tu souhaites changer le fichier source de place, il te faudra modifier le nom du chemin dans la macro.
    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
    27
    28
    29
    30
    31
    32
     
    Sub compteur()
    ' n'oublie pas d'annuler le rafraichissement de l'écran en début de macro et de le réactiver à la fin, ça fait gagner du temps à l'éxcution avec cette application
    Application.ScreenUpdating = False
     
    Dim Monfichier As Workbook, i As Integer
     
    'ouverture du fichier import.xls
        Workbooks.Open Filename:= " inscrire le nom du chemin (par exemple : Z:\Logistique\import.xls" 
     
    Set Monfichier = Workbooks("import.xls")
     
    i = 5 'point de départ
     
    For i = 5 To 4000
        If WorksheetFunction.CountIf(Monfichier.Sheets("HL").Columns(7), Sheets("Base").Cells(i, 3)) > 0 Then
     
            Sheets("Base").Cells(i, 18) = "x"
    Else
            Sheets("Base").Cells(i, 18) = ""
        End If
    Next i
     
    'Puis à la fin tu mets l'instruction suivante pour éviter de garder le fichier ouvert et d'enregistrer quelques modifications sur le fichier source
     
        Monfichier.Activate 'Normalement on évite d'activer des fichiers pour rien mais je ne sais pas comment faire autrement
     
        ActiveWorkbook.Close SaveChanges:=False 
     
    Application.ScreenUpdating = True
     
    End Sub
    A toi de jouer
    Will

  13. #13
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Il est possible de travailler sur des classeurs fermés.
    Voir:
    http://silkyroad.developpez.com/VBA/ClasseursFermes/
    Attention! Bien lire toutes les explications depuis le début.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  14. #14
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Par défaut
    Merci pour le lien AlainTech mais j'ai une question sur le principe est ce que l'on peut travailler et modifier un fichier sans l'ouvrir.

    Car moi j'ai toujours des modifications à faire avant de m'en servir comme une base de donnée.

    A bientôt,
    Will

  15. #15
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 43
    Par défaut
    Merci !!

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

Discussions similaires

  1. utilisation des fonction excel dans VBA
    Par ghosty04 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/04/2009, 12h24
  2. équivalent fonction décaler excel en VBA
    Par jstas dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 21/09/2008, 22h49
  3. Intégration d'une fonction Excel dans VBA
    Par RéviAT dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/03/2008, 10h10
  4. Fonction PolyA d'excel sur vba
    Par husker dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/12/2007, 15h02
  5. Fonction excel en VBA
    Par Gary US dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/12/2006, 18h39

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