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 :

Insérer une ligne selon une condition


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 81
    Points : 68
    Points
    68
    Par défaut Insérer une ligne selon une condition
    Bonjour à tous!

    Voici le problème sur lequel je planche depuis un bon bout de temps sans y arriver.

    L'idée c'est que j'ai une feuille excel, que l'on remplie de données brutes, qui servent à générer des rapports. La procédure à suivre est la suivante:
    1. Sélectionner les données préexistantes (ctrl + A)
    2. Supprimer ces données (suppr)
    3. Ajouter ses données persos (ctrl + V après avoir sélectionné A1)


    Comme ces données sont brutes, la macro insère automatiquement le titre des colonnes (que j'appelle l'entete).
    L'entete varie d'une feuille à l'autre et d'une langue à l'autre.

    Cette feuille sert à la génération de rapport. Les cas d'utilisation sont les suivant:

    1. Il n'y a pas d'entete, donc il faut insérer l'entete
    2. il y a un entete, donc on supprimer cet entete et on remet le nouvel entete (pour être sûr qu'il soit dans la bonne langue)


    Mon problème est que je n'arrive pas à savoir s'il y a un entête ou non.
    La solution brutale serait de comparer la premiere ligne à tous les entetes possibles, mais c'est un peu trop brutal. J'ai essayé une méthode plus fine en nommant la première cellule, mais lorsque l'utilisateur supprime les données (et donc l'entete), le nom de la cellule n'est pas supprimé. Donc mon test ne fonctionne pas.
    Au niveau du code voila ce que j'avais :
    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
    24
    Sub Inserer_Entete(nomFeuille As String)
    Dim i As Integer, ligneEnTete As Integer, indexNom As Integer
    ligneEnTete = -1
    indexNom = -1
    For i = 1 To ThisWorkbook.Names.Count Step 1
        If (ThisWorkbook.Names(i).Name = ENTETEINSERE & nomFeuille) Then
            indexNom = i
        End If
    Next i
    'Si le nom de cellule existe on le supprime
    If (indexNom <> -1) Then
        If (cellule_porte_un_nom("$A$1")) Then
            ligneEnTete = ThisWorkbook.Names.Item(indexNom).RefersToRange.Row
        End If
    ThisWorkbook.Names.Item(indexNom).Delete
    End If
    'Si la ligne d'entête existe on la supprime
    If (ligneEnTete <> -1) Then
        Rows(ligneEnTete & ":" & ligneEnTete).Select
        Selection.Delete
    End If
        Rows("1:1").Select
        Selection.Insert Shift:=xlUp
    ...
    Merci d'avance pour votre aide!

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Si une des colonnes contenait une valeur ou une date, ce serait l'idéal.
    Il suffirait de tester si sur la 1ere ligne cette cellule est numérique ou date.


    --------------
    Frédéric
    http://www.access-developpement.com
    Frédéric
    Développeur d'Applications Access

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 59
    Points
    59
    Par défaut petite idee ?
    Salut,
    Pourquoi ne pa donner une couleur à ta cellule, et tester celle-ci ?
    Si éventuellement tu veux des codes je dois avoir ça dans mon b.....

  4. #4
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 81
    Points : 68
    Points
    68
    Par défaut
    salut!
    merci pour vos réponses.
    Pour les dates ou les chiffres ça ne fonctionne pas car j'ai plusieurs en tete différents qui ne contiennent pas forcément des chiffres ou des dates.
    Pour la couleur, lorsqu'on supprime les données, la couleur reste donc le test ne fonctionnera pas.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Quand je parlais de 1ere ligne, je pensais à la 1ere ligne de données pas à celle de l'entête.
    Il doit forcément y avoir des données de type date ou numérique dans une colonne
    Frédéric
    Développeur d'Applications Access

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 59
    Points
    59
    Par défaut
    Pourquoi tu ne passes pas par un bouton renvoyant à une macro de sup, modif .... protege ta feuille de façon que les utilisateurs soit obligés,
    1erement de selectionner avec la souris la cellule concernée, 2emement de cliquer sur le bouton et là tu mets ce que tu veux

  7. #7
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 81
    Points : 68
    Points
    68
    Par défaut
    fgiambelluco: en gros ce que tu veux faire, c'est passer en revue toutes les cellules de la première ligne te regarder s'il n'y a pas de chiffre ou de dates et à ce moment la ce serait une ligne d'entete et on peut la supprimer? Je vais essayer pour voir

    CRACOS38: je ne comprends pas ta solution, je ne suis pas sûr d'avoir bien compris. Ce traitement est fait au milieu de la macro et non lorsque l'utilisateur insère ses données, je ne peux donc pas mettre de bouton, puisque l'utilisateur ne touche plus à rien.

    Merci à vous deux de m'aider en tout cas!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Points : 59
    Points
    59
    Par défaut
    Désolé, mais tu n'est pas très clair pour moi, tu dis :" mais lorsque l'utilisateur supprime les données (et donc l'entete), le nom de la cellule n'est pas supprimé " je ne vois pa sce qui t'empeches de lancer un controle à ce moment là.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2015, 18h30
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. [XL-2003] Recopier une ligne selon une valeur d'une cellule donnée.
    Par bokgkik dans le forum Excel
    Réponses: 2
    Dernier message: 07/12/2011, 19h00
  4. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  5. Ne pas afficher une ligne selon une valeur
    Par uloaccess dans le forum Access
    Réponses: 3
    Dernier message: 18/11/2005, 14h04

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