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 :

Empecher incrementation ligne d'un tableau si une cellule est vide sinon transposer formules en valeur [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut Empecher incrementation ligne d'un tableau si une cellule est vide sinon transposer formules en valeur
    Bonjour,

    Sur une feuille j'ai 5 tableaux. Hormis le 1er qui ne fait pas parti de ce post, chacun d'entres eux génère un N° chrono accompagné d'un texte spécifique.

    Ces 4 tableaux possèdent chacun 3 colonnes.
    La 1ere étant le N° Chrono sans texte (ex: 001)
    La 2eme étant un choix dans une liste déroulante 'ex: M1)
    La 3eme étant le résultat final (ex : PRO-17-001)

    Le 1er tableau va de la colonne F à H
    La formule en cellule F2 est la suivante :
    =MAX(F$2:$F2)+1
    En G2 => Liste déroulante
    La formule en cellule H2 est la suivante :
    =SI(ESTVIDE(G3);"Sélectionner un élément de la liste";"DIR-" & ANNEE(AUJOURDHUI())-2000 & TEXTE([N° chrono];"-000"))
    La formule en F3 est la suivante :
    =MAX(F$2:$F3)+1
    Il faudrait empêcher l'incrémentation de ligne supplémentaire tant que la colonne G (liste déroulante) est vide
    Ensuite lorsque la colonne G est remplie dès que la touche "Tabulation" est pressée, cela doit incrémenter automatiquement une nouvelle ligne au tableau et transformer les formules de la ligne du dessus en valeur.

    Pourquoi cette transposition des formules en valeur ? Dans la formule en colonne H, il y a
    & ANNEE(AUJOURDHUI())-2000
    qui donne comme resultat le deux derniers chiffre de l'année en cours. Or dès que l'on va changer d'année calendaire (2017 => 2018, l'ensemble des résultats va être modifié (ex: DIR-17-001 deviendra DIR-18-001). Il faut donc figer les résultats en valeurs.

    Il faut que je puisse faire la meme manip sur les 4 tableaux (pas le premier)

    Voici le code que j'ai mis dans la feuille de mon classeur pour transformer les formules en valeurs mais rien ne se modifie :
    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
    25
    26
    Private Sub Worksheet_Change(ByVal Target As Range)
    'Si la colonne "Processus liés" du "Tab_Numerotation_Directive" est remplie, les formules de la ligne sont transformées en valeurs
        If Target.Column = 7 Then
            With Sheets("Numerotation Doc SMQ NG").Range("Tab_Numerotation_Directive")
                .Rows(Target.Row - 1).Value = .Rows(Target.Row - 1).Value
            End With
        End If
    'Si la colonne "Processus liés" du "Tab_Numerotation_Procedure" est remplie, les formules de la ligne sont transformées en valeurs
            If Target.Column = 11 Then
            With Sheets("Numerotation Doc SMQ NG").Range("Tab_Numerotation_Procedure")
                .Rows(Target.Row - 1).Value = .Rows(Target.Row - 1).Value
            End With
        End If
    'Si la colonne "Processus liés" du "Tab_Numerotation_Formulaire" est remplie, les formules de la ligne sont transformées en valeurs
            If Target.Column = 15 Then
            With Sheets("Numerotation Doc SMQ NG").Range("Tab_Numerotation_Formulaire")
                .Rows(Target.Row - 1).Value = .Rows(Target.Row - 1).Value
            End With
        End If
    'Si la colonne "Processus liés" du "Tab_Numerotation_Mode_Operatoire" est remplie, les formules de la ligne sont transformées en valeurs
            If Target.Column = 19 Then
            With Sheets("Numerotation Doc SMQ NG").Range("Tab_Numerotation_Mode_Operatoire")
                .Rows(Target.Row - 1).Value = .Rows(Target.Row - 1).Value
            End With
        End If
    End Sub
    Ci joint mon fichier afin de voir le positionnement des tableaux
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    En théorie tu as des zone nommées
    "Tab_Numerotation_Procedure"
    "Tab_Numerotation_Formulaire"
     " Tab_Numerotation_Mode_Operatoire"
    qui n'existent pas dans le classeur


    Nota : je suis en excel 2000 qui ne prend pas les tableaux en compte

    ce qui peut sans doute expliquer le problème.

    Bonne journée

    avec ceci sous excel 2000 ça fonctionne

    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
    25
    26
    Private Sub Worksheet_Change(ByVal Target As Range)
    'Si la colonne "Processus liés" du "Tab_Numerotation_Directive" est remplie, les formules de la ligne sont transformées en valeurs
        If Target.Column = 7 Then
            With Sheets("Numerotation Doc SMQ NG").Range("Tab_Numerotation_Directive")
               Cells(Target.Row, 8).Value = Cells(Target.Row, 8).Value
            End With
        End If
    'Si la colonne "Processus liés" du "Tab_Numerotation_Procedure" est remplie, les formules de la ligne sont transformées en valeurs
            If Target.Column = 11 Then
            With Sheets("Numerotation Doc SMQ NG").Range("Tab_Numerotation_Procedure")
                Cells(Target.Row, 12).Value = Cells(Target.Row, 12).Value
            End With
        End If
    'Si la colonne "Processus liés" du "Tab_Numerotation_Formulaire" est remplie, les formules de la ligne sont transformées en valeurs
            If Target.Column = 15 Then
            With Sheets("Numerotation Doc SMQ NG").Range("Tab_Numerotation_Formulaire")
              Cells(Target.Row, 16).Value = Cells(Target.Row, 16).Value
            End With
        End If
    'Si la colonne "Processus liés" du "Tab_Numerotation_Mode_Operatoire" est remplie, les formules de la ligne sont transformées en valeurs
            If Target.Column = 19 Then
            With Sheets("Numerotation Doc SMQ NG").Range("Tab_Numerotation_Mode_Operatoire")
              Cells(Target.Row, 20).Value = Cells(Target.Row, 20).Value
            End With
        End If
    End Sub

  3. #3
    Membre éprouvé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 222
    Par défaut
    BONJOUR A TOI ET MERCI POUR TON AIDE
    Nota : je suis en excel 2000 qui ne prend pas les tableaux en compte
    Vu qu'en version 2000, les tableaux ne sont pas pris en compte, cela ne fonctionne pas en version 2010 et supérieure.
    En effet, lorsque normalement on incremente une nouvelle ligne dans un tableau, automatiquement, cette dernière s'incremente avec les formules. Or ici vu que la ligne se transforme en valeur, automatiquement lorsqu'on incremente une nlle ligne, celle ci n'a plus les formules de la ligne précédente.

    Cordialement

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

Discussions similaires

  1. [XL-2010] Supprimer une ligne si une cellule est vide
    Par S.Mag dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/06/2017, 12h06
  2. [XL-2007] Suppression de ligne si une cellule est vide
    Par cynoq dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/12/2011, 17h23
  3. [E-07] copier la ligne si au moins une cellule est vide
    Par jawed dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 24/10/2008, 16h29
  4. Réponses: 1
    Dernier message: 23/06/2008, 18h57
  5. Tester si une cellule est vide
    Par amka dans le forum Access
    Réponses: 1
    Dernier message: 09/08/2006, 15h58

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