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ÉBUTANT] Utiliser Autofill avec un range qui est dynamique [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Analyste d'affaires
    Inscrit en
    Mai 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'affaires
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2016
    Messages : 34
    Points : 33
    Points
    33
    Par défaut [DÉBUTANT] Utiliser Autofill avec un range qui est dynamique
    Bonjour à tous,

    J'essaie présentement de faire ajuster plusieurs colonnes de formule en fonction du nombre de lignes dans le fichier qui est variable en fonction de l'extraction de données quotidienne.

    Voici ce que j'ai en ce moment.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    '---------------Erase the data in sku range in "toolMexico" tab------------------------------------------------------------------------------------------
        Worksheets("toolMexico").Activate
        Range("E14").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, Selection.End(xlToRight)).Select
        Selection.ClearContents
     
    '---------------Extend the formulas to the end of the sku range in "toolMexico" tab----------------------------------------------------------------------
        Range("E12").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, Selection.End(xlToRight)).Select
        Selection.AutoFill Destination:=Range("E12:CJ137")
    Je bloque à la dernière ligne.
    J'aimerais que le range s'ajuste en fonction du nombre de colonne, mais je ne sais pas comment adapter ce bout de code.
    Vos suggestions sont les bienvenues.

    Merci d'avance,
    Nomorerulz
    Nomorerulz

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Essaie comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Plage As Range
    '---------------Erase the data in sku range in "toolMexico" tab------------------------------------------------------------------------------------------
        With Worksheets("toolMexico")
            Set Plage = .Range(.Range("E14"), .Range("E14").End(xlToRight))
            .Range(Plage, Plage.End(xlDown)).ClearContents
    '---------------Extend the formulas to the end of the sku range in "toolMexico" tab----------------------------------------------------------------------
            With Plage.Offset(-2).Resize(2)
                .AutoFill Destination:=.Resize(126)
            End With
            Set Plage = Nothing
        End With
    Cordialement.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour

    Vous pouvez passer par le current region (similaire au Ctrl + * sous Excel), par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set InpRng = Worksheets("toolMexico"). Range("E14").CurrentRegion
    Debug.Print InpRng.Address, InpRng.Rows.Count
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  4. #4
    Invité
    Invité(e)
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    With Sheets("Feuil1")
       With .Range(.Cells(14, "E"), .Cells(.UsedRange.Rows.Count, "E"))
            .ColumnWidth = 100
            .EntireRow.AutoFit
            .EntireColumn.AutoFit
        End With
    End With
    End Sub

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Analyste d'affaires
    Inscrit en
    Mai 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'affaires
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2016
    Messages : 34
    Points : 33
    Points
    33
    Par défaut
    Bonjour à tous,

    Tout d’abord, merci pour vos nombreuses réponses.

    gFZT82,
    Le code que vous m'avez fournit marche à merveille, mais il cesse d'ajuster après 126 lignes.
    Y aurait-il un moyen d'adapter ce code pour le rendre dynamique?

    vinc_bilb,
    J'ai tenté d'intégrer votre code au mien, mais je crois passer à côté de quelque chose.
    Je n'ai pas beaucoup d'expérience en vba et je crains ne pas savoir comment l'adapter correctement.

    rdurupt,
    Le code que vous avez indiqué semble traiter l'autofit des cellules.
    Or, j'ai besoin d'aide pour ajuster l'autofill de manière dynamique.
    Ai-je raison ou suis-je passé à côté de l'essentiel?

    Votre aide à tous est très appréciée!
    Nomorerulz
    Nomorerulz

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    With Sheets("Feuil1")
       With .Range(.Cells(14, "E"), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count))
            .ColumnWidth = 100
            .EntireRow.AutoFit
            .EntireColumn.AutoFit
        End With
    End With
    End Sub

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Analyste d'affaires
    Inscrit en
    Mai 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'affaires
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2016
    Messages : 34
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    With Sheets("Feuil1")
       With .Range(.Cells(14, "E"), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count))
            .ColumnWidth = 100
            .EntireRow.AutoFit
            .EntireColumn.AutoFit
        End With
    End With
    End Sub
    Ai-je besoin d'ajouter quelque chose à ceci?
    Lorsque je met le code en place, les formules restent en place et rien n'est descendu vers le bas.
    Ceci semble ajuster la taille de mes cellules.

    Désolé si je n'ai pas bien saisi ce que vous tentez de m'enseigner.

    Nomorerulz
    Nomorerulz

  8. #8
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    gFZT82,
    Le code que vous m'avez fournit marche à merveille, mais il cesse d'ajuster après 126 lignes.
    Y aurait-il un moyen d'adapter ce code pour le rendre dynamique?
    Dans la première partie, tu effaces les données depuis la ligne 14 et jusqu'à la dernière ligne renseignée.
    Dans la deuxième partie, tu effectues une recopie incrémentée des données des lignes 12 et 13 mais rien ne permet de définir jusqu'à quelle ligne doit s'effectuer cette recopie.
    Il manque des indications sur la structure de la feuille et la finalité du traitement pour permettre de déterminer cette limite de la plage... et c'est pour cela que j'ai conservé la plage initiale de 126 lignes (ligne 12 à 137).

    Cordialement.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Analyste d'affaires
    Inscrit en
    Mai 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'affaires
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2016
    Messages : 34
    Points : 33
    Points
    33
    Par défaut
    Je comprends, je n'ai effectivement pas précisé cela.
    Il faut que ces deux lignes soient collées jusqu'à égalité de la dernière cellule de la colonne D.
    Il est facile de le faire à la main en sélectionnant la plage et en double cliquant, car il n'y a pas d'espacement dans la colonne D.
    Par contre, je désire automatiser ceci dans une macro puisque ceci fait partit d'un autre procédé.
    Quel moyen devrais-je utiliser pour déterminer la dernière cellule de la colonne D pour l'indiquer dans votre code en lieu de l'écart initial?

    Merci,
    Nomorerulz
    Nomorerulz

  10. #10
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    La dernière ligne est déterminée par la ligne de code
    DerLig = .Range("D" & Rows.Count).End(xlUp).Row

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Plage As Range
    Dim DerLig As Long
    '---------------Erase the data in sku range in "toolMexico" tab------------------------------------------------------------------------------------------
        With Worksheets("toolMexico")
            DerLig = .Range("D" & Rows.Count).End(xlUp).Row
            Set Plage = .Range(.Range("E14"), .Range("E14").End(xlToRight))
            .Range(Plage, Plage.End(xlDown)).ClearContents
    '---------------Extend the formulas to the end of the sku range in "toolMexico" tab----------------------------------------------------------------------
            With Plage.Offset(-2).Resize(2)
                .AutoFill Destination:=.Resize(DerLig - 11)
            End With
            Set Plage = Nothing
        End With
    Cordialement.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Analyste d'affaires
    Inscrit en
    Mai 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'affaires
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2016
    Messages : 34
    Points : 33
    Points
    33
    Par défaut
    gFZT82,

    Merci énormément

    ça ne pourrait pas mieux fonctionner!

    Je vous souhaite une belle journée,
    Nomorerulz
    Nomorerulz

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/03/2015, 15h21
  2. Probleme avec tout ce qui est collection!
    Par Arctodus dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 12/06/2010, 18h31
  3. Réponses: 5
    Dernier message: 12/03/2010, 11h03
  4. JOIN avec une table qui est dans une AUTRE base access
    Par bastringue dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 30/05/2008, 14h41
  5. [MYSQL] [débutant] utiliser replace avec mysql.pas
    Par alex01pernot dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/08/2006, 21h23

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