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 :

Opération uniquement sur la ligne de la cellule active


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut Opération uniquement sur la ligne de la cellule active
    Bonjour,

    Je rencontre un problème avec le code suivant, je souhaiterais faire l'opération cell.Value = cell.Value * Taux uniquement sur la ligne de la cellule active.
    J'ai essayé avec la propriété ActiveCell.Row mais toutes mes tentatives sont restées vaines.


    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
    Sub Macro1()
     
     
    Taux = Worksheets("Feuil2").Cells(2, 6).Value
     
    For Each cell In Range("E5:AH30")
     
        If WorksheetFunction.IsNumber(cell) = True Then
     
            If ActiveCell.Value = "x" Then
            cell.Value = cell.Value * Taux
            cell.Font.Bold = True
     
            ElseIf ActiveCell.Value = "" Then
            cell.Value = cell.Value / Taux
            cell.Font.Bold = False
     
            End If
        End If
    Next cell
     
     
    End Sub
    Merci d'avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Points : 602
    Points
    602
    Par défaut
    Salut, ActiveCell.row fonctionne...

    As tu essayé en mode pas a pas détaillé ? (F8)

    Par contre le worksheetFonction sert a rien je pense, la fonction isnumber existe en vba mais s'appelle isnumeric.

    En suite tu ne précise pas ou la boucle For va se faire.

    Essaye ça en prenant soin de vérifier la feuille devant le "Range("E5:AH30")" ici j'ai mis le codename "feuil1"

    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
    Sub Macro1()
    Dim cell As Range
    Dim valeur As String
     
    valeur = ActiveCell.Value
     
    Taux = Feuil2.Cells(2, 6).Value
     
    For Each cell In Feuil1.Range("E5:AH30")
     
        If IsNumeric(cell) = True Then
     
            If valeur = "x" Then
            cell.Value = cell.Value * Taux
            cell.Font.Bold = True
     
            ElseIf valeur = "" Then
            cell.Value = cell.Value / Taux
            cell.Font.Bold = False
     
            End If
        End If
    Next cell
     
    End Sub
    Par contre fais attention, le code considère qu'une cellule vide est numérique (de valeur 0), si tu veux que les cellules vides ne soient pas traitées il faut rajouter une condition. Si c'est le cas voila la condition d'entrée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsNumeric(cell) = True And IsEmpty(cell) = False Then
    A+

    CB

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Bonjour Christian,

    Merci pour cette réponse j'utilisais Isnumber au lieu de Isnumeric parce que justement j'ai des cellules vide, Isnumber renvoi un false en cas de cellule vide mais pas Isnumeric.
    Ton code fonctionne très bien mais ne résout pas le problème l'opération est effectuée sur toutes les cellules du range.
    Je n'arrive pas à comprendre comment utiliser ActiveCell.row pour restreindre l'opération uniquement aux cellules de la ligne de la cellule active

    merci d'avance

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Points : 602
    Points
    602
    Par défaut
    ah oui d'accord, je pense que le range.row ne peut pas fonctionner puisque c'est une selection, mets un if supplementaire au debut avec cell.row. Comme ceci :

    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
    Sub Macro1()
    Dim cell As Range
    Dim valeur As String
    Dim ligne As Integer
     
    valeur = ActiveCell.Value
    ligne = ActiveCell.Row
     
    Taux = Feuil2.Cells(2, 6).Value
     
    For Each cell In Feuil2.Range("E5:AH30")
    If cell.Row = ligne Then
        If WorksheetFunction.IsNumber(cell) = True Then
     
            If valeur = "x" Then
            cell.Value = cell.Value * Taux
            cell.Font.Bold = True
     
            ElseIf valeur = "" Then
            cell.Value = cell.Value / Taux
            cell.Font.Bold = False
     
            End If
        End If
    End If
    Next cell
    End Sub
    PS: j'ai compris que toute ta macro se fait dans la même feuille, j'ai donc modifié le codename et effectivement le isnumber teste aussi si la cellule est vide.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    ça ne fonctionne pas non plus, il faudrait dire si la condition : If ActiveCell.Value = "x" Then, appliquer ceci : cell.Value = cell.Value * Taux à ActiveCell.Row.

    j'ai déjà essayé beaucoup de choses mais rien ne fonctionne, tous les chiffres contenus dans le range sont impactés.

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Points : 602
    Points
    602
    Par défaut
    Je rencontre un problème avec le code suivant, je souhaiterais faire l'opération cell.Value = cell.Value * Taux uniquement sur la ligne de la cellule active.
    Pourtant c'est ce qui est fait avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If cell.Row = ligne Then
    dans "ligne" est stocké la valeur de la ligne de "ActiveCell" comme ceci :

    Je comprend pas ce que tu veux du coup...

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    J'ai un tableau avec des nombres, lorsque j'inscris un x en colonne A, je souhaiterais que l'ensemble des nombres de cette ligne soient multipliés par un taux.
    Pour le moment le code comme tu l'as modifié fonctionne mais l'ensemble des nombres présents sont modifiés peu importe la ligne.
    D'ailleurs peu importe si c'est la cellule active ou pas je pensais que ce serait plus simple de mettre en place la restriction, s'il y a un x de present la ligne doit etre modifiée.
    La macro est affectée sur un bouton, donc je souhaite mettre un x pour repérer la ligne et appuyer sur le bouton cela modifie la ligne et l'affiche en gras.

  8. #8
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    Si j'ai bien compris

    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
    Sub Marco1()
     Dim cell As Range
     Dim valeur As String
     Dim ligne As Long
     Dim Taux As Double
     ligne = ActiveCell.Row
     If (ligne < 5) Or (ligne > 30) Then
          Exit Sub
     End If
     valeur = Cells(ligne, 1) 'colonne A
     Taux = Feuil2.Cells(2, 6).Value
     For Each cell In Feuil2.Range("E" & ligne & ":AH" & ligne)
        If WorksheetFunction.IsNumber(cell) = True Then
           If valeur = "x" Then
             cell.Value = cell.Value * Taux
             cell.Font.Bold = True
           ElseIf valeur = "" Then
             cell.Value = cell.Value / Taux
             cell.Font.Bold = False
           End If
        End If
      Next
    End Sub

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,

    Merci beaucoup c'est exactement ce qu'il me fallait.

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

Discussions similaires

  1. Données sur plusieurs lignes dans une cellule - CRLF
    Par guycha dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/12/2010, 19h46
  2. FlexGrid ecrire sur plusieur ligne dans une cellule
    Par label55 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/02/2008, 14h54
  3. Affichage sur 2 lignes d'une cellule de DataGridView
    Par loic_86 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 15/06/2007, 20h32
  4. Réponses: 4
    Dernier message: 02/06/2007, 12h35
  5. Texte sur plusieurs lignes dans une cellule de JTable
    Par JeanECN dans le forum Composants
    Réponses: 3
    Dernier message: 10/04/2006, 17h20

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