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 :

Ne changer que la ligne concernée par la variable [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Par défaut Ne changer que la ligne concernée par la variable
    Bonjour, J'ai un problème sur ma macro chaque fois que je change la variable(i) la boucle démarre et me remplie des cellules sur une colonne. Comme elle fait un tour complet, elle me remplie des cellules qui ne devraient l'être. Je que je voudrais c'est n'activer la macro que quand je change ma variable sur la cellule et que la macro ne change que les données de la ligne concernée par la variable
    Voici mon code.
    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
    Private Sub Worksheet_selectionChange(ByVal Target As Range)
    Macro1
    End Sub
     
     
    Sub Macro1()
    '
    Dim i As Single
    Dim LastLig As Long
    LastLig = Cells(Rows.Count, 1).End(xlUp).Row
     
     
    For i = 7 To LastLig
    If Cells(i, 1) <> Cells(i, 2) Then
        If Cells(i, 2) = "" Then
            Cells(i, 2) = Cells(i, 1)
        ElseIf Cells(i, 3) = "" Then
            Cells(i, 3) = Cells(i, 1)
        ElseIf Cells(i, 4) = "" Then
            Cells(i, 4) = Cells(i, 1)
     
        End If
    End If
     
    Next i
     
    End Sub

    Cordialement

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Par défaut
    ça a l'air de marcher chez moi, enfin si c'est ce que tu attends!

    Sinon pour que la macro ne se lance que quand tu changes la valeurs dans une cellule, essaye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    Macro1
    End Sub
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_selectionChange(ByVal Target As Range)
    Macro1
    End Sub

  3. #3
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Par défaut
    Bonjour, le problème c'est que quand la macro démarre elle remplie toutes les cellules de la colonne, alors qu'il faudrait ne changer que les valeurs de la ligne concernée.

  4. #4
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour jose_67 Roums le forum un truc dans ce genre "pas teste"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Application.Intersect(Target, Range("A7:A1000000")) Is Nothing Then
       If Target <> Target.Offset(0, 1) Then
       If Target.Offset(0, 1) = "" Then
           Target.Offset(0, 1) = Target
      ElseIf Target.Offset(0, 2) = "" Then
           Target.Offset(0, 2) = Target
      ElseIf Target.Offset(0, 3) = "" Then
           Target.Offset(0, 3) = Target
     End If: End If: End If
    End Sub

  5. #5
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Par défaut
    Bonjour, Laetitia
    Il doit me manquer une info quand je lance la macro j'ai une erreur 424.

    Cordialement

  6. #6
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    re, jose je viens de tester pas de pb..sous excel 2003 donc la seule ligne que je changes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not Application.Intersect(Target, Range("A7:A65536")) Is Nothing 
    Then
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If Not Application.Intersect(Target, Range("A7:A1048576")) Is Nothing Then
    vu que tu utilise excel 2007
    au pire une erreur 1004

    comment tu as ecris cela surtout ou!!! si tu pouvais montrer ton code en entier
    pour faire simple

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Par défaut
    Oui jose mais en testant ton code chez moi ça ne me changeait que la ligne concernée, c'est pour ça que je trouvais que ça marchait.
    Si A7 Vide, rien.
    Si je remplis A7 et que B7 vide, B7 remplis avec A7.
    Si je remplis A7 et que B7 est déjà remplis ça remplis C7 et D7.

    Voilà ce que ça me donnait comme résultat.

    J'ai aussi Excel 2007, là ton code est entier ? Peut être qu'autre chose influence le résultat.

  8. #8
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Par défaut
    Re à vous deux "Laetitia, Roums" et merci en fait c'est moi qui ai mal écrit le code (je débute) Cà marche impec.
    Faut-il que je répète le "ElseIf" sur toute les colonnes (il y en a 25) ou y a t'il un moyen plus simple pour l'appliquer a d'avantage de colonnes ?
    A+

  9. #9
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    re,comme je comprends?? il faut passer par une boucle plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim x As Byte
       If Not Application.Intersect(Target, Range("A7:A1000000")) Is Nothing Then
       If Target <> Target.Offset(0, 1) Then
        For x = 1 To 25
          If Target.Offset(0, x) = "" Then
         Target.Offset(0, x) = Target
       Exit For: End If: Next x: End If: End If
     End Sub

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/07/2014, 12h07
  2. Réponses: 15
    Dernier message: 10/03/2014, 19h40
  3. Réponses: 5
    Dernier message: 19/01/2007, 22h53
  4. [VBA-E] Connaire n° ligne concernées par fusion cellules
    Par aokiseiichiro dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/05/2006, 14h04
  5. [VBA-E]ComboBox + RowSource ne concerne que les lignes ?
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 10/04/2006, 14h29

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