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 :

Fonction "autofill" dynamique


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Par défaut Fonction "autofill" dynamique
    Bonjour à tous,

    Je suis relativement nouveau avec VBA et je cherche dans toute sorte de forum pour trouver la réponse à ma question mais sans résultat concluant jusqu'à présent.

    À l'aide de ma macro je veux remplir les cellules d'une colonne vers le bas jusqu'à la dernière cellule de la colonne adjacente.

    Voici un bout de code pour vous aider à vous placer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Range("I65536").Select
        Selection.End(xlUp).Select
        Selection.AutoFill Destination:=Range(Range("I65536").End(xlUp).Row & Range("H65536").End(xlUp).Row)
    Dans le fond, je veux trouver la dernière cellule remplie à laquelle je dois remplir/copier l'information de la colonne adjacente.

    Est-ce que quelqu'un peut m'aider?

    Merci

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,

    Pour récupéré le numéro de la dernière ligne remplie j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Ws as worksheet
    Dim DerLig as long
     
    Set Ws = sheets("LeNomDeTaFeuille")
    DerLig= ws.cells(ws.columns(8).cells.count,8).end(xlup).row
    Adapte le nom de ta feuille
    La variable DerLig fonctionne sous le même principe que ton select sur base de la colonne N°8 donc H (C'est donc bien ta référence ?)
    Le Columns.cells.count t'affranchi des différences de N° de ligne entre XL2003 et XL2010.
    Il te reste à copier la formule sur la plage, si la formule de référence est en I2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.cells(2,8).copy destination:=ws.range(ws.cells(2,9),ws.cells(derlig,9))
    Ecrit à la volée, j'espère ne pas avoir fait de coquilles parce que pas testé

    A+

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Par défaut
    C'est presque ça en fait. J'ai oublié de mentionner quelque chose c'est pour ça.

    Supposons que la dernière cellule rempli de la colonne 'H' est la H200 et que la dernière cellule rempli de la colonne 'I' est la I190, je dois copier la cellule I190 jusqu'à la cellule I200 pour rejoindre la cellule H200.

    Alors Fvandermeulen, ta solution est presque complète cependant pour le moment le bout de code que tu m'as offert me fait copier le cellule I2 jusqu'à I200, pour revenir à mon exemple précédent.

    Il est a mentionné que la cellule qui est à copier ne sera jamais la même plus mon travail avance dans le temps. Puisque je fait une compilation de facture.

    J'espère être assez clair pour ne pas faire perdre de temps à personne.

    Je suppose que dans ce bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.cells(2,8).copy destination:=ws.range(ws.cells(2,9),ws.cells(derlig,9))
    Il y a les termes "2" qui ne sont pas ce que je dois écrire pour obtenir ce que j'ai besoin.

  4. #4
    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
    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
        With Ws
            'Je détermine le numéro de la dernière ligne renseignée dans la colonne H
            DerLigH = .Range("H" & .Rows.Count).End(xlUp).Row
            'Je détermine le numéro de la dernière ligne renseignée dans la colonne I
            DerLigI = .Range("I" & .Rows.Count).End(xlUp).Row
            'J'effectue la recopie incrémentée dans la colonne I
            .Range("I" & DerLigI).AutoFill Destination:=.Range(.Range("I" & DerLigI), .Range("I" & DerLigH))
        End With
    Cordialement.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Par défaut
    Excellent ça fonctionne.

    Maintenant comment faire pour fusionner les cellules dernièrement copiées? Il ne me reste que ça à faire.

    Merci d'avance

  6. #6
    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
    Par défaut
    Je ne comprends pas vraiment ce que tu cherches à faire.
    Avec la fusion, tu ne conserves que la donnée de la cellule supérieure de la plage fusionnée (toutes les autres données seront supprimées).
    Je ne vois pas l'intérêt d'avoir copié ces données.

    Cordialement.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Par défaut
    @gFZT82:
    Tu as vraiment raison...zut!!!
    Donc dans cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("I" & DerLigI).AutoFill Destination:=.Range(.Range("I" & DerLigI), .Range("I" & DerLigH))
    J'aurais juste à remplacer "Autofill" pas "Merge" j'imagine?

    Ça ne fonctionne pas si je fait juste changer "Autofill" par "Merge".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("I" & DerLigI).Merge Destination:=.Range(.Range("I" & DerLigI), .Range("I" & DerLigH))

  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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    With Ws
            'Je détermine le numéro de la dernière ligne renseignée dans la colonne H
            DerLigH = .Range("H" & .Rows.Count).End(xlUp).Row
            'Je détermine le numéro de la dernière ligne renseignée dans la colonne I
            DerLigI = .Range("I" & .Rows.Count).End(xlUp).Row
            'Je détermine la plage concernée par la copie et la fusion
            Set Plage = .Range(.Range("I" & DerLigI).Offset(1), .Range("I" & DerLigH))
            'J'effectue la copie de la derniere cellule dans la colonne I
            .Range("I" & DerLigI).Offset(1) = .Range("I" & DerLigI)
            'J'effectue la fusion de la plage
            Plage.Merge
    End With
    Cordialement.

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 114
    Par défaut
    @gFZT82:
    Excellent ça fonctionne au poil. Il a fallu que je retire les "Offset" par contre sinon je copiais la cellule et je fusionnais après. C'est excellent j'ai compris comment faire pour cette fois.

    Voici le code maintenant bien travaillé

    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
        'Merge the billed cell
     
        Dim Ws As Worksheet
        Dim DerLig As Long
     
        Set Ws = Sheets("Invoices compiled")
        DerLig = Ws.Cells(Ws.Columns(8).Cells.Count, 8).End(xlUp).Row
     
        With Ws
            'Je détermine le numéro de la dernière ligne renseignée dans la colonne H
            DerLigH = .Range("H" & .Rows.Count).End(xlUp).Row
            'Je détermine le numéro de la dernière ligne renseignée dans la colonne I
            DerLigI = .Range("I" & .Rows.Count).End(xlUp).Row
            'J'effectue la recopie incrémentée dans la colonne I
             Set Plage = .Range(.Range("I" & DerLigI), .Range("I" & DerLigH))
            'J'effectue la copie de la derniere cellule dans la colonne I
            .Range("I" & DerLigI) = .Range("I" & DerLigI)
            'J'effectue la fusion de la plage
            Plage.Merge
        End With
    Merci beaucoup de l'aide

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

Discussions similaires

  1. Fonction Replace pour quote
    Par piero53 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 17/11/2009, 01h19

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