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 :

créé une boucle


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Par défaut créé une boucle
    créé une boucle qui me permet d'afficher un mot "salut"dans une colonne si il apparait dans n'importe quelle ligne d'une autre colonne un autre mot"bonjour"

    je penser a sa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sub ecrire
    dim i as integer
    dim j as string
    dim f as string
    i= 7 to 50
    j=sheet("planning").(i,4)
    f=sheet("planning").(i,5)
    if j="salut" then 
    f="bonjour"
    end if
    est-ce que c'est correct ?

    ps: je debute en vb

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Par défaut
    Ah bon, tu débutes?

    alors les bonnes regles:
    - On met du commentaire pour savoir ce qu'on fait!
    - On met option explicit en tete du code VB

    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
    option explicit
     
    sub ecrire
    'i est un numéro de ligne
    dim i as integer
    'C'est quoi j? On voit plus loin que j est un objet cellule et nom une chaine de 
    'caractère! Cette déclaration est donc fausse
    dim j as string
    'idem
    dim f as string
     
    'Pour i de 7 à 50
    FOR i= 7 to 50
         'j est la CELLULE (i,4) 
          j=sheetS("planning").CELLS(i,4)
         'f est la CELLULE (i,5) 
          f=sheetS("planning").CELLS(i,5)
         'Si j = "Saut"
          if j="salut" then 
                   'Ecrire "Bonjour" dans f
                    f="bonjour"
          end if
    'Ligne suivante
    next i
     
    end sub
    Et en tappant sur F8, ca te donnait quoi?

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Par défaut
    oui c mon premier projet vb

    en fonction f8 il ne trouve pas d'erreur mais il ne m'affiche rien

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Par défaut
    je l'ais fais a partir d'un bouton que j'ai mis dans un module comme pour la fonction copié que l'on as fais hier

  5. #5
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Citation Envoyé par booskap
    je l'ais fais a partir d'un bouton que j'ais mis dans un module comme pour la fonction copié que l'on as fais hier
    Un bouton dans un module ? Sur une feuille, sur un UserForm, je veux bien, mais dans un module...

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Par défaut
    g essayé le code de coconut2 mais sa ne fonctionne pas
    pourtant quand je fais F8 il ne trouve pas d'erreur

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Par défaut
    a si il me met que la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j = sheets("planning").Cells(i, 4)
    n'appartient pas a la selection

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Par défaut
    g ajouté au debut il ne m'affiche plus d'erreur mais ne fais rien

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Par défaut
    pour moi : soit tu dis que j est un string et tu rajoute .value
    soit tu dis que c'est un range et dans ce cas là ça va.
    Là tu le dimensionne comme un string et tu lui attribues une valeur de range, pour moi il y a un soucis...

    Az


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j = sheets("planning").cells(i,4).VALUE

  10. #10
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Par défaut
    le .VALUE ne change rien quand je regarde mon programme en mode pas à pas il ne rentre meme pas dans la boucle

  11. #11
    Membre chevronné Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Par défaut
    fait plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim j as range, f as range
    set j = sheets("planning").Cells(i, 4)
    set f =sheetS("planning").CELLS(i,5)
    ca devrait resoudre quelques problemes

  12. #12
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Par défaut
    merci moredrhim sa fonctionne mais le probleme est ailleur maintenant il ne modifie que la ligne 15

  13. #13
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Par défaut
    voici le 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
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    Option Explicit
    Sub CommandButton4_QuandClic()
    ''i est un numéro de ligne
    Dim i As Integer
    Dim a As Range, f As Range
     
    Dim j As Boolean
    'idem
     
    Dim ligne_début As String
     
    Dim ligne_fin As String
     
    Dim ligne As Integer
     ligne_début = InputBox("Placer : Ligne début ?")
     
     
     
    'Test de réponse exacte
     
    j = False
     
    Do While j = False
     
        j = True
     
        Do Until IsNumeric(ligne_début)
     
            ligne_début = InputBox("N'importe quoi! Il faut donner un numéro de ligne!!!")
     
            j = False
     
        Loop
     
     
     
        If ligne_début < 15 Then
     
            ligne_début = InputBox("la ligne de debut commence  à la ligne 15 minimume")
     
            j = False
     
        End If
     
    Loop
     
     
     
    'Demander le numéro de ligne de fin
     
    ligne_fin = InputBox("Placer : Ligne fin ?")
     
     
     
    'Test de réponse exacte
     
     
     
    j = False
     
    Do While j = False
     
        j = True
     
        Do Until IsNumeric(ligne_fin)
     
            ligne_fin = InputBox("N'importe quoi! Il faut donner un numéro de ligne!!!")
     
            j = False
     
        Loop
     
     
     
        If ligne_fin <= ligne_début Then
     
            ligne_fin = InputBox("commencer a la ligne 15 minimum!")
     
            j = False
     
        End If
     
    Loop
     
     
    'Pour i de la ligne de debut à la ligne de fin
    For i = ligne_début To ligne_fin
     
         'a est la CELLULE (i,5)
          Set a = Sheets("planning").Cells(i, 5)
         'f est la CELLULE (i,5)
          Set f = Sheets("planning").Cells(i, 7)
         'Si a = "Salut"
          If a = "salut" Then
           'alors f="bonjour"      
             f = "bonjour"
     
          End If
    'Ligne suivante
    Next i
     
    End Sub

    l'erreur dois provenir du next i mais je ne vois pas par quoi le remplacer

  14. #14
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 74
    Par défaut
    probleme resolu cela venait de ma ligne de programmation qui verifie si la ligne est vide

  15. #15
    Membre chevronné Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Par défaut
    attention ! tu définis tes lignes comme des chaines,
    ensuite tu fais une boucle d'un i (Integer) à une ligne_fin (String) ca pourrait poser problème (pas dans le cas présent)

    ensuite, VBA respecte la casse, donc Salut, salut, sAlut .... sont des chaines différentes.
    pour faire une comparaison, essaye avec Ucase(a) = "SALUT"

    ensuite, tes tests, au lieu de les faire à la suite, tu peux les faire en une fois (mais c'est à ton goût)

    ce qui donnerait, selon mon mode de programmation ceci :
    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
    Option Explicit
    Sub CommandButton4_QuandClic()
        'Initialisation des variables
        Dim i As Integer
        Dim a As Range, f As Range
        Dim j As Boolean
        Dim ligne_début As String
        Dim ligne_fin As String
        Dim ligne As Integer
     
        'Invite pour la ligne de départ
        ligne_début = InputBox("Placer : Ligne début ?")
        'La ligne de début doit être numérique et supérieure ou égale à 15
        Do Until IsNumeric(ligne_début) And ligne_début >= 15
            ligne_début = InputBox("N'importe quoi! Il faut donner un numéro de ligne Supérieur ou égal à 15!!!")
        Loop
     
        'Invite pour la ligne de fin
        ligne_fin = InputBox("Placer : Ligne fin ?")
        'La ligne de fin doit être numérique et supérieure à la ligne de début
        Do Until IsNumeric(ligne_fin) And ligne_fin > ligne_début
            ligne_fin = InputBox("N'importe quoi! Il faut donner un numéro de ligne Supérieur à la ligne de départ. Patate !!!")
        Loop
     
        'Bouclons maintenant sur l'intervalle de lignes séléctionnées
        For i = ligne_début To Int(ligne_fin)
            'Définition des cellules concernées
            Set a = Sheets("planning").Cells(i, 5)
            Set f = Sheets("planning").Cells(i, 7)
     
            'Comparaison des lettres sans tenir compte de la Casse
            If UCase(a.Value) = "SALUT" Then
                'Si la cellule a pour valeur un "Salut" on lui répond bonjour
                f = "Bonjour"
            End If
        Next i
    End Sub

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

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 13h45
  2. Modification de composant ds une boucle
    Par sinsenono dans le forum C++Builder
    Réponses: 10
    Dernier message: 22/02/2004, 13h46
  3. swf dans une boucle asp
    Par Chucky69 dans le forum Flash
    Réponses: 11
    Dernier message: 10/02/2004, 18h07
  4. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 15h37
  5. Pause dans une boucle
    Par HT dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2003, 09h52

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