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 :

Autosize dans une colonne variable


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Par défaut Autosize dans une colonne variable
    Bonjour,

    Je dois réaliser un tableur Excel durant mon stage et il faudrait qu'il soit automatisé le plus possible. Je débute dans les macro Excel donc elle ne sont pas forcement très poussées :/

    La macro sur laquelle je bloque consiste en fait a insérer une colonne, y rentrer un titre, insérer une fonction dans la première cellule. Fonction que voici =(DROITE(B2;NBCAR(B2)-2) et donc comme elle utilise la colonne B, je veux qu'elle s'arrête sur la même ligne que la colonne B.

    Et donc j'obtiens ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Range("A1").Select
        Selection.EntireColumn.Insert
        ActiveCell.FormulaR1C1 = "NoFactureRetraité"
        Range("A2").Select
        ActiveSheet.Paste
        Range("A2").Select
        ActiveCell.FormulaR1C1 = "=(RIGHT(RC[1],LEN(RC[1])-2))"
        Range("A2").Select
        Selection.AutoFill Destination:=Range("A2:A1546")
        Range("A2:A1546").Select
    End Sub

    Le problème c'est que le nombre de ligne peut varier et donc le A1546 n'est pas adapté a ce que je veux faire.

    Si vous pouviez m'aider la dessus svp, ca me sauverait mon tableau qui va beaucoup fonctionner sur ce principe d'étendre une rechercheV ou autre formule, au même niveau que la ligne dans laquelle le critère est écrit. ^^


    Bonne journée

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 206
    Par défaut
    J'ai testé ça, ça marche :

    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
    Private Sub Pouet()
     
        Dim xlsWs As Excel.Worksheet
        Dim nbRow As Integer
     
        Set xlsWs = ThisWorkbook.Worksheets("TaFeuille")
     
    'Insertion d'une nouvelle colonne avant la colonne A
        xlsWs.Range("A1").EntireColumn.Insert
    'Ajout du titre en A1
        xlsWs.Range("A1").Value = "NoFactureRetraité"
    'Ajout de la formule en A2
        xlsWs.Range("A2").Formula = "=Right(B2, Len(B2) - 2)"
    'Récupération du nombre de lignes
        nbRow = xlsWs.Range("B2").End(xlDown).Row
    'Copie de la formule sur les lignes suivantes
        xlsWs.Range("A2").AutoFill Destination:=xlsWs.Range("A2:A" & nbRow)
     
    End Sub
    Par contre, les données à traiter avant d'exécuter la macro sont dans la colonne A? Car l'insertion d'une nouvelle colonne les déplace en B et les résultats s'affichent en A.

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")                        'à adapter selon le nom de ta feuille
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        .Columns(1).Insert
        .Range("A1") = "NoFactureRetraité"
        With .Range("A2:A" & LastLig)
            .FormulaR1C1 = "=RIGHT(RC[1],LEN(RC[1])-2)"
            .Value = .Value
        End With
    End With

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Par défaut
    Super, les deux solutions marchent du tonnerre !

    Merci beaucoup à tout les deux pour l'efficacité et la rapidité de vos réponses

    Au plaisir !

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Par défaut
    Rebonjour !

    Je me permet de revenir vous voir car malgré après avoir retravaillé la première solution que vous m'avez donné, je n'arrive pas a terminer mon tableau.

    Il s'agit cette fois d'étendre des formules se trouvant déja sur le tableau (sur la ligne 4 et doivent être étenduent a partir de la ligne 6), mais cette fois il s'agit de plusieurs colonne et toujours de s'arreter quand il n'y a plus rien dans la colonne référence (ici la A)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Range("B4:K4").Select
        Selection.Copy
        Range("B6").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Selection.AutoFill Destination:=Range("B6:K433")
        Range("B6:K433").Select

    Les formules sont toutes des "recherchev" sauf la dernière la K qui est "=SI(ESTERREUR(c6);"Payé";"Impayé")"

    J'ai pensé a les faire individuellement après avoir copié collé la formule se trouvant donc au dessus, même si ca représente une vingtaine de colonne ca m'a donné ca :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Dim xlsWs As Excel.Worksheet
        Dim nbRow As Integer
     
        Set xlsWs = ThisWorkbook.Worksheets("3128")
    
    
    'Ajout de la formule en A2
        xlsWs.Range("b6").Formula = "=RECHERCHEV(A6;'Balance SAP'!$A$1:$I$10001;9;FAUX)"'Récupération du nombre de lignes
        nbRow = xlsWs.Range("A6").End(xlDown).Row
    'Copie de la formule sur les lignes suivantes
        xlsWs.Range("A6").AutoFill Destination:=xlsWs.Range("B6:B" & nbRow)
    (il m'indique une erreur en rouge)

    Si vous avez une solution et même mieux, de quoi le faire pour toutes les colonnes en un coup je suis preneur ^^ les formules vont de B6 a K6 et donc la fin serait variable, allant de 60lignes a 3000+

    Merci encore de votre aide !

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")                                   'à adapter selon le nom de ta feuille
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        .Range("B4:K4").Copy .Range("B6:K" & LastLig)
    End With
    End Sub
    à combiner avec le premier code

Discussions similaires

  1. [XL-2010] Remplacer des caractères variables dans une colonne
    Par Gpadide dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2013, 01h25
  2. Vérifier présence d'une variable dans une colonne.
    Par sarah-geek dans le forum Général VBA
    Réponses: 4
    Dernier message: 01/08/2012, 14h02
  3. [XL-2007] Valeur textbox dans une colonne de longueur variable
    Par luko6 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/10/2009, 14h42
  4. Réponses: 5
    Dernier message: 26/03/2008, 21h48
  5. AutoSize d'une colonne dans un DBGrid
    Par kmaniche dans le forum C++Builder
    Réponses: 1
    Dernier message: 14/12/2006, 23h59

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