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 :

Mettre 1 formule dans toutes les cellules vides d'1 sélection [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 22
    Par défaut Mettre 1 formule dans toutes les cellules vides d'1 sélection
    Bonjour à tous,

    J'ai un peu de mal avec une macro. Elle doit faire :
    Tu démarres du bas pour atteindre la 1ère cellule non vide, tu décales vers la droite de X colonne.
    Dans cette colonne tu prends la cellule sélection jusqu'à la cellule 2 = la sélection
    Dans cette sélection tu insères dans toutes les cellules vides une formule rechercheV.

    Voici ce que j'ai fais, mais il ne prends pas la sélection et du coups je ne sais pas si le reste est correcte

    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() 
     
    Windows("Regroupement fichiers annonce.xlsm" ).Activate 
    'Démarre Bas jusqu'à 1ere ligne non vide puis redescends sur la 1ère vide en dessous de la Col C et tu là sélectionnes 
    Dim DernLig As Long 
        DernLig = Range("C" & Rows.Count).End(xlUp).Row 
        Range("C" & DernLig).Select 
    'Décale la sélection de col C à col O 
        ActiveCell.Offset(0, 12).Select 
     
    'Insertion "Date Pochette" RechercherV si cellule Vide 
        Range("O2:O" & ActiveCell.End(xlDown)).Select 
        For Each MaCellule In Selection 
        If MaCellule.Text = Empty Then MaCellule.Value = "=VLOOKUP(RC[-12],[Papier reçu.xlsx]'Intégration'!R2C2:R65000C3,2,False)" 
        Next MaCellule 
    'Copier / collage spécial Colonne O 
        Columns("O:O" ).Select 
        Selection.Copy 
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
            :=False, Transpose:=False 
        Range("A1" ).Select 
        Application.CutCopyMode = False 
     
    End Sub
    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    1) Et si tu commençais à travailler autrement : directement sur les objets Excel au lieu de le faire à coups de Select, Selection, Copy, Paste et tutti quanti ?
    2) ces lignes de code sont en outre étranges :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Columns("O:O" ).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Peux-tu en expliquer la justification exacte ?

    Si c'est pour "figer" des valeurs issues de formules par ta boucle précédente, autant alors mettre directement le résultat de calculs directs au lieu d'appliquer des formules pour en figer ensuite le résultat.

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 22
    Par défaut
    Bonjour unparia,

    Effectivement la fin de la macro est bien pour figer le résultat de la formule.

    Honnêtement, je suis novice dans le vba et j'apprends seul. C'est pour cela que mes macro ne sont top top pour des gens expérimentés

    Mais je suis toujours preneur de bons conseils

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Honnêtement, je suis novice dans le vba et j'apprends seul. C'est pour cela que mes macro ne sont top top pour des gens expérimentés

    Mais je suis toujours preneur de bons conseils
    Pas vraiment seul puisque ta "méthode" consiste à écrire sans avoir vraiment appris les bases, puis à venir chercher des corrections.
    Commence alors s'il te plait par la lecture attentive de ceci :
    http://silkyroad.developpez.com/VBA/DebuterMacros/#LIII
    Tu y verras comment, à partir de ce qui a été obtenu par utilisation de l'enregistreur de macros (qui n'est rien d'autre qu'un outil codant chaque geste fait - raison des select -), on écrit proprement.
    Reviens ensuite après avoir appliqué ces conseils (justement)

  5. #5
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour et bienvenue au forum
    Les Select et Activate n'entraînent que des problèmes, n'écris pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Columns("O:O" ).Select 
     Selection.Copy

    Mais
    Essaie un peu de nettoyer ton code comme cela.
    En particulier, ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DernLig = Range("C" & Rows.Count).End(xlUp).Row 
     Range("C" & DernLig).Select 
     'Décale la sélection de col C à col O 
     ActiveCell.Offset(0, 12).Select 
     
     'Insertion "Date Pochette" RechercherV si cellule Vide 
     Range("O2:O" & ActiveCell.End(xlDown)).Select
    Il y a des Select et ActiveCell à ne plus s'y retrouver
    Tu melanges aussi des cellules avec des numéros de lignes. Et je ne comprends pas bien ce que tu veux faire, si ton but est :
    Dans cette colonne tu prends la cellule sélection jusqu'à la cellule 2 = la sélection
    Alors, une fois que tu as la dernière ligne il faut l'utiliser comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maPlage = Range("O2:O" & DernLig)
    Non?

    En complément de la remarque d'unparia sur ton copier-coller à la fin, au lieu d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaCellule.Value = "=VLOOKUP(RC[-12],[Papier reçu.xlsx]'Intégration'!R2C2:R65000C3,2,False)"

    Utilise directement Application.VLookup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaCellule.Value = Application.VLookup(Range("C" & MaCellule.Row), Sheets("Intégration").Range("B2:C65000"),2,0)
    Cela te mettra directement la valeur sans formule.

    Enfin tu écris :
    tu décales vers la droite de X colonne.
    Mais ici, tu travailles sur des colonens bien précises (C et O), est-ce normal?

  6. #6
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 22
    Par défaut
    Riaolle,

    Merci pour ton retour, je ne savais pas que je pouvais intégrer directement .copy.
    J'ai modifié tout les codes sur le même principe et cela rend l'exécution plus fluide.

    Pour le reste, j'essai de faire dire la chose suivante :
    tu pars du bas de la feuille et tu remontes jusqu'à la première cellule non vide d'où le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DernLig = Range("C" & Rows.Count).End(xlUp).Row 
     Range("C" & DernLig).Select 
     'Décale la sélection de col C à col O
    Puis je décale jusquà la colonne de mon choix
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ActiveCell.Offset(0, 12).Select
    Et après tu sélectionnes de la cellule active jusqu'à la cellule n°2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("O2:O" & ActiveCell.End(xlUp)).Select
    Et dans chaque cellule vide de cette sélection je fais un recherche avec ta méthode qui fonctionne très bien et qui permets d'avoir le résultat en dur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each MaCellule In Selection
    If MaCellule.Text = Empty Then MaCellule.Value = Application.VLookup......    
    Next MaCellule
    Merci d'avance

  7. #7
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Une fois que tu as ta dernière ligne, pourquoi est-ce que tu sélectionnes la dernière cellule de la colonne C pour ensuite la décaler vers la colonne O ? Pourquoi ne sélectionnerais-tu pas tout de suite la dernière cellule de la colonne O?
    Et encore mieux, pourquoi as-tu besoin de sélectionner la cellule si tu as déjà le numero de la dernière ligne?

    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DernLig = Range("C" & Rows.Count).End(xlUp).Row 
     Range("C" & DernLig).Select 
     'Puis je décale jusquà la colonne de mon choix
     ActiveCell.Offset(0, 12).Select 
     Et après tu sélectionnes de la cellule active jusqu'à la cellule n°2
     Range("O2:O" & ActiveCell.End(xlUp)).Select
    '...
    For Each MaCellule In Selection
    '...


    Tu peux écrire tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DernLig = Range("C" & Rows.Count).End(xlUp).Row 
    For Each MaCellule in Range("O2:O" & DernLig)
    Beaucoup moins de lignes de code, moins de confusion possible et pas de Select et activecell.

    Après si tu veux laisser le choix de la colonne, si ce n'est pas toujours O, tu peux procéder ainsi.
    Dans le cas où tu récupères le n° de la colonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim DernLig As Long, col As Long
    DernLig = Range("C" & Rows.Count).End(xlUp).Row 
    col = .... 'à voir comment tu récupères le numero de la colonne
    For Each MaCellule in Range(Cells(2, col), Cells(DernLig, col))
    Dans le cas où tu récupères le nom (lettre) de la colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim DernLig As Long, col As String
    DernLig = Range("C" & Rows.Count).End(xlUp).Row 
    col = .... 'à voir comment tu récupères le numero de la colonne
    For Each MaCellule in Range(col & "2:" & col & DernLig)

  8. #8
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 22
    Par défaut
    Pourquoi colonne C
    Parce que je colle régulièrement de nouvelle information dedans et cette colonne C et le début de ma base de travail.

    Ensuite je décale vers la Colonne O car je souhaite compléter les cases vides avec de nouvelles informations (mais uniquement dans les cases vides).

    C'est pour cela, que je pars de la cellule active décalée pour remonter jusqu'à la case O2 afin de faire une sélection et dans cette sélection, je fais une recherchev mais uniquement dans les cellules vides


    Merci d'avance

  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Salut Jacques !

    Citation Envoyé par unparia Voir le message
    Et si tu commençais à travailler autrement : directement sur les objets Excel au lieu de le faire à coups de Select, Selection
    C'est exactement le même conseil que je lui ai déjà prodigué sur un autre forum !

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  10. #10
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 22
    Par défaut
    unparia et Marc-L

    Je comprends votre position, et j'ai parfaitement conscience de tout ce que vous me dites et des lires que je dois faire "assez rapidement"

    Or, pour le moment, c'est d'un petit coup de pouce afin que je puisse modifier la macro et avancer dans mon travail.

    Marc-L, j'ai bien pris note des infos que tu m'as communiqué, mais pour le moment ce ne m'aide pas, je prendrai le temps ce WE

    Merci d'avance à tous pour aide

    raiolle,

    Un grand merci pour ton aide

  11. #11
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Je ne confondrai jamais un forum de développement avec un self-service qui ne ferait qu'entretenir un climat étranger à celui qui doit prévaloir.
    Désolé (vraiment désolé), mais ce ne sera ni ne saurait jamais être autrement.

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

Discussions similaires

  1. [Toutes versions] rajouter deux 0 dans toutes les cellules d une colonne sans effacer leur contenues
    Par mikeactuaire dans le forum Access
    Réponses: 3
    Dernier message: 08/09/2011, 14h31
  2. [AC-2007] Creation de table avec calculs de ratio : "#Nom?" dans toutes les cellules
    Par jbulysse dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/09/2009, 09h48
  3. [XL-2003] Remplacer toutes les cellules vides
    Par flet le kid dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/05/2009, 17h55
  4. Ajouter * dans toutes les cellules d'une colonne
    Par islyoung2 dans le forum Excel
    Réponses: 4
    Dernier message: 04/02/2009, 11h13
  5. copier dans toutes les cellules jaunes ?
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/11/2007, 23h36

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