Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/10/2011, 19h25   #1
Invité de passage
 
Homme Vincent
Ressources humaines
Inscription : octobre 2011
Messages : 22
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations professionnelles :
Activité : Ressources humaines

Informations forums :
Inscription : octobre 2011
Messages : 22
Points : 4
Points : 4
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 :
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
NulenExcel77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2011, 20h34   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
et ce code est censé faire quoi ?

je ne comprends pas l'histoire de la fourchette :
Citation:
...remplissent en k17 sur une fourchette de cellule
k12:k30 par exemple malgré quelques sensibilisations.
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 10h10   #3
Invité de passage
 
Homme Vincent
Ressources humaines
Inscription : octobre 2011
Messages : 22
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations professionnelles :
Activité : Ressources humaines

Informations forums :
Inscription : octobre 2011
Messages : 22
Points : 4
Points : 4
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.
NulenExcel77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 11h50   #4
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 693
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 693
Points : 1 445
Points : 1 445
Bonjour,

Voici une solution

Code :
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.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/10/2011, 17h00   #5
Invité de passage
 
Homme Vincent
Ressources humaines
Inscription : octobre 2011
Messages : 22
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations professionnelles :
Activité : Ressources humaines

Informations forums :
Inscription : octobre 2011
Messages : 22
Points : 4
Points : 4
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 :
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
NulenExcel77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 15h16   #6
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 693
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 693
Points : 1 445
Points : 1 445
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 :
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.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/10/2011, 08h03   #7
Invité de passage
 
Homme Vincent
Ressources humaines
Inscription : octobre 2011
Messages : 22
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations professionnelles :
Activité : Ressources humaines

Informations forums :
Inscription : octobre 2011
Messages : 22
Points : 4
Points : 4
Par défaut Decaler la valeur d'une cellule en fonction d'une autre Répondre à la discussion

Bonjour gFZT82,

C'est exactement ce que je voulais, j'ai juste eu à le dupliquer pour plusieurs plage de cellule sur une même feuille.

J'avais commencé à énoncer un problème le 17/10/2011 19h28, je vais je pense entamer une autre discussion la dessus.

Mille fois merci , et pour ta réactivité aussi.


Cordialement
NulenExcel77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h23.


 
 
 
 
Partenaires

Hébergement Web