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 :

Boucle avec 2 conditions [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Par défaut Boucle avec 2 conditions
    Bonjour,

    Je souhaiterais avoir de l'aide sur une boucle avec:
    Si F11(bureau) n'est pas vide, je souhaiterais avoir la copie de A10 en F12, F13, F14, F15, variable tant qu'il y a des nombres en A12, A13, A14, A15 etc...
    et ensuite que la boucle continue vers le bas pour:
    Si F18(bureau) n'est pas vide, je souhaiterais avoir la copie de A17 en F19, F20, F21, variable tant qu'il y a des nombre en A19, A20, A21, etc...
    et ainsi de suite.

    A10titi
    ___________F11bureau
    1___________F12titi
    2___________F13titi
    3___________F14titi
    4___________F15titi


    A17toto
    ____________F18bureau
    5___________F19toto
    6___________F20toto
    7___________F21toto


    A26tata
    ___________F27bureau
    8___________F28tata


    J'espère avoir été suffisamment compréhensible
    Je suis toujours fasciné par les boucles mais qui sont trop compliquées pour moi à mettre en oeuvre pour le moment.
    Un grand merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Bonjour,

    Ton besoin n'est pas évident à comprendre, en particulier les cas aux limites.
    Pour commencer je te propose ce code qui effectue le travail pour une zone.
    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
    Sub test()
        Call RecopieZone(10, LigneFin)
    End Sub
    Sub RecopieZone(Lignedeb, LigneFin)
    '
    '   Recopie d'une zone
        Val_A_Deb = Cells(Lignedeb, 1)
        Val_F_Deb = Cells(Lignedeb + 1, 6)
        If Val_F_Deb = "" Then
            LigneFin = Lignedeb + 1
            Exit Sub
        End If
            lig = Lignedeb + 1
        Do
            lig = lig + 1
            If Cells(lig, 1) = "" Then
                LigneFin = lig
                Exit Sub
            Else
                Cells(lig, 6) = Val_A_Deb
            End If
        Loop
     
    End Sub
    Merci de le tester et de nous dire si il correspond parfaitement au besoin.
    On fera la suite ensuite.

    PPz

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut

    explications en effet peu claires ou incomplètes.

    Pour ce que j'en ai personnellement compris, ce devrait être ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim ligne1 As Integer, derlig As Integer, i As Integer, machaine As String
      ligne1 = 10
      derlig = Range("A:A").SpecialCells(xlCellTypeLastCell).Row
      For i = ligne1 To derlig
        If Not IsNumeric(Cells(i, 1)) Then
          machaine = Cells(i, 1)
        ElseIf Cells(i, 1) <> "" Then
          Cells(i, 6) = machaine
        End If
      Next
    EDIT :
    Il est à noter que si le mot "bureau" est un élément déterminant (peu clair), on obtiendrait exactement le même résultat en jouant avec ce mot, ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim derlig As Integer, i As Integer, machaine As String
      derlig = Range("F:F").SpecialCells(xlCellTypeLastCell).Row
      For i = 1 To derlig
        If UCase(Cells(i, 6)) = "BUREAU" Then
          machaine = Cells(i - 1, 1)
        ElseIf IsNumeric(Cells(i, 1)) And Cells(i, 1) <> "" Then
          Cells(i, 6) = machaine
        End If
      Next
    Si ni l'une ni l'autre de ces deux manières n'est la bonne, il va falloir être beaucoup plus précis (en n'omettant rien) dans la formulation de la demande !

  4. #4
    Membre éprouvé Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Par défaut
    Bonjour PPz78
    Ton code fonctionne très bien jusqu'à F15titi et voici son résultat

    A10titi
    ___________F11bureau
    1___________F12titi
    2___________F13titi
    3___________F14titi
    4___________F15titi
    _______________titi

    A17toto_________titi
    ____________F18titi
    5___________F19titi
    6___________F20titi
    7___________F21titi
    _______________titi

    A26tata_________titi
    ___________F27titi
    8___________F28titi


    Le code mets titi jusqu'à la dernière ligne non vide
    C'est pas évident d'être clair, j'essaie de mettre en pièce jointe le fichier sans macro le plus clean possible, feuil1=origine, feuil2=souhait, feuil3=PPz78
    Un grand merci pour ton aide
    Fichiers attachés Fichiers attachés

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    re

    les DEUX codes que je t'ai donnés mettent eux, ce qu'il faut où il faut (j'ai simulé navec succès) !

    EDIT :
    Je viens exceptionnellement d'ouvrir ton fichier
    Il y figure des éléments que tu n'avais pas exposés : la colonne A contient d'autres données que titi, toto, etc ...
    Le premier de mes deux codes ne peut dans ce cas fonctionner, sauf à y ajouter une petite condition.
    Le second, basé sur le mot Bureau en colonne F marchera par contre tel quel puisque je vois que ce mot y figure dans chaque cas dans ton fichierr !

    EDIT2 :
    et voici maintenant, pour le cas où tu le préfèrerais, le premier de mes deux codes modifié pour faire face aux nouvelles données découvertes à l'examen de ton fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim ligne1 As Integer, derlig As Integer, i As Integer, machaine As String
      ligne1 = 10
      derlig = Range("A:A").SpecialCells(xlCellTypeLastCell).Row
      For i = ligne1 To derlig
        If Not IsNumeric(Cells(i, 1)) And Cells(i, 6) = "" Then
          machaine = Cells(i, 1)
        ElseIf IsNumeric(Cells(i, 1)) And Cells(i, 1) <> "" Then
          Cells(i, 6) = machaine
        End If
      Next
    Les deux fonctionnent (testés)
    En espérant que tu ne sortes maintenant pas de ton chapeau des aspects encore nouveaux que ne laissent tranparaître ni tes messages, ni ton fichier exemple

  6. #6
    Membre éprouvé Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Par défaut
    Bonjour babaothe
    Je viens d'essayer ton dernier code et c'est ... magique c'est exactement ce que je voulais ... avec un immense sourire comme un gamin devant son nouveau jouet ... je suis ravi ... mais comment faites vous tous pour manipuler des boucles ainsi ? ... le reste je me débrouille un peu mais là ... maintenant je vais essayer de décortiquer tes 2 autres codes de ton premier message qui étaient cachés par la réponse que je faisais à PPz78 ... mon fils dit qu'il va me trouver un bouquin sur la fnac de lyon sur les macros ... pourquoi suis je tombé dans cette dépendance informatique ...
    Un grand grand merci à toi et à PPz78 et à tout le forum.

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

Discussions similaires

  1. Problème boucle avec plusieurs conditions
    Par Naxence dans le forum Général VBA
    Réponses: 2
    Dernier message: 29/03/2012, 14h38
  2. boucle avec plusieurs conditions
    Par kharraz dans le forum Débuter
    Réponses: 3
    Dernier message: 24/03/2012, 12h57
  3. Créer une boucle avec une condition
    Par kaboche dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/10/2011, 09h55
  4. Boucle avec des conditions particulières
    Par h_adil dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/05/2008, 18h01
  5. Réponses: 3
    Dernier message: 11/04/2008, 09h31

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