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 :

macro en fonction d'une date


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Par défaut macro en fonction d'une date
    bonjour,
    je suis nouvelle sur ce forum.
    j'ai besoins de votre aide car je pêche un peu sur ma macro.
    Je souhaiterai que la valeur "o" contenus dans certaines cellules de la colonne I, se copie automatiquement dans la colonne de gauche (cad la colonne H).
    Je ne peut pas mettre de formule dans les cellules de la colonne H...
    J'ai commencer une macro qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub commandButton3_Click()
     
    Range("I21").Select
    If Range ("I21")="o" then Range ("H21")="o"
    End Sub
    Le problème de cette macro, c'est qu'elle prend les cellules une par une, et que j'ai 2000 lignes... Si je continu comme ça, je vais faire 300 000 lignes de conditions... C'est pas ce que je recherche
    J'aimerais pouvoir expliquer à l'ordinateur que si dans la colonne I il y a un "o", alors il recopie cet valeur dans la colonne de gauche (ou la colonne H.) Mais je n'y arrive pas...
    quelqu'un saurais comment faire??
    merci d'avance
    julie

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Bonjour,

    bienvenue sur DVP ,

    pour appliquer a un grand nombre de ligne ton test, tu peux passer par une boucle en VBA

    La syntaxe est expliquee dans de nombreux tutoriaux, par exemple celui-ci
    http://heureuxoli.developpez.com/off...l/?page=page12

    un exemple de syntaxe a obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub commandButton3_Click()
    Dim i As Integer
    For i=1 to 100
    If Range ("I" & i)="o" then Range ("H" & i)="o"
    Next i
    End Sub
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Par défaut merciiiiiii
    merci a toi d'avoir pris le temps de me répondre,
    cette macro fonctionne vraiment bien!!
    cependant, je dois faire la même chose avec d'autre colonne (en fait il y a 30 autres colonnes ou je dois faire la même chose)
    est ce que je recopie la macro 30 fois d'affiler??
    merci de ma répondre...
    julie

  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 168
    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 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Toujours en utilisation de boucles mais les solutions sont multiples.
    Tu parles de 30 colonnes. Sont-elles contigües, si elles sont non contigües, l'écart entre colonnes est-il fixe (toutes les 3 colonnes par exemples) ?
    Voici un exemple de code qui va parcourir les colonnes I à U (soit 9 à 21) avec un pas de 2 colonnes et les lignes de 1 à 100 de ces colonnes en modifiant les valeurs de la colonne qui précède si la condition est remplie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub commandButton3_Click()
     Dim Colonne As Long, Ligne As Long
      ' Parcours toutes les 2 colonnes (I à U)
      For Colonne = 9 To 21 Step 2
        For Ligne = 1 To 100
          If Cells(Ligne, Colonne) = "o" Then Cells(Ligne, Colonne - 1) = "o"
        Next Ligne
      Next Colonne
    End sub
    On peut aussi utiliser la boucle For Each In Next
    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 à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Par défaut problème de piece jointe
    aie
    mon dossier est trop gros pour que je puisse le mettre sur le forum.
    Comment faire???

  6. #6
    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 tout le monde,

    Il est vrai que les explications de Julie sont plutôt floues mais Julie, est-ce que tu veux que la modif commence par la colonne correspondant à la date entrée en AR15 ? Voir le code ci-dessous, adapter la plage de recherche si ce n'est pas la 1ère ligne :
    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
     
    Private Sub CommandButton3_click()
     
        Dim Colonne As Long, ligne As Long
        Dim Debut As Integer
     
        'date en AR15 cherchée dans la 1ère ligne à partir de H1 jusqu'à BR1
        On Error Resume Next
        Debut = Range("H1:BR1").Find(Range("AR15"), , xlValues).Column
     
        'si pas d'erreur, la date existe et le bouclage commence à partir
        'de la colonne où se trouve la date cherchée en AR15
        If Err.Number = 0 Then
     
            For Colonne = Debut To 71 Step 2
     
                For ligne = 1 To 1000
                    If Cells(ligne, Colonne) = "o" Then Cells(ligne, Colonne - 1) = "o"
                Next ligne
     
            Next Colonne
     
        End If
     
    End Sub
    Hervé.

  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
    Bien,
    D'après ce que j'ai eu l'occasion de voir (le fichier, trop lourd à joindre), je pense que la solution se trouve avec ce code sachant que je n'ai pas pris la méthode "find" pour la recherche de date mais une boucle (find trop aléatoire)
    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
    Private Sub CommandButton2_Click()
    Dim Colonne As Range, ligne As Long, CelDate As Range
    Dim Dte As Single, cel As Range, plage As Range
     
    With Sheets("grille de suivi médicaments")
       Set CelDate = .Range("AP9")' la date est en AP9 et non AR15
       Set plage = .Range("F14:BP14")'ici tu as une plage avec tes dates
       If IsDate(CelDate) Then
          Dte = CDate(CelDate)
          For Each cel In plage
             If cel = Dte Then
                For ligne = 15 To 1131
                   If Cells(ligne, cel.Column) = "o" Then Cells(ligne, cel.Column - 1) = "o"
                Next ligne
             End If
          Next cel
       End If
    End With
    End Sub
    Il te reste, Julie, à affiner ce code (est-ce bien la colonne précédente ou la suivante, à mettre à jour?)

    en attendant, bonne soirée

    PS : je me suis permis de changer quelques formules sur ton fichier que je vais te renvoyer, je n'ai pas regardé les formules se référants aux autres feuilles
    ci-dessous, image de la feuille concernée :
    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...)

Discussions similaires

  1. [XL-2007] Macro VBA - envoi email via Outlook en fonction d'une date / échéance
    Par Flo18goldengirl dans le forum Excel
    Réponses: 2
    Dernier message: 27/08/2014, 17h24
  2. [XL-2007] macro VBA en fonction d'une date
    Par clempy49 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/06/2012, 14h08
  3. afficher le jour en fonction d'une date
    Par oceane751 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 05/03/2006, 22h20
  4. [Dates] message en fonction d'une date
    Par chouchouboy dans le forum Langage
    Réponses: 14
    Dernier message: 24/02/2006, 17h31
  5. Réponses: 2
    Dernier message: 03/10/2005, 12h00

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