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 :

Si cellule de colonne A vide, alors formule dans cellule de colonne B


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Éducateur spécialisé
    Inscrit en
    Mai 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Éducateur spécialisé
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2020
    Messages : 14
    Par défaut Si cellule de colonne A vide, alors formule dans cellule de colonne B
    Bonjour

    Je voudrais une aide.
    Pour un calcule de taux d'occupation, j'ai développé une macro.
    Elle copie des données de deux tableaux la suite puis ajouter une formule à chaque ligne crées.
    Sauf que cela ne marche pas pour l'ajout. J'ai beau tourner dans tous les sens, l'erreur m'échape.*
    Qu'en pensez vous ?

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Sub Taux()
    '
    '
    '
      On Error GoTo ErreurMacro
     
      Dim DLig As Long
      Dim i As Integer
     
      ' Récupérer la dernière ligne du tableau
      DLig = Range("A" & Rows.Count).End(xlUp).Row
     
      Range("A2:A" & DLig & ",B2:B" & DLig & ",D2:D" & DLig & ",M2:M" & DLig).Copy
      'Ouvre le fichier ou l'on colle les données
     
      With Sheets("Taux d'occupation").Range("A3").End(xlUp)(2)
      .PasteSpecial Paste:=xlValues, Transpose:=False
      End With
     
      Sheets("Archives").Activate
     
      DLig = Range("A" & Rows.Count).End(xlUp).Row
     
      Range("A68:A" & DLig & ",B68:B" & DLig & ",D68:D" & DLig & ",M68:M" & DLig & ",BE68:BE" & DLig).Copy
      'Ouvre le fichier ou l'on colle les données
     
      With Sheets("Taux d'occupation").Range("A69").End(xlUp)(2)
      .PasteSpecial Paste:=xlValues, Transpose:=False
      End With
     
      For i = 3 To 150
     
        If Range(A & i).Value <> "" Then
     
     
        Cells(E, i).FormulaLocal = "=SI(MOIS(Tableau8[[#En-têtes];[janv-2020]])<MOIS(AUJOURDHUI());MAX(0;MIN(FIN.MOIS(Tableau8[[#En-têtes];[janv-2020]];0);[@[Date de départ]])-MAX(FIN.MOIS(Tableau8[[#En-têtes];[janv-2020]];-1);[@[Date d''arrivée]]-1));""En_attente"")"
        Cells(F, i).FormulaLocal = "=SI(MOIS(Tableau8[[#En-têtes];[févr-2020]])<MOIS(AUJOURDHUI());MAX(0;MIN(FIN.MOIS(Tableau8[[#En-têtes];[févr-2020]];0);[@[Date de départ]])-MAX(FIN.MOIS(Tableau8[[#En-têtes];[févr-2020]];-1);[@[Date d''arrivée]]-1));""En_attente"")"
     
        End If
     
      Next i
     
    ErreurMacro:
     
    MsgBox Err.Number & vbLf & Err.Description
     
    End Sub

  2. #2
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour,

    Après lecture rapide du code, il me semble (vu la formule) que tu utilises les tableaux structurés, du moins pour la synthèse de tes deux plages.
    Dans ce cas,il te suffirait d'ajouter la formule dans la première cellule de la colonne devant donner le résultat, cette formule serait automatiquement étendue à toute la plage de la colonne et ce sans Vba.

    Bat,

  3. #3
    Membre habitué
    Homme Profil pro
    Éducateur spécialisé
    Inscrit en
    Mai 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Éducateur spécialisé
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2020
    Messages : 14
    Par défaut
    Bonjour Mfoxy

    Le problème est que cela ne se fait pas. De plus, après utilisations, les lignes copiées vont être supprimées.

  4. #4
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Re,

    Dans les ligne 33 à 37, boucle pour ajout de la formule, je ne vois pas la parentalité des cellules.
    Donc la formule sera ajoutée dans la feuille active du classeur, qui n est peut-être pas la feuille de synthèse ?

    De plus ,lorsque l,on travail avec des tableau structurés, listobject, la syntaxe de code est différente de celle des plage standard.
    Vous trouverez sur ce site, de très bon tuto , de Phillipe Tulliez et Pierre Fauconnier, vous permettant d'apprivoiser ceux-ci.

    Bav

  5. #5
    Membre habitué
    Homme Profil pro
    Éducateur spécialisé
    Inscrit en
    Mai 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Éducateur spécialisé
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2020
    Messages : 14
    Par défaut
    Pour être franc, je ne comprends pas la parentalité des cellules

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour être franc, je ne comprends pas la parentalité des cellules
    Chaque objet a un parent qui lui même peut en avoir un.
    Ainsi une cellule (objet Range) a comme parent la feuille (objet Worksheet) dans laquelle elle se trouve qui elle même a comme parent le classeur (objet Workbook).
    Dans la ligne de code Range("A1").Value="Toto", on écrira la chaine Toto dans la cellule A1 de la feuille active.
    Alors que si l'on écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("maFeuille").Range("A1").Value = "Toto"
    on écrira bien dans la bonne cellule quelque soit la feuille active.

    C'est exactement comme dans la nature.
    La feuille a comme parent, la branche qui elle même a comme parent l'arbre qui lui même pourrait avoir comme parent le parc ou la forêt, etc.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre habitué
    Homme Profil pro
    Éducateur spécialisé
    Inscrit en
    Mai 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Éducateur spécialisé
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2020
    Messages : 14
    Par défaut
    Je progresse mais ca marche pas

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Sub Taux()
    '
    '
    '
     
    'On Error GoTo ErreurMacro
     
      Dim DLig As Long
      Dim i As Integer
     
      Worksheets("Taux d'occupation").Range("A3:E200").Clear
     
      ' Récupérer la dernière ligne du tableau
      DLig = Range("A" & Rows.Count).End(xlUp).Row
     
      Range("A2:A" & DLig & ",B2:B" & DLig & ",D2:D" & DLig & ",M2:M" & DLig).Copy
      'Ouvre le fichier ou l'on colle les données
     
      With Sheets("Taux d'occupation").Range("A3").End(xlUp)(2)
      .PasteSpecial Paste:=xlValues, Transpose:=False
     
      End With
     
      Sheets("Archives").Activate
     
      DLig = Range("A" & Rows.Count).End(xlUp).Row
     
      Range("A68:A" & DLig & ",B68:B" & DLig & ",D68:D" & DLig & ",M68:M" & DLig & ",BE68:BE" & DLig).Copy
      'Ouvre le fichier ou l'on colle les données
     
      With Sheets("Taux d'occupation").Range("A69").End(xlUp)(2)
      .PasteSpecial Paste:=xlValues, Transpose:=False
      End With
     
      Sheets("Taux d'occupation").Activate
     
       For i = 3 To 150
     
       If Cells(A & i).Value <> "" Then
     
       Cells(E & i).FormulaLocal = "=SI(MOIS(Tableau8[[#En-têtes];[janv-2020]])<MOIS(AUJOURDHUI());MAX(0;MIN(FIN.MOIS(Tableau8[[#En-têtes];[janv-2020]];0);[@[Date de départ]])-MAX(FIN.MOIS(Tableau8[[#En-têtes];[janv-2020]];-1);[@[Date d''arrivée]]-1));""En_attente"")"
     
        End If
     
      Next i
     
     
    ErreurMacro:
     
    MsgBox Err.Number & vbLf & Err.Description
     
    End Sub

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je progresse mais ca marche pas
    "Cela ne marche pas", ne veut rien dire.
    Y a t'il un message d'erreur et si oui lequel et à quelle ligne ?

    La seule parentalité que je vois, c'est à la ligne 11 et le bloc With...End With débutant ligne 19 et la ligne 31
    Personnellement, je précise toujours l'objet Workbook également. Sinon, il y a toujours un risque dans l'avenir de rencontrer des problèmes si plusieurs classeurs sont ouverts.

    Il faut absolument proscrire la méthode Activate et l'objet Selection. Cela ralenti les procédures et sont parfaitement inutiles
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,
    Citation Envoyé par Theyoshi Voir le message
    Je progresse mais ca marche pas
    Je ne sais pas ce que tu considères être une progression mais c'est pas l'impression que j'ai ...
    La parentalité des Range et Cells n'est toujours pas précisée !

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/08/2014, 10h39
  2. Si colonne vide alors ligne suivante
    Par Wawa07 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/06/2011, 23h48
  3. Si la cellule est vide alors supprimer la ligne correspondante
    Par dolin007 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 20/11/2009, 14h09
  4. [MySQL] Requête d'un champ vide alors que dans la base ce champ est non vide
    Par lex_22 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/04/2008, 23h29
  5. [Tableaux] si cellule vide, alors cellule inexistante
    Par afrodje dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 31/07/2007, 13h21

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