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 :

Se déplacer sur une feuille avec "offset"


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut Se déplacer sur une feuille avec "offset"
    Un nouveau problème sur le même travail

    J'ai bien essayé de comprendre mais là c'est farfelu.
    Voilà 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
    Option Explicit
     
    Private Sub TextBox_quant_Change()
        If TextBox_quant.Value = TextBox_art.Value Then
            TextBox_quant.Value = "Erreur de scan"
        End If
    End Sub
     
    Private Sub TextBox_Lot_Change()
        If TextBox_lot.Value = TextBox_quant.Value Then
            TextBox_lot.Value = "Erreur de scan"
        End If
        Worksheets(1).Activate
        ActiveCell.Value = Inventaire.TextBox_art.Value
        ActiveCell = ActiveCell.Offset(rowoffset:=0, columnoffset:=1).Activate
        ActiveCell.Value = Inventaire.TextBox_quant.Value
        ActiveCell = ActiveCell.Offset(rowoffset:=0, columnoffset:=1).Activate
        ActiveCell.Value = Inventaire.TextBox_lot.Value
        ActiveCell = ActiveCell.Offset(rowoffset:=1).Activate
    End Sub
    Je remplis trois zones texte que je veux reporter sur ma feuille excel.
    Je colle le premier contenu, je passe à la colone d'à coté, tout va bien. Je colle le contenu de ma deuxième textbox, je passe à la colone suivante.
    Et là, je souhaite coller le contenu de la 3e puis revenir sur la première colone à la ligne en dessous. Mais j'obtiens ça :




    au lieu de ça :

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 95
    Points : 95
    Points
    95
    Par défaut
    je te suggère ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Activecell.value = (1er textebox)
    activecell.offset(0,1).select
    activecell.value= (2eme textbox)
    activecell.offset(0,1).select
    activecell.value= (3eme textebox)
    activecell.offset(1,-2).select
    c'est déjà mieu niveau utilisation des offsets

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    C'est vrai que le code est plus propre ainsi
    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
    Option Explicit
     
    Private Sub TextBox_quant_Change()
        If TextBox_quant.Value = TextBox_art.Value Then
            TextBox_quant.Value = "Erreur de scan"
        End If
    End Sub
     
    Private Sub TextBox_Lot_Change()
        If TextBox_lot.Value = TextBox_quant.Value Then
            TextBox_lot.Value = "Erreur de scan"
        End If
        Worksheets(1).Activate
        ActiveCell.Value = Inventaire.TextBox_art.Value
        ActiveCell.Offset(0, 1).Select
        ActiveCell.Value = Inventaire.TextBox_quant.Value
        ActiveCell.Offset(0, 1).Select
        ActiveCell.Value = Inventaire.TextBox_lot.Value
        ActiveCell.Offset(1, -2).Select
    End Sub
    Mais... même résultat

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonjour,
    si j ai bien compris chaque colonne recoit la valeur d un txtbox
    donc tu pourrais valider la saisie avec un commandbutton et affecter a chaque colonne un textbox.
    un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub bt_Click()
    dim ligne '1ere ligne vide
    with worksheets(1)
    ligne = .Cells(65536, 1).End(xlUp).Row+1
    .cells(ligne,1).value = textbox1.value
    .cells(ligne,2).value = textbox1.value
    .cells(ligne,3).value = textbox1.value
    end with
     
    End Sub

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    C'est encore plus propre :O Et vachement mieux pensé ! Par contre je le fais sans bouton. En fait tout se fait par l'intermédiaire d'une "douchette" qui scanne des codes barre, donc on a pas accès à un clavier.

    Mais en tout cas, ça fait pareil >.<
    On dirait qu'il y a une espèce de boucle qui se génère de je ne sais où. Pourtant ce code est juste, jvois pas le problème. D'où ça peut venir ?


    !! Je sais d'où ça vient. C'est évident.
    C'est la douchette.
    Le problème c'est que le code va recopier ce qui est saisi dans la userform dès qu'un seul caractère est tapé dans la troisième txtbox. D'où ce bizarre effet. Il faut que je fasse un dernier code barre de validation, pas le choix.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    Quelqu'un saurait-il comment contourner le problème ?

    J'ai pensé à mettre un dernier code barre qui écrirait lors d'un scan "VALIDE"
    Et une boucle tant que du style
    tant que textbox4.value différent de "VALIDE"
    Fin tant que
    Et ensuite les instructions de report de texte.

    Si je ne me trompe pas, la boucle va tourner indéfiniment (ce qui pourrait faire exploser la mémoire ) tant que je n'aurais pas scanné le dernier code, qui déclencherait la suite.

    Mais ça me semble un peu barbare, quelqu'un a une meilleure idée ?

    EDIT : mon chef vient de trouver, il me faut une commande du type system("pause") comme en C, ou "insert key". Je sais pas si vous voyez ce que je veux dire. Bref avec un code barre d'un caractère, ça me règlerait le problème
    Comment fait-on ça en VBA ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    a mon avis au lieu de declenché les evenement lorsque txtbox change ,
    alimente la feuille avec l evenement exit ainsi cela ne tournera pas en bcl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
    End Sub

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    ça marche impeccable Merci beaucoup.

    Mais pour ma culture personnelle, j'aimerais bien connaître la manip pour faire un getchar() / system(pause) en VBA.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/08/2012, 16h58
  2. Macro pour se déplacer sur une feuille excel
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/03/2010, 20h41
  3. droit en lecture sur une feuille avec visual studio
    Par kingson dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/04/2007, 05h18

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