Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2011, 17h55   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
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 :
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
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 23/11/2011, 19h38   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
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 :
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
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 21h23   #3
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
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.
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 23/11/2011, 21h31   #4
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

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

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Pour commencer Bonjour

Code :
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
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 21h40   #5
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Citation:
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.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 21h59   #6
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
Bonsoir.

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


Code :
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
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 23/11/2011, 21h59   #7
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

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

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Code :
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
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/11/2011, 22h12   #8
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
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?
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 22h29   #9
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

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

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Code :
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
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/11/2011, 22h39   #10
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
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 :
1
2
3
Declare Function ShowWindow Lib "user32" ( _
                 ByVal hwnd As Long, _
                 ByVal nCmdShow As Long) As Long
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/11/2011, 06h14   #11
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

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

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
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
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 20h20   #12
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
Bonsoir. Merci à toi d'avoir pris le temps de me répondre.
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h45.


 
 
 
 
Partenaires

Hébergement Web