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 :

[E-03] VBA Pb Do..Loop until + Offset


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Par défaut [E-03] VBA Pb Do..Loop until + Offset
    Bonjour,

    Je suis débutant sur VBA. Je suis entrain de travailler sur une petite macro afain d'automatiser de la saisie de données sous Excel 2003.

    La problématique est très simple, en function de ce qu'il y a dans une cellule, je dois rentrer une info dans la cellule voisine, et ainsi de suite pour toute une colonne. Les données a rentrer sont répétitives.

    J'ai donc saisi une fonction If...then..Else if comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Range("G2") = "STONYKARB" Then Range("H2") = "ARB01" 
     
    ElseIf Range("G2") = "IXOPROGLO" Then Range("H2") = "IXOPR"
    Une fois une de ces deux conditions remplies, je souhaiterai aller à la ligne, cad à la cellule "G3" et recommencer l'opération jusqu'a la dernière cellule de mon tableau

    J'avais donc envisager utiliser la fonction Do...Loop Until

    Afin d'aller a la ligne la fonction Offset. La première ebauche de ma macro donnerait cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Range As String 
     
    Do 
     
    If Range("G2") = "STONYKARB" Then Range("H2") = "ARB01" 
     
    ElseIf Range("G2") = "IXOPROGLO" Then Range("H2") = "IXOPR" 
     
    Range("G2").Offset(1, 0).Activate 
     
    Loop Until IsEmpty(Range("G65536").End(xlUp).Select) 
     
    End Sub

    Je suis peut-etre (surement!) à coté de plaque...j'ai 2-3 livres VBA pr Excel malheureusement je n'y trouve pas mon bonheur.

    En tout cas si jamais vous avez une indication/conseil à me donner ca serait top!!

    Merci par avance!

    Bastien

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Bonjour,
    Il y a deux soucis (au moins) dans ton code.
    Il ne faut pas dimensioner ton Range en string
    Le fait de nomer expressément tes cellule G2/H2 ne rend pas ta boucle dynamique.
    Voici un code qui devrait correspondre à ce que tu veux, il y en a d'autres mais j'ai mes habitudes...

    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
    Sub testloop()
     
    'Compte le nombre de ligne sur base du nombre d'enregistrement de la col.G
    DerLigne = Application.Subtotal(3, Sheets("sheet1").Range("G:G"))
     
    'Boucle de 2 à la dernière ligne grace à la variable derLigne
    For i = 2 To DerLigne
     
     If Cells(i, 7) = "STONYKARB" Then 'première "comparaison"
     Cells(i, 8) = "ARB01"
     End If
     
     If Cells(i, 7) = "IXOPROGLO" Then 'deuxième "comparaison"
     Cells(i, 8) = "IXOPR"
     End If
     
    Next i
     
    End Sub
    Bonne continuation

  3. #3
    Invité de passage
    Profil pro
    Inscrit en
    Février 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 1
    Par défaut Autre possibilité
    Bonjour,

    Je procèderais plutôt comme cela :

    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
    Sub bastien06()
    Dim i As Integer
    Dim j As Integer
    Dim NbreLignes As Integer
    Dim cel As Range
    'On affecte la cellule "G1" à la variable Cel
    Set cel = Range("G1")
    j = 1
    'La ligne ci dessous compte le nombre de lignes qui contiennent qq chose
    'en partant de G1 et on faisant -1 pour la première ligne qui correspond au titre de ta colonne
    NbreLignes = cel.End(xlDown).Row - 1
    For i = 1 To NbreLignes
        If cel.Offset(i) = "STONYKARB" Then cel.Offset(i, j) = "ARB01"
        If cel.Offset(i) = "IXOPROGLO" Then cel.Offset(i, j) = "IXOPR"
        Next i
    End Sub
    Bon courage

    Cordialement

  4. #4
    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 Bastien06 et le forum
    Comme l'expliquent les postes précédents, il est possible de mettre les lignes en variables et de faire évoluer cette variable
    Range("G" et x) ou cells(x, "G") (par exemple

    Tu peux aussi utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test ()
    Dim cel as range
    '........
    for each cel in range([G1], [G65536].End(xlUp))
        If cel = "STONYKARB" Then 
           cel.offset(0,1) = "ARB01" 
       ElseIf cel = "IXOPROGLO" Then 
           cel.offset(0,1)  = "IXOPR" 
      End If
    next cel
    End Sub
    Attention, il y a deux syntaxe possible pour if, mais une seul pour Else If
    A+

Discussions similaires

  1. [XL-2003] Do Loop Until
    Par Yoyo93220 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/10/2009, 15h51
  2. Nouveau problème à la boucle "Do-Loop Until"
    Par My_DiDi dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/05/2009, 14h47
  3. Problème avec la boucle "Do-Loop Until"
    Par My_DiDi dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 28/05/2009, 15h43
  4. Problème avec une boucle Do.. Loop Until
    Par gta126 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 29/12/2007, 11h27
  5. Erreur dans "Loop Until"
    Par djudju2000 dans le forum VBA Access
    Réponses: 12
    Dernier message: 14/03/2007, 12h01

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