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 22/10/2011, 15h28   #1
 
Homme Lionel Bellivier
Cabinet de gestion
Inscription : octobre 2011
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Lionel Bellivier
Localisation : Tunisie

Informations professionnelles :
Activité : Cabinet de gestion
Secteur : Conseil

Informations forums :
Inscription : octobre 2011
Messages : 32
Points : -5
Points : -5
Bonjour,
j'ai cherché dans tous les sujets (environ 503 pages) mais je n'ai pas trouvé. Alors, je me permets de vous poser mes petits problèmes que je suis incapable de solutionner;

1 - Je souhaite créer une macro qui recherche des conditions pour s'exécuter quand je la lance :

j'ai une feuille nommée : Facture,
j'ai 12 feuilles nommées de 1 à 12, (12 mois de l'année )

Je souhaite quand je dois saisir une facture nouvelle dans ma feuille facture, qu'une plage de cellules de celle qui est déjà saisie se copie, uniquement "en valeurs" dans la feuille correspondante :

en clair : (enfin j'espère)
si dans ma facture déjà saisie, dans la cellule A1 pas exemple, il y a 1, la copie doit se faire dans la feuille nommée1... 2 dans 2 etc.

Ou mieux encore
Imaginons que je n'ai pas de feuilles préparées (1 à 12) et que la macro crée une feuille sur laquelle se fait la copie et que cette feuille soit nommée automatique du nom de la cellule A1..... waw le pied ce serait !

Pouvez-vous m'aider ?
Merci d'avance,
Amicalement,
Lionel,

Je ne connais pas du tout VBA et je ne parle même pas anglais..... pas facile pour moi.

Voilà ce que j'ai fait par recoupement :

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
Sub Archivage()
'
' Archivage Macro
'
 
'
    If ("=MONTH(Facture!R[-3]C[-12])" = "10") Then
    ActiveSheet.Unprotect
 
    ActiveSheet.Unprotect
    Sheets("1").Select
    ActiveSheet.Unprotect
 
    Sheets("Facture").Select
    Range("Y7").Select
    Selection.Copy
    Sheets("1").Select
    Range("Y7").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
 
    Sheets("Facture").Select
    Range("B10:AH55").Select
    Selection.Copy
    Range("AK7").Select
    Sheets("1").Select
    Range("B10").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("B10").Select
    Application.CutCopyMode = False
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    End If

Merci pour votre aide,
Amicalement,
Lionel,
arthour973 est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 23/10/2011, 12h01   #2
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
Par défaut Model

Dans le même genre, afin d'avoir une création d'onglet à la demande et avec un model unique j'ai fait la macro ci dessous.

J'ai crée un onglet "model" avec la couleur, format etc... et donc je lance cette macro qui gére une copie de ce model avec le nom de mon choix qui pour toi par exemple peut se trouver dans ton onglet facture.

Il est facile ensuite d'y ajouter des éléments comme la date nom du client etc...


voici le code:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Sub MODEL_UNIQUE()
 
Dim onglet As Long
Dim nom_onglet, nvlle_feuille As String
 
onglet = ActiveWorkbook.Sheets.Count ' compte le nb d'onglet
nom_onglet = ActiveWorkbook.Sheets(onglet).Name
nvlle_feuille = "ton choix" 'ou range("facture!A1").value
 
' test si la feuille existe
   If feuille_existe(nvlle_feuille) = True Then
 
    Response = MsgBox("Cette feuille existe déjà dans ce classeur" _
    & Chr(13) & "Voulez vous la remplacer?", vbYesNo, "Supression de la feuille?")
 
   If Response = vbYes Then
         Application.DisplayAlerts = False
         Sheets(nvlle_feuille).Select
         ActiveWindow.SelectedSheets.Delete
         Application.DisplayAlerts = True
 
 
 
    Sheets("model").Select ' Prend la forme du model unique à recopier
    onglet = onglet - 1
    Sheets("model").Copy After:=Sheets(onglet) ' création d'une copie du modél sur le dernier onglet
 
    'changer le nom de la nouvelle feuille
    onglet = onglet + 1
    nom_onglet = ActiveWorkbook.Sheets(onglet).Name
 
    Sheets(nom_onglet).Select
    Sheets(nom_onglet).Name = nvlle_feuille
 
    Range("A1").Select
    GoTo fin
 
 
              Else
                 Exit Sub
                    End If
    End If
 
    Sheets("model").Select ' Prend la forme du model unique à recopier
    Sheets("model").Copy After:=Sheets(onglet) ' création d'une copie du modél sur le dernier onglet
 
    'changer le nom de la nouvelle feuille
    onglet = onglet + 1
    nom_onglet = ActiveWorkbook.Sheets(onglet).Name
 
    Sheets(nom_onglet).Select
    Sheets(nom_onglet).Name = nvlle_feuille
 
fin:
 
    Range("A1").Select
 
 
 
 
End Sub
 
Function feuille_existe(nom_feuille)
For n = 1 To Sheets.Count
 If Sheets(n).Name = nom_feuille Then
    feuille_existe = True
    Exit Function
 End If
Next n
feuille_existe = False
End Function
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 12h59   #3
 
Homme Lionel Bellivier
Cabinet de gestion
Inscription : octobre 2011
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Lionel Bellivier
Localisation : Tunisie

Informations professionnelles :
Activité : Cabinet de gestion
Secteur : Conseil

Informations forums :
Inscription : octobre 2011
Messages : 32
Points : -5
Points : -5
Par défaut Bonjour "Membre à l'essai"

Merci pour votre réponse.
Je vais essayer ça.
Je suis complètement ignare en VBA c'est pourquoi je vous pose cette question : dois-je remplacer ce qui est écrit en français ?
Merci de votre aide, vraiment !
Amicalement,
Lionel,
arthour973 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 23/10/2011, 13h23   #4
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
Par défaut RE

Il suffit de copier le code ci dessus d'en un module et de le lancer!!
La subtilité des noms va venir après avoir fait des essais .....
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 13h49   #5
 
Homme Lionel Bellivier
Cabinet de gestion
Inscription : octobre 2011
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Lionel Bellivier
Localisation : Tunisie

Informations professionnelles :
Activité : Cabinet de gestion
Secteur : Conseil

Informations forums :
Inscription : octobre 2011
Messages : 32
Points : -5
Points : -5
Ok, je vais essayer comme cela.
Merci encore de votre gentilesse.

ça beug à ce niveau :

Code :
Sheets("model").Select ' Prend la forme du model unique à recopier
Qu'en pensez-vous ?
arthour973 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 23/10/2011, 14h17   #6
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
Par défaut re

Comme dit au dessus c'est un model!! Donc il faut créer un onglet "model"...
Le but c'est de ne pas recopier 50 fois la même chose. Dans cet onglet on peut préparer le travail en avance comme les couleurs les formules etc...

A chaque fois que l'on souhaite créer une nouvelle facture, on lance la macro
un nouvel onglet s'ajoute au classeur.
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 17h14   #7
 
Homme Lionel Bellivier
Cabinet de gestion
Inscription : octobre 2011
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Lionel Bellivier
Localisation : Tunisie

Informations professionnelles :
Activité : Cabinet de gestion
Secteur : Conseil

Informations forums :
Inscription : octobre 2011
Messages : 32
Points : -5
Points : -5
Désolé, je suis nul en VBA et je n'y comprends rien.
Cependant, je précise que je ne veux pas créer une nouvelle feuille "facture" avec toutes les formules etc.
Ce que je voudrais, c'est copier uniquement "les valeurs" d'une plage de saisie dans ma matrice facture (qui sera remise à blanc automatiquement après l'exécution de la macro pour faire place à une nouvelle saisie) vers une nouvelle feuille que la macro nommerait ensuite du nom de la date de la facture copiée ( cellule : Y18)

Mais j'y pense, si la macro peut créer une feuille sur laquelle "ma plage" de cellules contenues dans "facture" sera copiée et que cette feuille sera renommeée..... il n'y a plus besoin de condition.

Merci de votre aide,
Amicalement,
Lionel,

Je vous précise que j'ai déjà dans mon classeur avec la feuille "facture", une feuille qui contient uniquement les cadres et les formats, prêts à recevoir les valeurs à archiver.

J'ai nommé ma feuille facture "model".
Effectivement, il l'a copié mais intégralement avec les formules des toutes les colonnes dont je n'ai plus besoin pour l'archive et qui prennent trop de place.
Je voudrais que seule une plage de cellules de "facture" alias "model" soit copiée en valeur uniquement dans une feuille ( matrice ) qui est déjà préparée en formats pour recevoir les informations.
Donc, c'est cette feuille de réception préparée que je voudrais qu'il dupplique dans un nouvel onglet à renommer et dans laquelle les infos des cellules de ma facture alias "model" à archiver seraient copiées.
Merci pour votre aide.
arthour973 est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 23/10/2011, 19h10   #8
 
Homme Lionel Bellivier
Cabinet de gestion
Inscription : octobre 2011
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Lionel Bellivier
Localisation : Tunisie

Informations professionnelles :
Activité : Cabinet de gestion
Secteur : Conseil

Informations forums :
Inscription : octobre 2011
Messages : 32
Points : -5
Points : -5
Par défaut RE RE RE RE

Je crois que j'ai trouvé une solution au problème.
Votre macro fonctione super et je vous en remercie vivement.
Voilà ce que j'ai pensé :

Je renomme ma feuille qui contient les format uniquement = model,
Je créé une macro qui copie les valeurs dont j'ai besoin de ma feuille "facture",
enfin, j'éxécute votre macro et super c'est bien.

Cependant, il me reste des problèmes à résoudre :

1 - j'ai besoin d'inclure votre macro (en fait il y en a 2 ) dans ma macro, c'est à dire à un endroit précis.
Puis-je mettre vos deux macros à la suite "dans la mienne" ?

2 - est-il possible de nommer automatiquement la nouvelle feuille crée par votre macro en lui donnant le nom du contenu d'une cellule de "modèl" qui est une date ?

3 - j'ai aussi une feuille "cumuls qui reprends la dernière ligne de chaque facture les valeurs suivantes :

dates numéros H.T. RS 5 % RS 15 % TTC

est-il possible d'écrire une macro à inclure ( toujours dans la mienne ) qui reporterait en dessous les unes des autres ces informations à chaque éxécution ?

Oui, je sais, cela fait bcp et je ne sais quoi dire.
En tout cas, Un grand merci pour votre.
Amicalement,
Lionel,
arthour973 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 19h21   #9
 
Homme Lionel Bellivier
Cabinet de gestion
Inscription : octobre 2011
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Lionel Bellivier
Localisation : Tunisie

Informations professionnelles :
Activité : Cabinet de gestion
Secteur : Conseil

Informations forums :
Inscription : octobre 2011
Messages : 32
Points : -5
Points : -5
Par défaut encore RE

J'ai trouvé pour mon problème N° 1 :
Il suffit d'écrire dans ma macro :
Code :
Application.Run "'Sihab factures - Essai.xlsm'!MODEL_UNIQUE"
J'avance doucement.......
arthour973 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 19h38   #10
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
Par défaut re

Pour inclure ma macro dans la votre il suffit de l'appeler par:
a l'endroit ou vous souhaitez qu'elle se déclanche(à quel moment).

Pour la 2 eme question c'est possible par:
Code :
nvlle_feuille =range("facture!A1").value
Mais attention la date doit être ecrite sous le format 23_10_2011 pour qu'il soit accepter dans l'onglet.
penser à changer la position A1 par la cellule de votre date

Ah oui j'ai mit le nom de "model" en onglet mais il est possible de changer se parametre évidement. il faut remplacer tout les "model" par le de votre feuille de réception par exemple.

Et pour la finir, si vous devez pecher d'autres infos il suffit de rajouter
à la toute fin de mon code avant end sub:

C'est détaillé afin de comprendre la logique(il y a plus simple) mais dans votre cas c'est mieux.

Explication, je vais chercher 3 informations de la feuille cumulus dans les cellules A10,A11,12 et je les reportes dans la nouvelle feuille aux emplacements A20,A21,A22


Code :
1
2
3
range("nvlle_feuille!A20").value=range("cumulus!A10").value
range("nvlle_feuille!A21").value=range("cumulus!A11").value
range("nvlle_feuille!A22").value=range("cumulus!A12").value
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 20h06   #11
 
Homme Lionel Bellivier
Cabinet de gestion
Inscription : octobre 2011
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Lionel Bellivier
Localisation : Tunisie

Informations professionnelles :
Activité : Cabinet de gestion
Secteur : Conseil

Informations forums :
Inscription : octobre 2011
Messages : 32
Points : -5
Points : -5
Par défaut petit RE

Bonsoir,
Vous aurez passé une bonne partie de votre temps avec moi, comment vous en remercier ? d'autant que grace à vous, mon "truc" a super avancé.

J'ai essayé de placer votre code pour renommer la feuille automatiquement mais je n'y arrive pas :


Pour la 2 eme question c'est possible par:
Code :
nvlle_feuille =range("facture!A1").value

Je me l'a met où..... non pas là.
Encore merci.
arthour973 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 20h28   #12
Membre du Club
 
Homme
developpeur
Inscription : octobre 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : developpeur
Secteur : Distribution

Informations forums :
Inscription : octobre 2011
Messages : 85
Points : 63
Points : 63
Par défaut re

A placer au début de mon code:

Code :
1
2
3
4
5
6
7
8
Sub MODEL_UNIQUE()
 
Dim onglet As Long
Dim nom_onglet, nvlle_feuille As String
 
onglet = ActiveWorkbook.Sheets.Count ' compte le nb d'onglet
nom_onglet = ActiveWorkbook.Sheets(onglet).Name
nvlle_feuille =range("facture!A1").value
Pour le reste c'est comme des legos !! il faut faire des tests ...
Mais maintenant que tu es sur la bonne voie et avec une bonne nuit de sommeil... la solution va te sembler évidente!
lenovo49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 20h47   #13
 
Homme Lionel Bellivier
Cabinet de gestion
Inscription : octobre 2011
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Lionel Bellivier
Localisation : Tunisie

Informations professionnelles :
Activité : Cabinet de gestion
Secteur : Conseil

Informations forums :
Inscription : octobre 2011
Messages : 32
Points : -5
Points : -5
Par défaut Super

ça marche du tonnerre, vous êtes un Pro.
Si on me demande de vous confirmer dans votre essai..... je signe.

Je vous souhaite aussi une très bonne nuit.

Nul en informatique mais j'essaie d'y travailler, je ne peux vous apporter mon aide et j'en suis désolé.

Cependant, sachez que je suis un éleveur d'oiseaux, que je fais de la génétique et que je suis classé champion et capacitaire pour toutes les espèces eixstantes sauf dangereuses.

Je reproduis, j'apprivoise et j'élève complètement aussi bien des "becs droits" (canaris et autres) que les Psittacidaés (perroquets et perruches).

Alors, si vous partagez cette passion ou que d'avanture vous avec besoin de mon aide dans ce domaine, elle vous est acquise et c'est avec un grand plaisir que j'interviendrai.

Encore un grand merci, grâce à vous, j'ai un fichier qui fonctionne "super" et ça, jamais je n'aurais pu le faire.



Amicalement,
Lionel,
arthour973 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 21h46   #14
 
Homme Lionel Bellivier
Cabinet de gestion
Inscription : octobre 2011
Messages : 32
Détails du profil
Informations personnelles :
Nom : Homme Lionel Bellivier
Localisation : Tunisie

Informations professionnelles :
Activité : Cabinet de gestion
Secteur : Conseil

Informations forums :
Inscription : octobre 2011
Messages : 32
Points : -5
Points : -5
Par défaut Encore une dernière pour un autre fois

vous m'avez dit :

Citation:
Et pour la finir, si vous devez pecher d'autres infos il suffit de rajouter
à la toute fin de mon code avant end sub:
C'est détaillé afin de comprendre la logique(il y a plus simple) mais dans votre cas c'est mieux.

Explication, je vais chercher 3 informations de la feuille cumulus dans les cellules A10,A11,12 et je les reportes dans la nouvelle feuille aux emplacements A20,A21,A22"

Evidemment, je n'y arrive pas !

En fait, c'est l'inverse de ce que vous avez compris (je m'étais certainement mal expliqué) que je souhaite. En effet :

Quand ma nouvelle feuille d'archive est créée (celle qui est nommée du contenu de ma cellule de la feuille "facture", je souhaiterais que les chiffres suivants ( date - n° - HT - T5% - T15%- TTC) soient reportés automatiquement en horizontal dans ma feuille "cumuls".

Plus encore, ce serait génial que la macro, à chaque fois qu'elle s'éxécute pour une nouvelle archive, positionne ces infos sur chaque ligne en suivant dans ma feuille "cumuls.

Oui, je sais, là peut-être que j'exagère car c'est déjà super.... alors ce serait parfait.

Merci vraiment,
Amicalement,
Lionel, (éleveur amateur)
arthour973 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h50.


 
 
 
 
Partenaires

Hébergement Web