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 :

Copier que les cellules avec des valeurs dans une plage. [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 123
    Points : 45
    Points
    45
    Par défaut Copier que les cellules avec des valeurs dans une plage.
    Voici une partie du code que j'utilise pour faire un copier dans une feuille pour l'envoyer dans un message. Comment dois je le changer pour copier simplement les cellules qui contiennent des valeurs.
    Exemple: lorsque les valeurs à copiées correspondent de A1 à A20, les cellules A21 à A100 ne soient pas prisent.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub OuvrirInternet()
     
    Dim NomAppli, AdresseHTTP
     
        Worksheets("commande").Select
        Range("A1:E100").Select
        Selection.Copy
     
        Worksheets("Gestion Bobine").Select
        Range("A1").Select

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonsoir,

    Je ne sais pas si c'est ce que tu veux; les cellules non vides sont copiées en colonne G (attention, les cellules vides sont supprimées; fais une sauvegarde avant).

    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
    Sub OuvrirInternet()
     
    Dim NomAppli, AdresseHTTP, c As Range, c1 As Range, c2 As Range, Aire As Range
     
        Worksheets("commande").Select
        On Error Resume Next
        Set c1 = Range("A1:E100").SpecialCells(xlCellTypeConstants)
        If Not c1 Is Nothing Then Set c = c1
        Set c2 = Range("A1:E100").SpecialCells(xlCellTypeFormulas)
        If c2 Is Nothing Then Set c = Union(c1, c2)
        On Error GoTo 0
        ctr = ctr + 1
        For Each Aire In c.Areas
            Aire.Copy Cells(ctr, 7)
            ctr = ctr + Aire.Rows.Count
        Next Aire
     
    End Sub

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 123
    Points : 45
    Points
    45
    Par défaut
    Ce n'est pas ce que je recherche. Je recherche à envoyer les cellules non vides dans un message mail. Et non les déplacer dans la même feuille.

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Pour commencer Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub OuvrirInternet()
     
    Dim NomAppli, AdresseHTTP
     
        With Worksheets("commande")
            .Range("A1", .Cells(.Rows.Count, "A").End(xlUp).Offset(0, 4)).Copy Worksheets("Gestion Bobine").Range("A1")
        End With
     
    End Sub
    J'ai supposé que la colonne A dimensionnait le nombre de ligne à sélectionner, si ça n'est pas le cas, précises quelle colonne il faut utiliser.

    ++
    Qwaz

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Ce n'est pas ce que je recherche. Je recherche à envoyer les cellules non vides dans un message mail
    Dommage. Tu demandes comment copier les cellules non vides. C'est ce que j'ai fait. Adapte la partie "Coller". Pour le reste... il aurait peut-être fallu préciser ton client de messagerie.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 123
    Points : 45
    Points
    45
    Par défaut
    Bonsoir.

    Voilà j'ai modifié le code de Qwazerty ainsi et cela correspond à ma recherche. Merci à tout les 2 pour votre aide.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub OuvrirInternet()
     
    Dim NomAppli, AdresseHTTP
     
        With Worksheets("commande")
            .Range("A1", .Cells(.Rows.Count, "A").End(xlUp).Offset(0, 4)).Copy
     
            Worksheets("Gestion Bobine").Select
            Range("A1").Select
        End With

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    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
    25
    26
    27
    28
    29
    30
    Sub OuvrirInternet()
     
    Dim NomAppli As String, AdresseHTTP As String
    'Va dans le menu Outils, références... et coche Microsoft Internet controls
    Dim Iexplorer As New InternetExplorer
     
        With Worksheets("commande")
            .Range("A1", .Cells(.Rows.Count, "A").End(xlUp).Offset(0, 4)).Copy
        End With
     
        Worksheets("Gestion Bobine").Select
        Range("A1").Select
     
        MsgBox "Envoyer la Résa ?", vbExclamation, Title:="RAPPEL"
     
        If MsgBox(msg, vbYesNo + vbDefaultButton1, "Continuer ?") = vbYes Then
     
            MsgBox "Vous allez ouvrir la boite mail du MVMS. Ouvrez un nouveau message puis faites un clic droit et coller la résa.bobine.", vbExclamation
            Iexplorer.Navigate "https://gmail.com"
            Iexplorer.Visible = True
            'NomAppli = "C:\Program Files\Internet Explorer\IEXPLORE.EXE "
            'AdresseHTTP = "https://gmail.com"
            'n = NomAppli + AdresseHTTP
            'Call Shell(n, 3)
        ElseIf réponse = vbNo Then
            'Worksheets("Gestion Bobine").Select'inutile on y est déjà
            'Range("A1").Select
            MsgBox "Votre résa. bobines n'a pas été envoyé au dépôt!", vbInformation
        End If
    End Sub
    Attention aux messages box à la queue leuleu... c'est vite pénible.

    ++
    Qwaz

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 123
    Points : 45
    Points
    45
    Par défaut
    En faite je suis totalement débutant en VBA. Je "joue" avec ce langage depuis 1 mois.
    Je me sers donc beaucoup de ce super site et son forum pour essayer de comprendre et d'avancer.
    J'ai d'ailleurs d'autres morceaux de code à soumettre afin de les réduire et les optimiser comme tu viens de le faire.
    Un grand merci à toi pour ta réactivité très rapide.

    Une dernière question : pourquoi IE s'ouvre-t-il en réduit alors qu'avec mon ancien code il s'ouvrait en grand?

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Option Explicit
     
    Declare Function ShowWindow Lib "user32" ( _
                     ByVal hwnd As Long, _
                     ByVal nCmdShow As Long) As Long
     
    Const SW_MAXIMIZE = 3
     
    Sub OuvrirInternet()
     
    Dim NomAppli As String, AdresseHTTP As String
    'Va dans le menu Outils, références... et coche Microsoft Internet controls
    Dim Iexplorer As New InternetExplorer
     
        With Worksheets("commande")
            .Range("A1", .Cells(.Rows.Count, "A").End(xlUp).Offset(0, 4)).Copy
        End With
     
        Worksheets("Gestion Bobine").Select
        Range("A1").Select
     
        MsgBox "Envoyer la Résa ?", vbExclamation, Title:="RAPPEL"
     
        If MsgBox(msg, vbYesNo + vbDefaultButton1, "Continuer ?") = vbYes Then
     
            MsgBox "Vous allez ouvrir la boite mail du MVMS. Ouvrez un nouveau message puis faites un clic droit et coller la résa.bobine.", vbExclamation
            Iexplorer.Navigate "https://gmail.com"
            Iexplorer.Visible = True
            ShowWindow Iexplorer.hwnd, SW_MAXIMIZE
            'NomAppli = "C:\Program Files\Internet Explorer\IEXPLORE.EXE "
            'AdresseHTTP = "https://gmail.com"
            'n = NomAppli + AdresseHTTP
            'Call Shell(n, 3)
        ElseIf réponse = vbNo Then
            'Worksheets("Gestion Bobine").Select'inutile on y est déjà
            'Range("A1").Select
            MsgBox "Votre résa. bobines n'a pas été envoyé au dépôt!", vbInformation
        End If
    End Sub
    ++
    Qwaz

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 123
    Points : 45
    Points
    45
    Par défaut
    Impec! ça fonctionne nickel
    Je voie souvent ce code. Peux tu, stp, me mettre des commentaires pour m'aider enfin à comprendre cette partie. "user32", "byval", "hwnd"
    Ceux sont des variables très certainement, mais pourquoi toujours la même appellation?
    Je n'ai encore rien trouvé la dessus dans les tutos du site.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Declare Function ShowWindow Lib "user32" ( _
                     ByVal hwnd As Long, _
                     ByVal nCmdShow As Long) As Long

  11. #11
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    C'est la déclaration d'une API Windows.
    En l’occurrence ShowWindow, celle-ci se trouve dans la DLL User32.dll (c'est un fichier système de windows).

    Byval signifie que lors de l'appelle, le paramétre sera passer par valeur (l'autre possibilité est ByRef, par reference) plus d'info ici dans le tutoriel sur les variables je pense).

    hwnd correspond à l'une des variables qui seront à préciser lors de l'appelle, ici hwnd représente le handle de fenêtre, c'est un numéro unique qui représente chaque composants/fenêtre chargé sur ta session windows.

    quand je parle d'appelle, c'est lorsque tu utilises ShowWindow dans ton code.

    [Edit]
    Tiens regarde ce tutoriel
    [/Edit]

    ++
    Qwaz

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 123
    Points : 45
    Points
    45
    Par défaut
    Bonsoir. Merci à toi d'avoir pris le temps de me répondre.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/03/2015, 11h13
  2. Dérouler des valeurs dans une cellule
    Par beast666 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/04/2009, 16h59
  3. Compter des valeurs dans une plage nommée
    Par deniooo dans le forum Excel
    Réponses: 25
    Dernier message: 30/06/2008, 18h00
  4. Réponses: 4
    Dernier message: 29/08/2007, 16h01
  5. Inserer des valeurs dans une cellule
    Par azerty53 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/09/2006, 16h27

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