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 :

Problème sur des boucles


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut Problème sur des boucles
    Bonjour,

    J'ai deux macros que j'aimerai optimiser dans une feuille excel.
    J'ai pres de 77000 lignes
    J'aimerai faire l'execution de la macro que si la premiere colonne (A) est non vide et que et qu'une autre colonne est vide ceci pour réduire le temps de traitement.


    j'ai deux boucles suivante :

    Premiere boucle

    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
    33
    34
    35
    36
    37
    38
    Sub Formule_Category()
     
    Dim tableau(96, 1) As String
    'Le nombre de lignes de la page Erreurs doit aller jusqu'à la ligne 96, sinon, adapter la valeur ci-dessus
    Dim dated
     
    dated = Time
    'Alimentation tableau
    j = 0
    While Not IsEmpty(Worksheets("Erreurs").Range("A" & j + 1))
        tableau(j, 0) = Worksheets("Erreurs").Range("A" & j + 1).Text
        tableau(j, 1) = Worksheets("Erreurs").Range("B" & j + 1).Text
        j = j + 1
    Wend
    MsgBox "Tableau de correspondances rempli... OK pour continuer"
     
    Sheets("INCIDENTS").Select
    i = 2
    While Not IsEmpty(Range("A" & i))
    j = 0
      corresp = 0
      While corresp = 0
         If Range("J" & i) = "XXXXX" Or Range("J" & i) = "YYYYYY" Then
            Range("L" & i) = "ASSISTANCE MATERIELLE"
            corresp = 1
         Else
            If InStr((LCase(Range("D" & i).Text)), LCase(tableau(j, 0))) Then
                  Range("L" & i) = tableau(j, 1)
                  corresp = 1
            End If
         End If
         j = j + 1
       Wend
    i = i + 1
    Wend
    MsgBox "Fin: " & Time
     
    End Sub
    j'aimerai faire la boucle sur 2 critères si la Colonne A est non vide et si la colonne L est vide


    Deuxieme boucle


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Formule_wsi()
     
    Worksheets("INCIDENTS").Select
     
        For Each C In Range([B2], Cells(Rows.Count, 2).End(xlUp))
            If C <> "" And Cells(C.Row, 1) <> "" Then
                Cells(C.Row, 13).FormulaLocal = "=(Texte(B" & C.Row & "; ""aaaa-mm""))"
                Cells(C.Row, 13).Value = Cells(C.Row, 13).Value
     
     
            End If
        Next C
    j'aimerai faire la boucle sur 2 critères si la Colonne A est non vide et si la colonne M est vide

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,
    que et qu'une autre colonne est vide
    Regarde du coté de CountBlank :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Application.CountBlank(Range("L:L")) = Plage.Count Then
    que si la premiere colonne (A) est non vide
    de même ou alors CountIf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.CountIf(Range("L:L"), "*")
    Hervé.

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut
    Je n'arrive pas a l'intégrer tu peux me mettre la syntaxe réelle dans ma boucle merci

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour !

    La demande initiale a-t-elle au moins été correctement exprimée ?‼

    Citation Envoyé par laurent27530 Voir le message
    J'aimerai faire l'execution de la macro que si la premiere colonne (A) est non vide et que et qu'une autre colonne est vide
    En clair cela veut dire s'il y a une seule saisie dans « l'autre colonne » ne rien faire alors …
    Dans ce cas, la ligne de Theze est la condition pour déclencher la boucle, donc pas dans la boucle mais avant !

    __________________________________________________________________________________________
    Question bien formulée, solution assurée ! (Robert Durupt)

  5. #5
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    et s'il s'agit de la col "L"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Macro1()
    'pas besoin de boucle
    Dim Nbelements As Long
    Dim DerCel As Range
    With Sheets("Feuil1") 'àremplacer par nom de ta feuille
      Set DerCel = .Range("A" & .Rows.Count).End(xlUp)
      Nbelements = WorksheetFunction.CountIfs(.Range("A2", DerCel), "<>" & "", .Range("L2", DerCel(1, 12)), "=" & "")
      MsgBox Nbelements 'bien sur, juste pour controler
    End With
    End Sub
    à tester ou adapter
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut
    je suis desolé mais cela ne réponds pas a ma demande j'ai fait un vba pour calculer les valeurs de la colonnes M a Z
    j'ai des données de la colonnes A a L
    Or lorsque je lance mon script il repart de la ligne 2 ce que que je voudrais faire c'est de faire le calcul que si M = vide et A <> vide de façon a ne pas tout recalculer
    Plus de 80 000 lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Worksheets("WORK SHEET INCIDENTS").Select
    Application.Calculation = xlCalculationManual
     
     
        For Each C In Range([B2], Cells(Rows.Count, 2).End(xlUp))
            If C <> "" And Cells(C.Row, 1) <> "" Then
                Cells(C.Row, 13).Value = Evaluate("=CONCATENATE(YEAR(B" & C.Row & "),""-"",TEXT(MONTH(B" & C.Row & "), ""00""))")
                ........
          End If
        Next C
    Application.Calculation = xlCalculationAutomatic
    End Sub

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    que si M = vide et A <> v
    et
    j'aimerai faire la boucle sur 2 critères si la Colonne A est non vide et si la colonne L est vide
    faudrais savoir, et attention à la remarque de Marc, de toutes façon, si tu te forces (à moins que je ne comprenne rien), ma proposition peut être adaptée facilement
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Oui car s'il y a confusion entre colonne et cellule …

    Avec une présentation initiale ne laissant ni doute ni ambiguïté, ce serait résolu depuis deux mois ‼



    __________________________________________________________________________________________
    Un problème sans solution est un problème mal posé. (Albert Einstein)

  9. #9
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut
    Bonjour,

    Effectivement je me suis peut etre mal exprimé
    je vous ai mis un exemple
    l'idee est d'exceuter le calcul si la ligne de la colonne A n est pas vide et que la ligne de la colonne D est vide
    Ceci pour me permettre de réduire le temps d'éxécution
    merci d'avance
    Fichiers attachés Fichiers attachés

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    De toute manière là où maintenant je suis, je n'accède pas aux .zip ! Le mieux est en .xls ou .xlsx …

    Citation Envoyé par laurent27530 Voir le message
    si la ligne de la colonne A n est pas vide et que la ligne de la colonne D est vide
    C'est toujours pas clair !

    Une ligne c'est tout en horizontal, une colonne c'est donc tout en vertical et au croisement il y a une cellule :
    est-ce donc si difficile de prendre le temps de clairement s'exprimer ?‼

    J'imagine dans la course spatiale vers la Lune, les ricains ne l'auraient jamais atteinte !

    Sinon tu n'es peut-être pas de nouveau à deux mois près, estimation d'une solution en septembre ? …

    __________________________________________________________________________________________
    De la précision nait la solution …


  11. #11
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut
    N°	DATE        	TEXTE	CALCUL1	CALCUL2	CALCUL3	CALCUL4
    1	01/05/2014	A1	2014-05	18	1	0
    1	02/05/2014	A2	2014-05	18	2	0
    1	03/05/2014	A3	2014-05	18	3	1
    1	04/05/2014	A4	2014-05	19	4	1
    1	05/05/2014	A5	2014-05	19	5	0
    1	06/05/2014	A6	2014-05	19	6	0
    1	07/05/2014	A7				
    1	08/05/2014	A8	2014-05	19	8	0
    pour exemple
    si la ligne 8 de la colonne N° (A8) n'est pas vide mais la ligne 8 de la colonne CALCUL1 (D8) est vide faire le calcul

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

Discussions similaires

  1. PHP et IIS Problème sur des repertoires virtuels
    Par remi_neo dans le forum IIS
    Réponses: 1
    Dernier message: 30/05/2007, 17h17
  2. [MySQL] problème sur une boucle for
    Par leclone dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 28/12/2006, 10h33
  3. [MySQL] Problème sur des comptes (login/mdp)
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/03/2006, 15h41
  4. Problème sur une boucle
    Par Mateache dans le forum ASP
    Réponses: 6
    Dernier message: 31/01/2006, 09h48
  5. Problème sur des chaînes de caractères
    Par Anonymous dans le forum Access
    Réponses: 9
    Dernier message: 16/09/2005, 08h21

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