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 :

transformer un tableau en un autre(vba)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Par défaut transformer un tableau en un autre(vba)
    Bonjour,

    J'ai un tableau que j'ai nommé à l'aide d'un petit programme vb; maintenant je souhaite transformer ce tableau et en créer un autre dans une nouvelle feuille en faisant les étapes suivantes :
    - ajouter un jour à chaque date dans une une plage de B1 à H1
    - supprimer les deux dérnières colonnes du tableau
    - virer toutes les lignes qui contiennent plus d'une case vide sauf les ligne qui ont des A2, A3... vérifiant une certainte condition (ont des valeurs par exemple comprises entre 39 et 41 et ensuite entre 79 et 81...)
    - prendre la cellule B8 et lui affecter une règle

    Pouvez vous me donner des point de départ SVP ?

    Merci d'avance

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pour supprimer les lignes vides... ou presque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Test()
    For NoLig = 1 To Cells.SpecialCells(xlCellTypeLastCell).Row
         If Application.WorksheetFunction.CountA(Range(Cells(NoLig, 1), Cells(NoLig, 255))) < 2 Then 'effaces les lignes contenant plus d'une cellule renseignée
            Rows(NoLig).EntireRow.Delete
         End If
    Next
    End Sub
    Tu peux naturellement ajouter des conditions dans le if ... then (entre Then et ... .delete) pour ignorer les cellules contenant ce quelles doivent contenir

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour

    ajouter un jour à chaque date dans une une plage de B1 à H1
    tu peux utiliser la fonction dateadd pour cela

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut lesguignols et le forum
    - ajouter un jour à chaque date dans une une plage de B1 à H1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Cel As Range
    ....................
    For Each Cel In Range("B1:H1")
        If IsDate(Cel) Then Cel = Cel + 1
    Next Cel
    - supprimer les deux dérnières colonnes du tableau
    lesquelles sont tes dernières colonnes ? (Désolé, ma boule de cristal est en panne)
    - virer toutes les lignes qui contiennent plus d'une case vide sauf les ligne qui ont des A2, A3... vérifiant une certainte condition (ont des valeurs par exemple comprises entre 39 et 41 et ensuite entre 79 et 81...)
    J'ai beau tirer les cartes, elles ne veulent pas révéler les règles exactes. Il faut dire que je ne suis pas bon en cartomancie
    .- prendre la cellule B8 et lui affecter une règle
    un double-décimètres suffira, ou il faut plus grand ?

    A+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Par défaut
    pas mal si les réponses sont toutes comme ça. ça me fait avancer incroyablement si non ouskel'n'or pourquoi t'as mis (Nolig,255) pourquoi 255? et pourquoi dans le "if" t'as mis la condition < 2 ? il faudrait > 2 je pense non ?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut lesguignols
    pas mal si les réponses sont toutes comme ça. ça me fait avancer incroyablement
    Et si les questions sont aussi vagues, on va plus avancer !
    Remarque, tu as raison. Je ferais mieux de ne pas répondre
    A+

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par lesguignols Voir le message
    pas mal si les réponses sont toutes comme ça. ça me fait avancer incroyablement si non ouskel'n'or pourquoi t'as mis (Nolig,255) pourquoi 255? et pourquoi dans le "if" t'as mis la condition < 2 ? il faudrait > 2 je pense non ?
    Parce que dans Excel 2003 (ma version) il y a 256 colonnes.
    Pour la condition : La fonction utilisée (counta) compte les cellules renseignées. Si tu mets > 1 tu effaces toutes tes lignes qui ont plus d'une cellule renseignée.
    Regarde dans l'aide Excel, c'est l'équivalent de la fonction NBVAL.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Par défaut
    Et si les questions sont aussi vagues, on va plus avancer !
    Remarque, tu as raison. Je ferais mieux de ne pas répondre
    je ne voulais pas rejeter tes réponses Gorfael; il faut pas le prendre comme ça; mais je n'ai pas détailler mes questions pour ne pas géner les gens et qu'ils trouvent mon problème compliqué. j'ai essayé de simplifier le maximum c'est tout. mais au cas où quelqu'un porrait m'essayer c'est avec plaisir car je bloque toujours sur quelques points.

    La fonction utilisée (counta) compte les cellules renseignées. Si tu mets > 1 tu effaces toutes tes lignes qui ont plus d'une cellule renseignée.
    .
    en fait ouskel'n'or, je voudrais supprimer les lignes de mon tableau qui contiennent au moins une cellule vide et dont la première cellule ne cotient pas un chiffre entre 39 et 41. quelle fonction peut remplacer counta et qui pourrait m'aider à faire ça.

    merci bien

  9. #9
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour tlm,

    Je vous propose mes solutions,

    • Pour :

    ajouter un jour à chaque date dans une une plage de B1 à H1
    Pas mieux que Gorfael

    • Pour :

    supprimer les deux dérnières colonnes du tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test1()
    Dim DerCol As Byte
    DerCol = Cells(1, Columns.Count).End(xlToLeft).Column
     
    Range(Cells(1, DerCol - 1), Cells(1, DerCol)).EntireColumn.Delete
    End Sub
    • Pour :

    je voudrais supprimer les lignes de mon tableau qui contiennent au moins une cellule vide et dont la première cellule ne cotient pas un chiffre entre 39 et 41
    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
    Sub test2()
    Dim i As Integer, j As Integer, DerCol As Byte
     
    DerCol = Cells(1, Columns.Count).End(xlToLeft).Column
     
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        If Cells(i, 1) <> 39 And Cells(i, 1) <> 40 And Cells(i, 1) <> 41 Then
            For j = 1 To DerCol
                If Cells(i, j) = "" Then
                Rows(i).Delete
                Exit For
                End If
            Next
        End If
    Next
    End Sub

Discussions similaires

  1. Réponses: 13
    Dernier message: 01/07/2020, 14h03
  2. [Toutes versions] transformation d'un tableau en un autre tableau
    Par fraid49 dans le forum Excel
    Réponses: 2
    Dernier message: 03/06/2010, 14h24
  3. [VBA-E]copie spéciale d'un tableau vers un autre
    Par gojira dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/10/2006, 16h21
  4. Réponses: 2
    Dernier message: 14/09/2006, 22h26
  5. [VBA-E] - transformé un tableau excel en objet
    Par jimbololo dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 03/06/2006, 15h48

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