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 :

mettre des n° dans des cellules avec VBA


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut mettre des n° dans des cellules avec VBA
    Bonjour,
    Etant un débutant, je suis un peu perdu dans mon code.
    J'ai un code qui numérote dans un sens ou dans l'autre et qui fonctionne bien.
    L'emplacement des n° était défini dans le UserForm1, donc quasiment fixe.
    Mais je voudrai définir l'emplacement des n° en mettant n1 et n2 dans les cellules qui doivent recevoir les numéros.
    J'ai bidouillé quelques lignes mais cela ne fonctionne pas et je ne sais pas vraiment quelle fonction utilisée.
    Si quelqu'un pouvait m'aider, se serait sympa.
    Je joins mon code.
    Merci, Chgo
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Private Sub CommandButton1_Click()
        Dim PageDe As Single, PageA As Single, p As Single
        Dim sPas As Single, sBorneMin As Single, sBorneMax As Single
        Dim celA As String, celB As String, celC As String, celD As String
     
        Dim i As String
          For i = 1 To 2
            If Range("A1:T21").Value = Cells.Value = "n1""n2" Then
     
            If TextBox1.Value <> "" And TextBox2.Value <> "" Then
              PageDe = TextBox2
              PageA = TextBox1 / 5
     
            Unload Me
     
            If CheckBox1.Value = True Then
                sBorneMin = PageDe
                sBorneMax = PageA + TextBox2 - 1
                sPas = 1
            Else
                sBorneMin = PageA + TextBox2 - 1
                sBorneMax = PageDe
                sPas = -1
            End If
     
            For p = sBorneMin To sBorneMax Step sPas
                Range("D13", Cells.Value = n1).Value = p
                Range(Cells.Value = n2).Value = p + 1 * PageA
                Worksheets("Feuil4").PrintOut
     
            Next p
     
            Range("D13").Value = 0
           End If
     
        End If
     
      Next i
     
     
     
    End Sub
     
    Private Sub CommandButton2_Click()
        Unload Me
    End Sub
     
     
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If TextBox1.Value <> vbNullString Then
            If CLng(TextBox1.Value) Mod 5 <> 0 Then
                MsgBox "Veuillez saisir un multiple de 5", vbCritical + vbOKOnly, "Attention..."
                Cancel = True
                TextBox1.Value = ""
                TextBox1.SetFocus
            End If
        End If
    End Sub
     
    Private Sub TextBox1_Change()
        Label4.Caption = 0
        If TextBox1.Value <> "" Then Label4.Caption = Label4.Caption + CLng(TextBox1.Value)
        If TextBox2.Value <> "" Then Label4.Caption = Label4.Caption + CLng(TextBox2.Value)
        Label6.Caption = 0
        If TextBox1.Value <> "" Then Label6.Caption = CDbl(TextBox1 / 5)
    End Sub
     
    Private Sub TextBox2_Change()
        Label4.Caption = -1
        If TextBox1.Value <> "" Then Label4.Caption = Label4.Caption + CLng(TextBox1.Value)
        If TextBox2.Value <> "" Then Label4.Caption = Label4.Caption + CLng(TextBox2.Value)
    End Sub

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Une bonne façon de ne pas se perdre dans son code quand on commence (et même quand on est expérimenté) est de documenter chaque ligne de code en langage humain. Avant même d'écrire une seule ligne de code, on devrait toujours se faire un pseudo-code en commentaires comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ' Boucler deux fois...
      ' Si les cellules A1:T21 contiennent la valeur "n1" ou "n2"
        ' Si le TextBox1 et TextBox2 contiennent une valeur
          ' Prendre en note leurs valeurs
    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
    32
    33
    34
    35
     
    Private Sub CommandButton1_Click()
      Dim PageDe As Single, PageA As Single, p As Single
     Dim sPas As Single, sBorneMin As Single, sBorneMax As Single
     Dim celA As String, celB As String, celC As String, celD As String
      Dim i As String
     
      For i = 1 To 2
        If Range("A1:T21").Value = Cells.Value = "n1""n2" Then
          If TextBox1.Value <> "" And TextBox2.Value <> "" Then
            PageDe = TextBox2
            PageA = TextBox1 / 5
            Unload Me
     
            If CheckBox1.Value = True Then
              sBorneMin = PageDe
              sBorneMax = PageA + TextBox2 - 1
              sPas = 1
            Else
              sBorneMin = PageA + TextBox2 - 1
              sBorneMax = PageDe
              sPas = -1
            End If
     
            For p = sBorneMin To sBorneMax Step sPas
              Range("D13", Cells.Value = n1).Value = p
              Range(Cells.Value = n2).Value = p + 1 * PageA
              Worksheets("Feuil4").PrintOut
            Next p
     
            Range("D13").Value = 0
          End If    ' TextBox1.Value <> ""And TextBox2.Value <> ""Then
        End If    ' Range("A1:T21").Value = Cells.Value = "n1""n2"Then
     Next i
    End Sub

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonsoir Singular,
    Est-ce que je doit ajouter les commentaires pour espérer avoir un peu d'aide ?


    Voilà, j'ai documenté mon code, j'espère que cela sera plus clair.
    Merci de votre.
    Chgo

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Private Sub CommandButton1_Click()
     
    'définition des variables
      Dim PageDe As Single, PageA As Single, p As Single
      Dim sPas As Single, sBorneMin As Single, sBorneMax As Single
      Dim celA As String, celB As String, celC As String, celD As String
      Dim i As String
     
    'boucle pour la recherche des cellules à remplir
      For i = 1 To 2
        If Range("A1:T21").Value = Cells.Value = "n1""n2" Then
     
    'identification des chiffres contenu dans TextBox 1 et 2
          If TextBox1.Value <> "" And TextBox2.Value <> "" Then
            PageDe = TextBox2
            PageA = TextBox1 / 5
            Unload Me
     
    'définition du sens de numérotation (montant ou descendant)
            If CheckBox1.Value = True Then
              sBorneMin = PageDe
              sBorneMax = PageA + TextBox2 - 1
              sPas = 1
            Else
              sBorneMin = PageA + TextBox2 - 1
              sBorneMax = PageDe
              sPas = -1
            End If
     
     'boucle qui génère les numéros dans les cellules concernées
            For p = sBorneMin To sBorneMax Step sPas
              Range("D13", Cells.Value = n1).Value = p
              Range(Cells.Value = n2).Value = p + 1 * PageA
              Worksheets("Feuil4").PrintOut
            Next p
     
     'remise à zéro de la cellule servant au démarrage code
            Range("D13").Value = 0
     
          End If    ' TextBox1.Value <> ""And TextBox2.Value <> ""Then
        End If    ' Range("A1:T21").Value = Cells.Value = "n1""n2"Then
     Next i
    End Sub

  4. #4
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir le fil

    peux tu détailler cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Range("A1:T21").Value = Cells.Value = "n1""n2"
    edit : bonsoir chgo, naitgo,
    il est recommandé de mentionner lorsqu'on poste sur plusieurs forums.

    cordialement

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Allo naitgo,

    Je m'excuse pour le post incomplet, mais j'ai été malencontreusement déconnecté avant de le terminer et je n'ai pas pu me reprendre avant maintenant.

    Ce que je voulais dire, c'est qu'il est plus facile pour d'autres de t'aider (et pour toi-même de t'y retrouver) si tu commentes tes lignes de code.

    Comme fred65200 le demande, la ligne en question est nébuleuse et certainement pas fonctionnelle. Veut-tu identifier les cellules contenant les valeurs 'n1' et 'n2', 'n1' ou 'n2', ou 'n1n2'?

    De plus, ta variable i est de type String alors qu'elle devrait être numérique puisque tu l'incrémentes dans une boucle.

    Aussi, une ligne comme 'PageDe = TextBox2' devrait se lire 'PageDe = TextBox2.Value'. Non pas que ce ne soit pas viable comme code, mais il est dangereux de se fier aux membre par défaut en VB. J'ai déjà eu des problèmes longs à résoudre à cause de ça et, depuis, je code tout en détail.

    Comme la valeur d'un TextBox est de type String, tu dois la convertir en type numérique avant de faire un calcul avec en utilisant une fonction comme CDbl(), CDec(), CInt(), CLng() ou CSng().

    Finalement, des lignes comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Range("D13", Cells.Value = n1).Value = p
       Range(Cells.Value = n2).Value = p + 1 * PageA
    ne sont pas du bon VB. Tu dois trouver le Range qui contient des valeurs 'n1' et/ou 'n2' à l'aide de la méthode Find et ensuite leur assigner une nouvelle valeur.

    Faute de coder tout ça moi-même, j'espère t'avoir éclaici quelques éléments du langage et de la programmation.

    A+

Discussions similaires

  1. [XL-2013] Prendre des données dans un tableau avec VBA
    Par tombain35 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/05/2015, 10h46
  2. ajouter et supprimer des données dans un tcd avec vba
    Par pscoool dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/12/2009, 18h14
  3. mettre une date dans une cellule avec le bon format
    Par wrm8787 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/02/2009, 17h54
  4. Mettre une couleur dans une cellule avec user form
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 10/01/2008, 12h12
  5. Réponses: 13
    Dernier message: 31/08/2007, 13h53

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