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 :

Petite macro simple


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Petite macro simple
    Bonjour,
    Je débute en macro et j'aimerai créer un tableau en fonction de valeurs d'un autre tableau.

    Par exemple, j'ai mon tableau:
    2011 | 3 | A
    2012 | 5 | A
    2013 | 1 | A

    Et j'aimerai avoir:
    2011 | A
    2011 | A
    2011 | A
    2012 | A
    2012 | A
    2012 | A
    2012 | A
    2012 | A
    2013 | A

    Donc 3 fois 2011, 5 fois 2012 et 1 fois 2013. Sachant que les 3, 5 et 1 ne sont pas statique mais aléatoire.
    (Et A étant la même formule du type ALEA().)

    Voici mon code pour l'instant. Avec lequel j'obtiens un resultat pas super:
    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
     
    Sub essai()
     
    Dim temp As Integer, i As Integer, j As Integer
     
    temp = 1
     
        For i = 2 To 1002
            For j = temp To Cells(i, 6)
                Cells(j + 1, 14) = Cells(i, 5)
                Cells(j + 1, 15) = Cells(2, 7)
            Next j
            temp = j
        Next i
     
    Cells(2, 4) = j
     
    End Sub

  2. #2
    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
    Par exemple
    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
    Dim LastLig As Long, i As Long
    Dim n As Integer
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")                        'A adapter
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = LastLig To 2 Step -1
            n = Int(Val(.Range("B" & i).Value))
            If n > 1 Then
                .Rows(i).Copy
                .Rows(i & ":" & i + n - 2).Insert
                Application.CutCopyMode = False
            End If
        Next i
        .Columns(2).Delete
    End With

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour votre réponse.
    Cependant j'ai du mal à comprendre ce code, surtout les lignes 6 et 8.
    Pouvez vous me l'expliquer svp.

  4. #4
    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
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Dim LastLig As Long, i As Long
    Dim n As Integer
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")                        'A adapter
        'N° de ligne de la dernière cellule remplie de la colonne A
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        'on parcour les cellules de la colonne A du bas vers le haut
        For i = LastLig To 2 Step -1
            'n est la valeur de la cellule B (nombre de lignes à ajouter pour chaque année)
            'j'ai mis Val pour qu'il n'y aurait pas d'erreur si B n'est pas numérqiue, et Int pour prndre la partie entière
            'si tu es sûr et certain que tu as en colonne B un entier tu pourra te contenter de:
            'n = .Range("B" & i).Value
            n = Int(Val(.Range("B" & i).Value))
            'si le nombre en B est >1...
            If n > 1 Then
                .Rows(i).Copy
                .Rows(i & ":" & i + n - 2).Insert
                Application.CutCopyMode = False
            End If
        Next i
        .Columns(2).Delete
    End With

  5. #5
    Invité
    Invité(e)
    Par défaut
    Cool merci pour ton code. Il me reste quelques dernière questions avant de tout bien comprendre

    - Tu modifie directement le tableau c'est bien ça? Si je voudrai garder mon tableau original et créer un tableau avec les années et le nombres d'occurrences, je devrais modifier la ligne 18?
    - La ligne 2 sers à vider la colonne "B"?
    - Et dans mon cas n peut être compris entre 0 et 16 compris. Donc dois-je enlever le If de la ligne 16 ou j'ai mal compris cette condition?
    - Pour .Rows, il est indispensable de mettre le . avant le nom de la fonction?

  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
    Tu peux copier le tableau initial vers une autre feuille et d'y appliquer le code. Si c'est dans la même feuille, on pourra proposer autrement.
    Oui, la ligne 22 sert à supprimer la colonne B (C devient après suppression en B)
    Non le If de la ligne 16 doit rester, car cette condition permet de savoir dans quel cas on doit ajouter des lignes identiques. (c'est dans le cas ou n > 1)
    Si n=1, on a déjà une ligne, on a rien à insérer
    Si n=2, on a déjà une ligne on doit ajouter une autre ligne
    ...etc

    Rows n'est pas une fonction, fais un F1 tu sauras
    Worksheet.Rows, propriété
    Cette propriété renvoie un objet Range qui représente toutes les lignes contenues dans la feuille de calcul spécifiée. Objet Range en lecture seule. Syntaxe
    expression.Rows
    expression Variable qui représente un objet Worksheet.
    Regarde cette exemple qui utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("Feuil1")
    '...
    End With
    Exemple
    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
    Sub aaa()
     
    With Worksheets("Feuil1")
        .Rows(1).Insert
        .Columns(2).Delete
        .Range("A1") = "TOTO"
    End With
    End Sub
     
    Sub bbb()
     
    Worksheets("Feuil1").Rows(1).Insert
    Worksheets("Feuil1").Columns(2).Delete
    Worksheets("Feuil1").Range("A1") = "TOTO"
    End Sub
    Ces 2 codes font la même chose mais le premier est plus optimisé.

Discussions similaires

  1. [CSS] petite question simple
    Par joe206 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 24/05/2006, 17h06
  2. petit script simple
    Par frjover dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/04/2006, 09h31
  3. petite macro sur excel...
    Par manu13009 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/12/2005, 10h57
  4. Un petit software simple en JAVA qui sauve en XML ??
    Par calogerogigante dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 30/11/2005, 14h19
  5. [XSL] pleins de petites questions simples
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 29/08/2005, 17h53

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