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 :

Inserer Ligne VBA en fonction d'une cellule vide [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Inserer Ligne VBA en fonction d'une cellule vide
    Bonjour,

    Je débute en VBA, je suis face à un problème.

    Je vais tenter d'être clair dans ma description. J'aimerais pouvoir inserer une ligne en function de 2 critères.
    Quand ma cellule de la colonne A est vide et que la cellule de la colonne B est rempli alors il me faut inserer une ligne.

    Exemple :

    Colonne A          Colonne B
    AAA                   BBBB
    AAA                   BBBB
    <Vide>              BBBB
    AAA                   BBBB
    AAA                   BBBB
    AAA                   BBBB
    <Vide>              BBBB
    AAA                   BBBB
    Résultat voulu :

    AAA                  BBBB
    AAA                  BBBB
    
    <Vide>             BBBB
    AAA                  BBBB
    AAA                  BBBB
    AAA                  BBBB
    
    <Vide>            BBBB
    AAA                 BBBB
    J'ai tenté le code suivi mais ca ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim InsLigne As Integer
     
    For InsLigne = 1 To 100
        If MRISheet.Range("A" & InsLigne) = "" And MRISheet.Range("B" & InsLigne) <> "" Then
           MRISheet.Range("B" & InsLigne).EntireRow.Insert Shift:=xlShiftDown
     
        End If
     
        Next InsLigne
    Merci d'avance pour votre aide !

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour,
    je te suggère ce qui ressemblerait à ceci (écrit à la va-vite) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim dl As Long, plage As Range, plagevide As Range
    dl = Range("A" & Rows.Count).End(xlUp).Row
    Set plage = Range("A1:A" & dl)
    Set plagevide = plage.SpecialCells(xlCellTypeBlanks)
    If Not plagevide Is Nothing Then
      For Each c In plagevide.Cells
        If Cells(c.Row, 2).Value <> "" Then Rows(c.Row).Insert 1
      Next
    End If
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour unparia,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For Each c In plagevide.Cells
    Sur cette ligne à quoi correspond "c" ?
    Est-ce une variable que je dois définir ?

    Car en laissant le code tel quel cela ne fonctionne pas

    Merci à toi.

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    c est chacune des cellules de la plage parcourue
    Si cela ne fonctionne pas, tu as peut-être plusieurs lignes successives vides en colonne A. Si tel est le cas, précise-le et je modifierai en conséquence.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Classeur Test.xlsm

    ci-joint le classeur pour que cela soit plus parlant.

    J'ai peut être aussi effectuer une mauvaise manipulation.

    Merci pour ton aide unparia

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Désolé, mais (je ne cesserai jamais de le rappeler) je n'ouvre JAMAIS un classeur tiers (j'ai mes raisons) !
    Ce code (modifié) marche sans faille chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dl = Range("A" & Rows.Count).End(xlUp).Row
    For i = dl To 1 Step -1
      If Range("A" & i).Text = "" And Range("B" & i).Text <> "" Then
        Rows(i).Insert 1
      End If
    Next
    pour faire ce que tu dis vouloir faire, les données étant en colonnes A et B
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 623
    Points
    28 623
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Car en laissant le code tel quel cela ne fonctionne pas
    Il est important de préciser ce qui ne fonctionne pas.
    Soit le résultat escompté n'est pas à la hauteur de tes attentes, soit le problème provient d'un arrêt du programme accompagné d'un message d'erreur et dans ce cas, il est important de communiquer, le n° de l'erreur, le message et le numéro de la ligne où a eu lieu cette erreur.
    Cela facilite tellement la vie.

    A mon avis, le problème provient du fait que la variable objet c n'est pas déclarée et comme tu as sans doute l'Opion Explicit, le programme s'arrête.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Désolé unparia je ne savais pas pour les classeurs tiers (je suis nouveau )

    C'est exactement le résultat voulu et je t'en remercie !!!

    J'ai une petite question.

    Que signifie le "Step -1" de ta boucle For ?

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Que signifie le "Step -1" de ta boucle For
    Je me précipiterais à ta place pour ouvrir mon aide VBA à la rubrique "For...Next, instruction"
    Je me vois mal expliquer mieux ce qu'est ce paramètre Step (sauf à considérer, ce que je n'estime pas nécessaire, que cette aide a mal été rédigée).
    Si problème résolu : je te prie de libérer cette discussion comme il se doit (un clic sur le tag résolu).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Parfait j’espérais avoir un début d'explication mais ce n'est pas grave.

    En tout cas merci pour ton aide qui m'a été précieuse.

    Le problème est résolu !

    Bonne journée.

  11. #11
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    j’espérais avoir un début d'explication mais ce n'est pas grave.
    Enfin quoi ...
    fais donc ces 2 essais élémentaires et très parlants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 1 to 10
      msgbox i
    next
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 10 to 1 step -1
      msgbox i
    next
    ces deux boucles ne parcourent pas dans le même sens, non ?
    Lorsque l'on ajoute ou supprime des articles en boucle, la meilleure manière de ne pas se faire des croche-pattes avec les indexes est d'aller de bas en haut.
    "meilleure" ne signifie pas "unique". on peut également utiliser une boucle for each, mais assortie alors d'un compteur additionnel.
    Voilà tout.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Il est important de préciser ce qui ne fonctionne pas. Soit le résultat escompté n'est pas à la hauteur de tes attentes, soit le problème et dans ce cas, il est important de communiquer, le n° de l'erreur, le message et le numéro de la ligne où a eu lieu cette erreur.
    Cela facilité tellement la vie.
    Merci Philippe je saurai à l'avenir

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Août 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Lorsque l'on ajoute ou supprime des articles en boucle, la meilleure manière de ne pas se faire des croche-pattes avec les indexes est d'aller de bas en haut.
    "meilleure" ne signifie pas "unique". on peut également utiliser une boucle for each, mais assortie alors d'un compteur additionnel.
    Voilà tout.
    Je ne savais pas que cela était possible.

    Encore merci pour tout !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/02/2014, 11h15
  2. Fonction - Renvoyer une cellule vide
    Par rogerlette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/07/2010, 11h34
  3. [Excel VBA]fonction dans une cellule qui modifie une autre cellule
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/01/2007, 17h43
  4. Réponses: 7
    Dernier message: 15/01/2007, 18h18
  5. [VBA-E] Nom et couleur bouton fonction d'une cellule
    Par zouille dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/04/2006, 17h00

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