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 :

Decaler la valeur d'une cellule en fonction d'une autre [XL-97]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Par défaut Decaler la valeur d'une cellule en fonction d'une autre
    Bonjour à tous,

    Voici mon problème, j'ai pour les besoin d'une production établi sous excel une sorte de formulaire de suivi d'affaire.
    Le problème est que j'aimerai que la première ligne soit renseignée puis la seconde et ainsi de suite et il apparait que certains opérateurs ne fassent pas attention à ce détails et remplissent en k17 sur une fourchette de cellule
    k12:k30 par exemple malgré quelques sensibilisations.

    J'ai un peu d"expérience en VBA, mais là je bloque.
    Voici ce que j'ai réussi à faire, il n'y pas de bug mais le résultat manque.

    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)
     
    For i = 34 To 25
    i = i - 1
    If Range("k" & i).Offset(-1, 0).Value = "" And Range("k" & i).Value <> "" Then
    ActiveCell.Select
    Selection.Cut
    Range("k" & i).Offset(-1, 0).Select
    ActiveSheet.Paste
    End If
    Next i
    Help please

    Merci d'avance

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    et ce code est censé faire quoi ?

    je ne comprends pas l'histoire de la fourchette :
    ...remplissent en k17 sur une fourchette de cellule
    k12:k30 par exemple malgré quelques sensibilisations.

  3. #3
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Par défaut
    Bonjour bbil,

    Je vais essayé d’être un peu plus clair, la fourchette, je voulais parler d'une plage de cellule entre k12 et k30.

    J'ai une dizaine de ligne prévu pour renseigner une certaine étape de projet "montage carte électronique dans un coffret par exemple" et je veux que le remplissage de ces lignes commence par la première en k24 et se termine par la dernière en k34.
    Le remplissage des autres colonnes se fait automatiquement en fonction de la colonne K, donc je me concentre essentiellement sur cette colonne-ci.

    Ce que je veux c'est que si je renseigne la ligne 28, que la valeur soit "coupé" et "collé" en 24 si elle est vide bien sur sinon en 25, ou 26 ainsi de suite.
    Je veux un décalage auto vers le haut d'une cellule si son voisin au dessus est vide.

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Voici une solution

    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
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer, LigneAjout As Integer
    'Détermination de la plage de traitement
    If Not Application.Intersect(Target, Range("K24:K34")) Is Nothing Then
        'Désactive l'évènement
        Application.EnableEvents = False
        With Worksheets("Feuil1") 'A adapter
            'Détermination de la ligne d'ajout
            LigneAjout = Target.Row
            For i = 24 To Target.Row
                If .Range("K" & i) = "" Then
                    LigneAjout = i
                    Exit For
                End If
            Next i
            If LigneAjout < Target.Row Then
                .Range("K" & LigneAjout) = Target.Value
                Target = ""
            End If
        End With
        'Réactive l'évènement
        Application.EnableEvents = True
    End If
    End Sub
    Cordialement.

  5. #5
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Octobre 2011
    Messages : 75
    Par défaut
    Bonjour gFZT82,

    C'est super, ça marche .

    Merci pour ta réactivité et pour cette macro super compact.
    j'avais moi une centaine de ligne pour un resultat 100 fois plus lent

    Encore merci gFZT82 et à Bientot.

    OOps

    Bonjour à tous,

    Encore merci à gFZT82 pour sa macro.

    J'aurai encore une petite question, juste parce que je suis un peu ch......
    sur les bord:

    Sur cette macro, si je masque ou delete une ligne, la plage k24:k34 reste inchangée, ce qui fait que je ne peux moduler mon fichier comme bon me semble.
    Peut etre en se rapportant à une cellule sur la ligne, la plage changerai en fonction de cette même cellule, mais je ne sais comment le mettre en forme.
    Voici encore un casse-tete que je vous propose.
    Merci d'avance
    Voici la macro d'origine fonctionnelle proposée par gFZT82 plus haut:

    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
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer, LigneAjout As Integer
    'Détermination de la plage de traitement
    If Not Application.Intersect(Target, Range("K24:K34")) Is Nothing Then
        'Désactive l'évènement
        Application.EnableEvents = False
        With Worksheets("Feuil1") 'A adapter
            'Détermination de la ligne d'ajout
            LigneAjout = Target.Row
            For i = 24 To Target.Row
                If .Range("K" & i) = "" Then
                    LigneAjout = i
                    Exit For
                End If
            Next i
            If LigneAjout < Target.Row Then
                .Range("K" & LigneAjout) = Target.Value
                Target = ""
            End If
        End With
        'Réactive l'évènement
        Application.EnableEvents = True
    End If
    End Sub
    Bonjour,

    J'avais pas compris pour les balises de code, je tacherai d'y penser,merci

    Je voudrais poursuivre sur le même problème, certainement est-ce ma faute, je me suis mal exprimé, mais

    Comme je le disais plus haut ,je n'avais besoin que de décaler une cellule pensant que l'automatisme (date, heure) d'une macro à moi suivrait, et ce n'est malheureusement pas le cas, honte sur moi

    La cellule à décaler est en colonne K, et pour ça la macro de gFZT82 marche très bien.
    Seulement la date en H et l'heure en I s'affiche mais reste sur la ligne d'origine.

    J'en demande beaucoup, mais comment englober H et I dans cette macro.

    Cordialement

  6. #6
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Si j’ai bien compris ta demande, tu souhaites que les données en H et en I soient déplacées en même temps que la donnée en K.
    Voici le code qui correspond

    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
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer, LigneAjout As Integer
    'Détermination de la plage de traitement
    If Not Application.Intersect(Target, Range("K24:K34")) Is Nothing Then
        'Désactive l'évènement
        Application.EnableEvents = False
        With Worksheets("Feuil1") 'A adapter
            'Détermination de la ligne d'ajout
            LigneAjout = Target.Row
            For i = 24 To Target.Row
                If .Range("K" & i) = "" Then
                    LigneAjout = i
                    Exit For
                End If
            Next i
            'Copie des données
            If LigneAjout < Target.Row Then
                .Range("K" & LigneAjout) = Target.Value
                .Range("H" & LigneAjout) = .Range("H" & Target.Row)
                .Range("I" & LigneAjout) = .Range("I" & Target.Row)
            'Effacement des cellules d'origine
                Target = ""
                .Range("H" & Target.Row) = ""
                .Range("I" & Target.Row) = ""
            End If
        End With
        'Réactive l'évènement
        Application.EnableEvents = True
    End If
    End Sub
    Note bien que le changement n’est détecté que dans la plage K24:K34.
    Une saisie dans cette plage provoque le déplacement des cellules correspondantes en K,H et I.
    Par contre, une saisie dans les cellules H ou I ne provoque aucun déplacement.

    Bon courage.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/11/2014, 15h24
  2. Réponses: 7
    Dernier message: 17/09/2014, 11h30
  3. Récupérer la valeur d'une cellule avec fonction sur une autre feuille
    Par rogerlette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/09/2010, 12h38
  4. [XL-2007] Faire correspondre la valeur d'une cellule en fonction d'une autre
    Par manuseverine dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/08/2010, 17h49
  5. Réponses: 2
    Dernier message: 05/03/2010, 14h15

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