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 :

Début en VBA: travailler sur un nombre de cellules variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 47
    Par défaut Début en VBA: travailler sur un nombre de cellules variable
    Bonjour,

    J'ai enfin décidé de découvrir la vie! Mais au début c"est pas évident..

    Je veux automatiser une espèce d'analyse faites sur excel 2007 pour mon activité, celle-ci est composée de fonctions assez basiques (fonctions, recherche V, Filtres, TCD)
    J'ai donc utilisé l'enregistreur de macro avec 26 boutons différents afin de diviser mon code en des étapes compréhensibles.
    Je suis arrivé presque au bout malgré un soucis sur l'étape du TCD.

    Mais le plus gros de mon problème est le faites que mon analyse commence avec l'export d'un fichier excel composé de x lignes et que mon code s'adapte pour le moment seulement au premier export réalisé.
    J'ai essayer d'analyser les codes que je pense comprendre dans la majorité cependant je n'ai pas réussi à adapter les discours trouvé sur les forums à mes cas précis.
    Par exemple pour mon bouton 1; il s'agit seulement d'une fonction GAUCHE(E1;10) en O2 soit:

    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 préparation()
    '
    ' préparation Macro
    '
    
    '
        Sheets("Feuil2").Select
        Range("O1").Select
        ActiveCell.FormulaR1C1 = "Date"
        Range("O2").Select
        ActiveCell.FormulaR1C1 = "=LEFT(RC[-10],10)"
        Range("O2").Select
        Selection.AutoFill Destination:=Range("O2:O5263")
        Range("O2:O5263").Select
        Range("Q5").Select
        Sheets("Feuil1").Select
    End Sub
    Je pensais qu'il fallait peut être créer un variable x avec le nombre de lignes et insérer cette variable dans l'intervalle?
    Bref j'ai ce problème là sur 26 cas différents si vous pouviez me donner quelques pistes sur un simple comme celui là, je pense que je m'en sortirais


    Merci d'avance.

  2. #2
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour,
    Comme tu sembles désireux de t'en sortir par toi même va voir ces pages :
    http://silkyroad.developpez.com/
    C'est une mine d'or

    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 47
    Par défaut
    Merci pour le lien je vais regarde tout ça.
    Mais bon je ne serais pas contre une petite piste ..

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si j'ai bien compris, le problème que tu rencontres c'est que tu veux définir dynamiquement la fin de la plage d'autofill ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.AutoFill Destination:=Range("O2:O5263")
    Remplacer 5263 par la réelle dernière ligne de la colonne ?


    Que ce soit le cas où pas, il est nécessaire d'apprendre à nettoyer le code crée par l'enregistreur de macro.
    Il a tendance à travailler sur des objets actifs (activecell, activesheet, selection etc...) et multiplier les sélection et activation pour switcher d'objet actif
    tout ceci est source de ralentissements très importants, voir parfois de problèmes pour réutiliser la macro

    voici un exemple, où la ligne 5263 est calculée dynamiquement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With Sheets("Feuil2")
        .Range("O1").Value = "Date"
        ' ici on part de 02 et on prend toutes les lignes de la plage active - 1 (pour ne pas compter la ligne 1)
        With .Range("O2").Resize(.UsedRange.Rows.Count - 1, 1)
            ' application de la formule sur l'ensemble de la plage d'un seul coup
            .FormulaR1C1 = "=LEFT(RC[-10],10)"
            ' si tu veux remplacer la formule par sa valeur
            '.Value = .Value
        End With
    End With

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 47
    Par défaut
    Tu as tout à fait compris ce que je voulais faire.
    J'imagine bien que le code en enregistrant la matrice de façon n'est pas écrit de la façon la plus optimale. Je vais essayer de mettre de l'ordre dans tout ça.

    En tout cas cela fonctionne très bien, juste pour comprendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With .Range("O2").Resize(.UsedRange.Rows.Count - 1, 1)
    est la partie qui correspond à mon problème.
    PEux tu me dire si je la comprends bien:

    Donc tu sélectionnes O2 tu définis les plages avec Resize et là t'incrémentes de 1 toutes les plages en partant de -1, ai-je bien compris du coup la formule est incrémenté à l'infini?

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    C'est pas exactement ça, mais l'idée est bonne

    On part de O2 et on le redimensionne :

    - redimension en colonne : on reste sur 1 colonne donc je met 1 sur le second argument de Resize
    - redimension en ligne : on prend la plage active (UsedRange) de la feuille, son nombre de lignes (.Rows.count) et on en enlève 1 (puisqu'on est déjà en ligne 2, faut exclure le comptage de la première ligne)

  7. #7
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Rebonjour,
    Pour t'aider un peu il faudrait que tu expliques plus clairement ce que tu cherches à faire.
    Quel est ton point de départ et à quoi veux-tu arriver?
    Filtrer ? sur quel(s) critère(s)?
    Copier/coller? quelle(s) donnée(s) et à quelle condition?


    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

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

Discussions similaires

  1. [XL-2010] Trier sur une plage de cellules variable
    Par shipuden64 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/03/2015, 14h31
  2. Fusionner un nombre de cellules variable
    Par Bib00 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/06/2013, 11h57
  3. Réponses: 2
    Dernier message: 07/03/2007, 15h09
  4. [VBA-E] travailler sur deux classeurs
    Par argv666 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/09/2006, 10h40
  5. [VBA-E]travail sur deux classeurs excel
    Par richou dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/04/2006, 10h59

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