[RESOLU] Deplacement auto d'une cellule à une autre.

Icedarts

XLDnaute Occasionnel
Bonjour à tous,

J'ai un fichier excel dans lequel je stock des données.
Les données sont stockées en scannant des codes barres avec ma webcam.
Je souhaite utiliser ce système pour gagner du temps.
Mais pour optimiser le gain de temps il faudrait que lorsque qu'une cellule est rempli on passe automatiquement à la suivante.
Dans le fichier joint les données qui viennent de la webcam se trouve en colonne A et colonne C.
La colonne B se remplie avec la fonction recherchev qui utilise la plage H2:I11.

Donc ce qu'il faudrait réussir à faire quand j'ouvre le fichier je me place en A2 je scanne mon premier code il remplie la case A2 et hop je saute à C2 je scanne à nouveau, ça remplie la case C2 et hop je saute en A3.
La petite subtilité pas besoin d'aller en C3 car en remplissant le score en C2 on obtient automatiquement le score en C3.
Après avoir saisi A3 il faut donc aller en A4 puis C4 puis A5 puis A6 puis C6 etc etc.

Un petit dessin pour vous montrer mais je ne pense pas que cela soit plus clair lol.



Merci d'avance pour votre aide.
 

Pièces jointes

  • Classeur1.xlsx
    10.4 KB · Affichages: 51
  • Classeur1.xlsx
    10.4 KB · Affichages: 52
  • Classeur1.xlsx
    10.4 KB · Affichages: 57
Dernière édition:

Excel-lent

XLDnaute Barbatruc
Re : Deplacement auto d'une cellule à une autre.

Bonjour IceDarts,

Je ne peux pas ouvrir ton fichier (car j'utilise Excel 2003), mais grâce à tes explications très détaillées et ta photo, j'ai réussi à recréer ton fichier, créer une macro pour répondre à ton soucis et la tester (avec succès :) ).

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
    Cells(Target.Row, 3).Select
End If
If Target.Column = 3 Then
    Cells(Target.Row + 1, 1).Select
End If
End Sub

Macro à placer évidement sur la feuille concerné.

Bonne fin d'après midi
Cordialement

PS : évidement, si tu as du mal avec une ligne de la macro et veut plus d'explication, il n'y a aucun problème. L'important est de comprendre.
 
Dernière édition:

Icedarts

XLDnaute Occasionnel
Re : Deplacement auto d'une cellule à une autre.

Alors c'est un bon début ^^
Merci de te pencher sur mon problème.
J'aurai peut-être pu mieux expliquer encore en disant qu'il fallait venir à la position "C" 1 fois sur 2.
A2 > C2
C2 > A3
A3 > A4
A4 > C4
C4 > A5
A5 > A6

etc etc.

Ta macro me fait systématiquement aller à la position C.

Merci encore pour ton aide ;)
 

frangy

XLDnaute Occasionnel
Re : Deplacement auto d'une cellule à une autre.

Bonjour,

Tu peux obtenir le résultat en différenciant le traitement des lignes paires et celui des lignes impaires grâce à l’opérateur MOD.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row Mod 2 = 0 Then
    Target.Offset(0, 2).Select
Else
    Target.Offset(1, 0).Select
End If
If Target.Column = 3 Then
    Target.Offset(1, -2).Select
End If
End Sub

Cordialement.
 

Excel-lent

XLDnaute Barbatruc
Re : Deplacement auto d'une cellule à une autre.

Salut Icedarts,

Autant pour moi, j'avais compris que tu voulais faire :
A2 -> C2
C2 -> A3
A3 -> C3
C3 -> A4
A4 -> C4
...

Tu n'as posé aucune question sur mon code. Sous-entendu tu as tout compris?

Alors pourquoi ne l'as-tu pas adapté? Les 3/4 du boulot était déjà fait ;)

Regarde la solution :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
    If Round(Target.Row / 2, 0) - Target.Row / 2 = 0 Then
        Cells(Target.Row, 3).Select
    Else
        Cells(Target.Row + 1, 1).Select
    End If
End If
If Target.Column = 3 Then
    Cells(Target.Row + 1, 1).Select
End If
End Sub

Il suffisait juste de compléter la première boucle ;) :
VB:
If Target.Column = 1 Then
'...
End if

A mon avis, comme tu n'as pas compris mon code, tu le verra ci-joint dans son élément naturel et surtout expliqué en détail.

Le but de ce forum est de comprendre, d'apprendre et de progresser. Si pour cela tu as besoin de poser des questions, n'hésite pas. Il n'y a pas de question bête! Juste des réponses idiotes ;)

Bon courage pour la suite
A+

Edition : salut Frangy
 

Pièces jointes

  • Icedarts.xls
    21.5 KB · Affichages: 58
  • Icedarts.xls
    21.5 KB · Affichages: 66
  • Icedarts.xls
    21.5 KB · Affichages: 60

Icedarts

XLDnaute Occasionnel
Re : Deplacement auto d'une cellule à une autre.

Bonjour et merci la solution fonctionne parfaitement.

J'ai compris le code et je pensais bien que de différencier les lignes paires et impaires pouvait résoudre le problème.
Mais entre comprendre du code et l'adapter il y a du boulot.

Par contre entre ton code et celui de Frangy je remarque qu'il utilise target.offset alors que toi utilises target.row
Target.row +1, 1 signifie qu'il passe une ligne et se mets sur la première colonne mais je ne comprends pas comment target.offset fonctionne...
target.offset1 , -2 le 1 ça veut dire aussi qu'il passe une ligne et le -2 ça veut dire qu'il se décale de 2 case vers la gauche?
 

Excel-lent

XLDnaute Barbatruc
Re : Deplacement auto d'une cellule à une autre.

Bonsoir Icedarts,

Au tout début de la macro, il y a la ligne :
Private Sub Worksheet_Change(ByVal Target As Range)

Donc à chaque changement dans une cellule sur la feuille excel où se trouve cette macro, excel mémorise les coordonnées de la cellule en question dans "Target"

Lorsqu'en dessous on écrit :
-> Target.row = cela signifie qu'on veut récupérer le numéro de la ligne de la cellule modifiée
-> Target.column = cela signifie qu'on veut récupérer le numéro de la colonne de la cellule modifiée
-> Target.adress = cela signifie qu'on veut récupérer l'adresse complète de la cellule (mémorisé dans "Target" sous la forme $J$10
...

Pour parler d'une cellule, il existe trois méthodes :
-> Range("A10") = tu en conviendras avec moi, la plus facile à comprendre. Mais lorsque la colonne ou ligne doit être modifiable au grès de la macro, c'est difficile pour certains (bien que possible).
-> Cells(10,1) = qui veut dire exactement la même chose : cellule ligne 10 - colonne 1 (donc A10 ;) ) Sous cette forme, il est très facile de mettre à la place des chiffres une variable et ainsi pouvoir modifier ces références au grès de la macro.
-> Offset(NuméroLigne, NuméroColonne) = comme tu l'as trouvé tout seul, on part de la cellule précédement utilisé et on rajoute/soustrait au numéro de la ligne le chiffre indiqué en rouge ci-dessus (idem pour la colonne).

Personnellement, je n'aime pas utiliser Offset, car la personne qui n'est pas plongé dans le code ne sait pas où l'on était avant et donc ne trouvera jamais où l'on veut aller. Car c'est bien gentil de dire, je descend de 2 lignes, mais par rapport à quel cellule??? Là, la macro est simple, on comprend vite, mais dans d'autres macro, il faut vraiment s'accrocher pour trouver!

Bref, oui tu avais raison ;)

Bonne fin de soirée
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [RESOLU] Deplacement auto d'une cellule à une autre.

Bonjour à tous les intervenants du fil

Icedarts (Bienvenue sur le forum)
Comme tu sembles débuter en VBA, je me permets de te donner le conseil suivant après avoir lu ceci
Mais entre comprendre du code et l'adapter il y a du boulot.
Par contre entre ton code et celui de Frangy je remarque qu'il utilise target.offset alors que toi utilises target.row
Target.row +1, 1 signifie qu'il passe une ligne et se mets sur la première colonne mais je ne comprends pas comment target.offset fonctionne...
target.offset1 , -2 le 1 ça veut dire aussi qu'il passe une ligne et le -2 ça veut dire qu'il se décale de 2 case vers la gauche?

Le premier réflexe à acquérir lorsqu’on débutes en VBA, c'est de toujours aller consulter l'aide VBA.
Et pour y aller voir, trois doigts et deux mains suffisent (et un clavier résistant si on développe une addiction aux macros)
Quand tu as doute, une question sur VBA, appuie sur ces trois touches:
ALT+F11 puis F1

Tu découvriras alors un monde de félicité avec tout plein d'explications et tout plein d'exemples. Un vrai trésor. ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 100
Messages
2 085 294
Membres
102 854
dernier inscrit
ADRIENVR