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 :

Rédaction macro condition


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    comptable
    Inscrit en
    Janvier 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : comptable

    Informations forums :
    Inscription : Janvier 2015
    Messages : 8
    Par défaut Rédaction macro condition
    Bonjour,

    Je suis un tout débutant sur VBA (et pas informaticien de formation).
    J'ai fait un petit tableau excel et j'ai rédiger la macro suivante pour copier des valeur contenue dans des cellules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Range("N3:R3").Select
        Selection.Copy
        Range("A3:I3").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("M24").Select
     
    End Sub

    Cependant, j'aimerais que cette macro sois soumise à une condition c'est-à-dire copier les valeur si la cellule M3 contient "VRAI"

    D'avance merci pour votre aide

    Cordialement

  2. #2
    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 171
    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 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La méthode Select et l'objet Selection sont inutiles et gourmands en ressources. De plus il est hautement recommandé de préciser la filiation complète de l'objet Range (Feuille + classeur). Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ThisWorkbook.Worksheets("Feuil1")
    .Range("N3:R3").Copy .Range("A3")
    .Range("A3:I3").Value = .Range("A3:I3").Value ' Equivalent à Copier/Collage special-Valeur
    End With
    Cependant, j'aimerais que cette macro sois soumise à une condition c'est-à-dire copier les valeur si la cellule M3 contient "VRAI"
    Il serait préférable de tester VRAI qui est une vrai valeur pour Excel (booléenne) que "VRAI" qui est une chaîne de caractères
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
     With ThisWorkbook.Worksheets("Feuil1")
      If .Range("M3") Then
      .Range("N3:R3").Copy .Range("A3:I3")
      .Range("A3:I3").Value = .Range("A3:I3").Value ' Equivalent à Copier/Collage special-Valeur
      End If
     End With
    End Sub
    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

  3. #3
    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,

    on voit bien que le code n'a pas été écrit mais créé par le Générateur de macros !

    Donc pour la feuille active (sinon suivre les judicieuses remarques de Philippe !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If [M3].Value = True Then [A3:I3].Value = [N3:R3].Value
    Et une autre règle du forum :
    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  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 171
    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 171
    Billets dans le blog
    53
    Par défaut
    Bonjour Marc,

    Pourquoi suis-je passé par la méthode Copy alors qu'une seule ligne suffisait

    Je viens de constater qu'il doit avoir un problème du nombre de cellules copiées (N3:R3) au nombre de cinq avec la plage de destination qui en contient 8 (A3:I3)
    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
    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 Philippe !

    Je n'ai pas osé lui évoquer son problème de plage pour ne pas l'embrouiller avec sa question initiale, grand débutant oblige …

    Je m'attendais à un retour du genre « Pourquoi les quatre dernières cellules sont en erreur ? »
    auquel j'aurais répondu : « Faut p't'être bien penser à vérifier la concordance de la taille des plages de cellules ‼ » …

    Maintenant, il est avisé !

  6. #6
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 128
    Par défaut
    Bonjour,

    Dans ce cas de copié/collé simple, on n'a pas vraiment besoin de s'intéresser à la taille des plages.

    Si tu passes par un "vrai" copié/collé, tu as juste à écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Worksheets("ma_feuille").Range("M3").Value = True Then
        Worksheets("ma_feuille").Range("N3:R3").Copy
        Worksheets("ma_feuille").Range("A3").PasteSpecial Paste:=xlPasteValues
    End If

    par contre, si tu passes par un "recopiage de plage, tu dois avoir des plages de même taille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Worksheets("ma_feuille").Activate
    If Range("M3").Value = True Then
        Range("A3:E3").Value = Range("N3:R3").Value 
    EndIf

Discussions similaires

  1. Macro Condition sans rupture de liaison
    Par lagratteCchouette dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 02/08/2009, 21h30
  2. Syntaxe des macro conditions
    Par stefsas dans le forum Macro
    Réponses: 1
    Dernier message: 12/06/2008, 13h24
  3. Macro : condition d'existence,
    Par Pharmacos dans le forum VBA Access
    Réponses: 4
    Dernier message: 18/02/2008, 09h54
  4. Aide rédaction des conditions dans where clause
    Par Pahcixam dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/08/2007, 13h01
  5. [Macro]Conditions dans une macro
    Par choupi2a dans le forum IHM
    Réponses: 2
    Dernier message: 02/05/2007, 13h28

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