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 :

besoin d'aide pour macro test de cellule et copie selon cas


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut besoin d'aide pour macro test de cellule et copie selon cas
    bonsoir à tous,
    Je viens de créer ma tte première macro sous VBA Excel 2003.
    Mais elle marche pas du tout et je me prends plutôt la tête pour un début.
    Qq'un aurait-il la gentillesse de m'aider car mes débuts sont difficiles alors que je pensais que ce serait simple.

    J'ai un tableau comme suit :
    15 colonnes - X(pas toujours le mm nbre) lignes.
    Je veux ajouter en ligne 1, colonne 16 le mot "type" puis
    j'ai besoin de lire à partir de la ligne 2, la 9ème colonne. Si elle ne contient rien, je dois mettre en ligne 2, colonne 16 un "G" sinon je dois mettre aussi un "G" puis copier toute cette ligne, la coller en dessous et mettre un "A" à la place du "G". et ainsi de suite.

    Je mets en pièce jointe un extrait de mon fichier avec le résultat attendu.

    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
    Sub Macro3()
    '
    ' Macro3 Macro
    ' Macro enregistrée le 02/11/2008 par TFR
    '
    ' Touche de raccourci du clavier: Ctrl+p
    ligne = 2
    Range("P1").Select
    ActiveCell.FormulaR1C1 = "type"
     
    Do While Not (IsEmpty(ActiveSheet.Cells(ligne, 1)))
    ' Passe à la ligne suivante
     
        If ActiveSheet.Cells(ligne, 2).Select = "" Then
                Selection.Font.ColorIndex = 4
                ActiveSheet.Cells(ligne, 2).Select
                ActiveCell.FormulaR1C1 = "G"
        Else: ActiveSheet.Cells(ligne, 3).Select
                ActiveCell.FormulaR1C1 = "G"
                Range(ActiveCell, ActiveCell.End(xlToLeft)).Select
                Selection.Copy
                ActiveSheet.Cells(ligne, 4).Select
                Selection.Insert Shift:=xlDown
                ActiveSheet.Cells(ligne, 4).Select
                Application.CutCopyMode = False
                ActiveCell.FormulaR1C1 = "A"
        End If
     
    Range("A5").Select
     
    ligne = ligne + 1
    Loop
    End Sub
    J'ai fait ce code via l'enregistrement de macro et de la modif manuelle mais c'est dur-dur !!
    Merci pour votre aide
    Thibo
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonsoir,

    L’enregistrement auto, c’est bien pour débuter, mais cela génère un code avec beaucoup de choses superflues.

    En particulier, VBA permet d’agir sur un objet (cellule, plage, feuille, classeur, ...) sans avoir à le sélectionner. Dans l’immense majorité des cas, les Select et Activate sont inutiles.

    Par exemple, à quoi sert

    à l’intérieur de la boucle ? C’est totalement inutile.

    Il y a beaucoup de choses à dire sur ton code ; je vais commencer par te donner quelques pistes :

    En particulier ton premier test est à corriger : ce qui est à tester est la valeur de la cellule (la propriété Value), pas Select qui est une méthode !

    Commence donc par modifier ainsi ton test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If ActiveSheet.Cells(ligne, 2).Select = "" Then
    est à remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If ActiveSheet.Cells(ligne, 2).Value = "" Then
    ou par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If ActiveSheet.Cells(ligne, 2) = "" Then
    Car Value est la propriété par défaut de l’objet Range (plage de cellules) et peut donc être utilisé de façon implicite dans l’immense majorité des cas.

    Tu veux tester la neuvième colonne, dis-tu.

    Mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If ActiveSheet.Cells(ligne, 2)
    fait référence à la colonne 2, pas à la 9 !

    En outre, prend l’habitude de déclarer systématiquement tes variables. Pour cela, coche «*Déclaration explicite des variables*» dans les préférences (Mac) ou les options (Windows).

    Cela inscrira

    au début de chaque nouveau module. Cela peut éviter de nombreux ennuis liés à d’éventuelles fautes de frappe.

    Dans ta boucle, à terme, supprime les Select et utilise la propriété Offset (regarde l’aide).

    Voici un peu de grain à moudre qui devrait te permettre d’avncer.

    Cordialement,
    Michel Gaboly
    Développeur Excel et VBA


    Pas de question technique par MP, je n’y répondrai pas, utilisez le forum - Merci
    Pensez à ajouter le tag

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Merci pour ta réponse malgré l'heure !!

    J'avoue que je suis un peu largué... je ne sais pas si c'est la fatigue...
    Je verrais demain matin si je comprends tes explications.
    MErci
    bonne soirée.
    Thibault

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

Discussions similaires

  1. [XL-2010] besoin d'aide pour macros excel
    Par math31130 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/08/2011, 17h44
  2. [XL-2007] Besoin d'aide pour macro sur un réseau
    Par scoubi77 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 20/10/2010, 19h58
  3. VBA: besoin d'aide pour macro boursière
    Par DonaldTron dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/11/2007, 15h52
  4. besoin d'aide pour macros ou VBA
    Par jmsor dans le forum VBA Access
    Réponses: 1
    Dernier message: 07/02/2007, 18h41
  5. [VBA-E]SOS besoin d'aide pour un macro
    Par lecossais dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 18/06/2006, 18h57

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