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 :

problème de logique sur doubles boucles


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 44
    Par défaut problème de logique sur doubles boucles
    bonjour!

    Je vais essayer de vous expliquer au plus simple ce que je veux faire :

    Ca se passe sur trois onglets:

    Le premier (feuill2) possède un bouton qui ouvre Userform2 dans laquelle il y a deux Textbox. "Textbox 1" qui est en sorte une case catégorie et "Textbox2" qui sert de commentaire pour cette catégorie. Le but de Userform2 c'est qu'il peut y avoir plusieurs commentaire, d'où une saisie simplifiée.
    Ce que je voudrai, c'est pouvoir insérer une ligne dans un tableau où se trouve un récap de ces catégories en insérant le dernier commentaire à la suite des autres (Cf. commentaires en rouge sur fichier)

    J'ai fait un code qui me fait un truc bizarre, il insert bien une ligne (Vièrge pour l'instant, normal) mais assez aléatoirement, du moins avec une logique que je ne comprends pas (seule la lettre "a" donne le résultat escompté)???

    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
    Private Sub CommandButton1_Click()
     
    Dim Lettre As String, i As Integer, Numéro, j As Integer
     
     
    Sheets("Feuil2").Select
    Sheets("Feuil2").Range("A65535").End(xlUp).Select
    ActiveCell.Offset(1, 0) = Me.TextBox1.Value
    ActiveCell.Offset(1, 1) = Me.TextBox2.Value
     
    Lettre = ActiveCell.Offset(1, 0)
    Sheets("Feuil3").Select
     
    For i = 1 To 26
        If Range("B" & i).Value = Lettre Then
        Numéro = Range("A" & i)
        End If
    Next i
     
     
    Sheets("Feuil4").Select
    For j = 1 To 26
        If Range("A" & j).Value = Numéro Then
        ActiveCell.Range("A" & j).Select
        Selection.EntireRow.Insert
        End If
    Next j
     
    Unload Me
     
    End Sub

    si vous pouviez m'aider...

    Désolé pour le VBA bidouillage...

    BIBI

  2. #2
    Membre chevronné Avatar de J.Michel
    Inscrit en
    Septembre 2007
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Septembre 2007
    Messages : 279
    Par défaut
    Bon, voyons tout ça point par point :
    Si j'ai bien compris, après saisie dans ton userform2, lorsque tu clique sur CommandButton1, tu souhaites ajouter une ligne a la fin d'un tableau qui se trouve dans feuil2, et qui comporte les catégories en colonne A et les commentaires en colonne B

    Je pense que ceci pourra déjà t'aider à avancer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        'Activer la feuill2
        Sheets("Feuil2").Activate
     
        'Activer la derniere cellule de la colonne A
        Range("A1").End(xlDown).Activate
     
        'Ecrire les valeurs dans les cellules de la ligne en dessous
        ActiveCell.Offset(1, 0).Value = TextBox1.Value
        ActiveCell.Offset(1, 1).Value = TextBox2.Value
    Par contre dans ton code je ne comprend pas à quoi correspondent les boucle for de 1 à 26 ?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut beebe et le forum
    Ce que je crois comprendre
    "Textbox 1" => catégorie
    "Textbox2" =>commentaire pour cette catégorie.
    Le but de Userform2 c'est simplifier la saisie de multiples commentaires pour une même catégorie.
    Ce que je voudrai, c'est pouvoir insérer une ligne dans un tableau où se trouve un récap de ces catégories en insérant le dernier commentaire à la suite des autres (Cf. commentaires en rouge sur fichier)
    Comment sont organisés les catégories et les commentaires ? Catégories en lignes et commentaires en colonnes ou l'inverse, ou catégories et commentaires en colonnes ou en lignes ?

    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
    Private Sub CommandButton1_Click()
    Dim Lettre As String, i As Integer, Numéro, j As Integer
    Sheets("Feuil2").Select
    Sheets("Feuil2").Range("A65535").End(xlUp).Select
    'selection de la dernière cellule non-vide de A de Feuil2
    ActiveCell.Offset(1, 0) = Me.TextBox1.Value
    ActiveCell.Offset(1, 1) = Me.TextBox2.Value
    'Première vide de A = catégorie, B= commentaire
     
    Lettre = ActiveCell.Offset(1, 0)
    'lettre=catégorie (textebox 1)
    Sheets("Feuil3").Select
    'sélection feuil3
    '*******************
    For i = 1 To 26
        If Range("B" & i).Value = Lettre Then
        Numéro = Range("A" & i)
        End If
    Next i
    '*******************
    Sheets("Feuil4").Select
    For j = 1 To 26
        If Range("A" & j).Value = Numéro Then
        ActiveCell.Range("A" & j).Select
        Selection.EntireRow.Insert
        End If
    Next j
    '********************
    Unload Me
    End Sub
    Pas tout compris, mais il faut éviter les select
    Comme je manque d'explications sur l'organisation de tes feuilles j'ai du mal à y voir clair. Et les noms si explicites des feuilles (et des contrôles aident bien

    Plusieurs "trucs" me gènent :
    Tes boucles : de 1 à 26 ??? surtout que tu comptes inserer des lignes
    il faut que la limite soit calculée

    Ta prmière boucle : numéro (?) aura la valeur de la dernière cellule de A1 à A26 dont la colonne B est égale à TexteBox 1. Si c'est le but, pourquoi ne pas le faire en partant de 26 vers 1 et sortir de la boucle dès que c'est trouvé ?

    La 2ème boucle dépendant de la première, si la première ne trouve rien ?

    Facile d'aider quand on a une idée de l'organisation des données, mais là, de mon point de vue, j'éviterais la multiplication des feuilles et si une des données (catégorie ou commentaire) doit rester à moins de 250 valeurs, je travaillerais en tableau (une données sur les lignes, l'autre sur les colonnes).

    Aussi, un problème de "vision" du sujet :
    Feuil2 : Catégorie ; colonne A
    Feuil3 : Catégorie ; colonne B. Pourquoi pas A pour les 2 ?
    il est vrai que tu gardes "Numéro" en A pour Feuil2 et Feuil3, mais les commentaires et les "Numéro" sont liés à la catégorie

    A+

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Par défaut
    Bonsoir,

    Avec ce que j'ai compris :
    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
    Private Sub CommandButton1_Click()
     
    Dim Derli As Integer, Lettre As String, i As Integer, Numéro
     
     
    With Sheets("Feuil2")
      Derli = .Range("A65535").End(xlUp).Row + 1
      .Cells(Derli, 1) = Me.TextBox1.Value
      .Cells(Derli, 2) = Me.TextBox2.Value
      Lettre = .Cells(Derli, 1)
    End With
     
    With Sheets("Feuil3")
      For i = 1 To 26
        If .Range("B" & i).Value = Lettre Then
          Numéro = .Range("A" & i)
          Exit For
        End If
      Next i
    End With
    With Sheets("Feuil4")
      For i = 26 To 1 Step -1 'il faut décrémenter
        If .Range("A" & i).Value = Numéro Then
          .Range("A" & i).EntireRow.Insert
          Exit For
        End If
      Next i
    End With
    Unload Me
     
    End Sub
    Pour n'insérer qu'une ligne, il faut décrémenter !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 44
    Par défaut
    non seulement j'essaie d'expliquer un truc compliqué mais en plus je fais des conneries,j'ai oublié de joindre le fichier, je le mets demain matin ça sera clair comme de l'eau de roche!

    merci qd même,

    sinon pour ce qui est des select je sais que c'est pas terrible mais je sais pas trop faire autrement, ça viendra peut etre!!!

    BIBI

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 44
    Par défaut
    voilà le fichier, j'espère que ça ira mieux comme ça...il y a quelque explications supplémentaire dessus...

    à+

    BIBI

  7. #7
    Membre chevronné Avatar de J.Michel
    Inscrit en
    Septembre 2007
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Septembre 2007
    Messages : 279
    Par défaut
    Donc sur la feuille 4 tu peux avoir plusieurs lignes avec la même lettre mais avec des commentaires différents
    ex:
    a Commentaire 1
    b Commentaire 2
    c Commentaire 3
    c Commentaire 4
    c Commentaire 5
    d Commentaire 6
    etc ....

    C'est bien ça ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 44
    Par défaut
    oui exactement!
    ça va mieux avec le fichier hein?(j'avais pas pris de café encore...)

    en fait ce fichier ressemble sur le principe à un autre qui aurait été encore plus long à expliquer, ceci explique pourquoi ça parait un peu débile...

    à+

    bibi

  9. #9
    Membre chevronné Avatar de J.Michel
    Inscrit en
    Septembre 2007
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : Septembre 2007
    Messages : 279
    Par défaut
    Je ne comprend pas bien l'utilité de la feuille 2 dans ce classeur mais je considère que tu nous as fournis une version "allégée" de ton projet.

    J'ai donc fait une petite modif sur ta procédure pour:
    - Trouver la valeur équivalente dans la feuille 4
    - Insérer une ligne
    - Ecrire la valeur, la lettre et le commentaire.

    Dis nous si ça te convient

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 44
    Par défaut
    c'est bon ça marche!
    merci!!!

    bibi

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

Discussions similaires

  1. problème de logique dans une boucle
    Par volubiliss dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/03/2011, 11h57
  2. Problème de logique dans des boucles "If"
    Par bilou95 dans le forum Langage
    Réponses: 3
    Dernier message: 16/10/2007, 11h05
  3. Problème de logique sur une base de données
    Par neuneu1 dans le forum Bases de données
    Réponses: 18
    Dernier message: 07/10/2007, 16h47
  4. Réponses: 11
    Dernier message: 19/06/2006, 16h54
  5. Réponses: 3
    Dernier message: 04/10/2005, 15h39

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