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 pour réaliser une macro "de boucles" dans VBA


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème pour réaliser une macro "de boucles" dans VBA
    Bonjour à tous,

    J'ai un petit problème pour réaliser une macro de boucles dans vba et comme je suis débutant en la matière je viens solliciter votre aide

    Voila mon problème:

    en résumé j'ai un classeur excel contenant 2 feuilles que j'appellerai feuil1 et feuil2.

    Dans la feuil2 la colonne A contient des données sur un certain nombre de lignes, de 1 à n lignes, en sachant que ce "n" ne devrait pas dépasser 400... autrement dit dans cette feuille actualisée chaque mois (par importation d'un programme de compta), il y aura au maximum 400 cellules de la colonne A qui auront des données. A noter aussi que certaines cellules peuvent etre "a blanc", c'est à dire sans données.

    Dans la feuil1 se trouvent 2 colonnes A et B. La colonne B contient tout simplement les valeurs contenues dans la colonne A de la feuil2 (autrement dit la cellule feuil1.B1= cellule feuil2.A1, feuil1.B2=feuil2.A2, etc...).
    Enfin la colonne A contient une numérotation incrémentée de 1 à chaque ligne, en fonction des données présentes dans la colonne B (s'il n'y a pas de données, on ne "numérote" pas).


    Il y aurait donc 2 boucles à faire je pense:
    Premièrement TANT QUE le programme trouve des données dans la colonne A de la feuil2, il les reporte dans la colonne B de la feuil1, et quand il n'en trouve plus il "s'arrete". D'autre part j'aimerai que si le programme trouve des cellules vides dans la colonne A de la feuil2, il ne les reporte pas dans la colonne B de la feuil1 (autrement dit je voudrais que les données reportées dans ma colonne B de la feuil1 soient inscrites "a la suite" sans tenir compte des eventuels blancs trouvés dans la colonne A de la feuil2, ce qui ferait donc moins de 400 lignes au final).
    Deuxièmement, TANT QUE le programme trouve des données dans la colonne B de la feuil1, il incrémente (de 1) une numérotation dans la colonne A de la feuil1, sur les lignes correspondantes... et lorsque il ne trouve plus de données dans cette colonne B, la numérotation s'arrete.

    Je vois assez bien comment expliquer cela en francais, mais j'ai beaucoup plus de mal à le "traduire" en VBA pour faire fonctionner mes boucles... aussi si quelqu'un pouvait me donner un petit coup de main sur ces quelques lignes de code, son aide serait la bienvenue !!

    Merci beaucoup par avance et bonne journée

    Philou

    PS: j'espère avoir été suffisament clair dans mes explications, n'hésitez pas a me dire s'il y a des choses que vous ne comprenez pas !

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Une solution plus simple consisterait à copier la colonne A de feuil1 à colonne B de feuil2 puis de supprimer les cellules vides. Ce qui donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        sheets("feuil1").columns("A:A").copy Sheets("Feuil2").columns("B:B")
        Sheets("feuil2").columns("B:B").Specialcells(xlCellTypeBlanks).delete Shift:=xlUp
    Bonne journée

  3. #3
    Membre régulier Avatar de DidierLoche
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 84
    Points : 105
    Points
    105
    Par défaut
    Bonjour,

    Cela devrait faire l'affaire !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    li_feuil1 = 1
    Nb_données = 0
    li_end_feuil2 = Worksheets("Feuil2").Cells(401, 1).End(xlUp).Row
    For li = 1 To li_end_feuil2
        If Worksheets("Feuil2").Cells(li, 1) <> "" Then
            Worksheets("Feuil1").Cells(li_feuil1, 2) = Worksheets("Feuil2").Cells(li, 1)
            Nb_données = Nb_données + 1
            Worksheets("Feuil1").Cells(li_feuil1, 1) = Nb_données
            li_feuil1 = li_feuil1 + 1
         End If
    Next li
    Didier

  4. #4
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci beaucoup pour vos réponses, j'y vois un peu plus clair

    Une autre question cependant (toujours par rapport à ma macro): comment puis-je procéder si ma feuil2 se situe dans un autre classeur et non pas dans le classeur actif (ce que j'ai omis de préciser)?

    En clair ma boucle dans la feuil1 doit aller chercher les infos contenues dans la feuil2 du classeur 2 et non pas dans la feuil2 du classeur 1

    merci encore pour votre aide

    Phil

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Workbooks("Classeur1.xls").Worksheets("feuil1").columns("A:A").copy Workbooks("Classeur2.xls").Worksheets("Feuil2").columns("B:B")
        Workbooks("Classeur2.xls").Worksheets("feuil2").columns("B:B").Specialcells(xlCellTypeBlanks).delete Shift:=xlUp

Discussions similaires

  1. [XL-2010] Problème pour lancer une macro-commande à partir d'un bouton
    Par viper37 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/07/2011, 19h34
  2. [XL-2003] Probléme pour ecrire une macro avec Combobox et incrementation dans plusieurs colonne
    Par mimil49 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/07/2011, 10h28
  3. [XL-2007] Problème pour créer une macro de type Si cellule = xx alors insérer image yy
    Par Cali7 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 17/03/2011, 10h11
  4. Problème pour lancer une macro dans Excel
    Par jujuf1 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/12/2008, 16h32
  5. Réponses: 2
    Dernier message: 22/01/2006, 01h11

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