Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[VBA EXCEL] AIDE AUX DÉBUTANTS, QUELQUES MORCEAUX DE CODES


Information sur le tutorial

Catégorie :VBA Date de création : 20/07/2006 10:49:04 Vu : 75 749 fois

Note :
8,67 / 10 - par 9 personnes
8,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (28)
Ajouter un commentaire et/ou une note

Description

Ce tutorial permet de poser quelques bases de la programmation en VBA. Il a pour seule prétention d'aider ceux qui débutent, sans plus ni moins! J'espere que vous trouverez un peu d'aide dans ces quelques lignes

Tutorial

Suite à de nombreuses questions posées sur le forum et relatives à VBA Excel, j?ai décidé de créer ce petit tutorial qui aidera les débutants à de familiariser avec VBA.

            Les quelques bases necessaires au travail sous Excel seront réunies dans ce tutorial, qui n?a pas plus d?ambition que de fournir un point de départ.

            Les différentes méthodes décrites par la suite ne sont évidemment pas les seules possibles, ni même les meilleures, mais elles fonctionnent.

 

Commencons par les bases :

 

Selection d'une feuille

 

Sheets("NomDeLaFeuille").Select

 

Selection d'une cellule

 

Range("A1).Select

 

Ouverture d'un autre fichier Excel

 

ChDir "Chemin du repertoire du fichier"

    Workbooks.Open Filename:= _

        " Chemin du repertoire du fichier\fichier.xls "

 

Fermeture d'un fichier  

ActiveWindow.Close pour fermer le fichier en cours

Ou

    Workbooks.Close Filename:= _

        " Chemin du repertoire du fichier\fichier.xls "

 

Maintenant que les bases sont posées, voyons comment parcourir le fichier :

 

Parcourir les lignes

 

i = 1

    Sheets("Base").Select

    While Not Range("A" & i & "").Value = ""

    i = i + 1

    Wend

=>     Permet de se placer sur la premiere ligne vide

 

Parcourir les colonnes

 

While Cells(1, i) <> ""

i = i + 1

Wend

 

 

'permet de trouver la lettre associée au chiffre pour la colonne

NumCol = Cells(1, i).Column

lettre = IIf(NumCol > 26, Chr(64 + NumCol \ 26) & Chr(64 + NumCol Mod 26), Chr(64 + NumCol))

=>    Se place sur la premiere colonne vide

 

Maintenant que nous savons parcourir, voyons comment tirer des formules, adapter un graphique?

 

Tirer les formules

 

Range("A3:Z3").Select ?selection de la ligne contenant la formule

    Selection.AutoFill Destination:=Range("A3:Z" & i - 1 & ""), Type:=xlFillDefault

    Range("A3:Z" & i - 1 & "").Select

 

Adapter un graphique  

ActiveSheet.ChartObjects("Graphique 3").Activate

    ActiveChart.SeriesCollection(3).Select

    ActiveChart.SeriesCollection(3).XValues = "='% Nom classeur?!R4C1:R" & i & "C1"

    ActiveChart.SeriesCollection(1).XValues = "='% Nom classeur?!R4C1:R" & i & "C1"

    ActiveChart.SeriesCollection(2).XValues = "='% Nom classeur?!R4C1:R" & i & "C1"

    ActiveChart.SeriesCollection(3).Values = "='% Nom classeur?!R4C5:R" & i & "C5"

    ActiveChart.SeriesCollection(2).Select

    ActiveChart.SeriesCollection(2).Values = "='% Nom classeur?!R4C7:R" & i & "C7"

    ActiveChart.SeriesCollection(1).Select

    ActiveChart.SeriesCollection(1).Values = "='% Nom classeur?!R4C3:R" & i & "C3"

 

Cela permet de prendre en compte toutes les données et de les associer au graphique

 

Adapter la taille des cellules

'redimensionnement des cellules

    Rows("2:" & i & "").Select

    Selection.RowHeight = 25

    Range("A1:H1").Select

 

Changer les bordures  

' on s'occupe des bordures du tableau

Range("B3:H" & i & "").Select

    Selection.Borders(xlDiagonalDown).LineStyle = xlNone

    Selection.Borders(xlDiagonalUp).LineStyle = xlNone

    With Selection.Borders(xlEdgeLeft)

        .LineStyle = xlContinuous

        .Weight = xlMedium

        .ColorIndex = xlAutomatic

    End With

    With Selection.Borders(xlEdgeTop)

        .LineStyle = xlContinuous

        .Weight = xlMedium

        .ColorIndex = xlAutomatic

    End With

    With Selection.Borders(xlEdgeBottom)

        .LineStyle = xlContinuous

        .Weight = xlMedium

        .ColorIndex = xlAutomatic

    End With

    With Selection.Borders(xlEdgeRight)

        .LineStyle = xlContinuous

        .Weight = xlMedium

        .ColorIndex = xlAutomatic

    End With

    With Selection.Borders(xlInsideVertical)

        .LineStyle = xlContinuous

        .Weight = xlMedium

        .ColorIndex = xlAutomatic

    End With

    With Selection.Borders(xlInsideHorizontal)

        .LineStyle = xlContinuous

        .Weight = xlMedium

        .ColorIndex = xlAutomatic

    End With

 

Ce code permet de mettre des bordures interieures et exterieures sur un tableau. Le 'i' permet de se placer sur la derniere ligne du tableau.

 

Recuperer une valeur sur une autre feuille

 

nb = Range("B" & i & "").Value

 Sheets("nb rebut").Select

  Range("C" & j & "").Value = nb

 

Insérer ou effacer une ligne

Rows("4:4").Select

    Selection.Delete Shift:=xlUp ' pour supprimer

 

Rows("5:5").Select

    Selection.Insert Shift:=xlDown ' pour insérer

 

Voila, je l'espère, quelques morceaux de codes qui pourront vous aider. Je ne suis pas un pro en VBa, mais j'ai du travailler un peu dessus, et j'ai vu pas mal de questions qui trouveront des réponses dans ces quelques lignes. Ce tutorial est loin d'être exhaustif, les méthodes utilisées ne sont peut être pas toujours les bonnes, mais je suis à l'écoute de toutes autres maniéres de procéder !

 

Bonne programmation

 

Tof008

20 juillet 2006 10:51:01 :
Orthographe, premier passage lol
21 juillet 2006 11:44:27 :
Mise en page
signaler à un administrateur
Commentaire de tof008 le 20/07/2006 11:19:26

N'hésitez pas à laisser votre commentaire, votre idée d'amélioration ou vos critiques! Et si vous avez d'autres solutions, je n'hésiterez pas à les rajouter!

signaler à un administrateur
Commentaire de Drikce06 le 20/07/2006 16:32:17

Salut tof008, moi j'ai rien à redire, c'est sur que ça peut servir aux débutants. Il n'y a que la mise en forme que j'aime pas trop! lol!. Je me posai une question parce que j'ai jamais mis de tuto mais, ça peut pas faire comme les codes sources où ça te met la mise forme automatiquement ? En tout cas pour les couleurs ?
Je te me 8, parce que c'est toi, mdr!

signaler à un administrateur
Commentaire de romagny13 le 27/07/2006 10:17:54

ouai c'est vrai c'est embetant,
la mise en forme est tout le temps completement modifiée et c'est assez compliquer de faire un truc a la fois complet et bien presenté

sinon bien cool ce petit tuto tof008

signaler à un administrateur
Commentaire de us_30 le 27/09/2006 22:06:38

Bonsoir TOF008,

JE te pardonne volontier sur la mise en forme, que je sais plus que galère ! Pourvu que cela s'améliore rapidement...

Mais que cela n'empêche pas d'abord te de présenter mes encouragements. Puis mes critiques et idées...

=

Donc, si j'épluche un peu les coquilles ou erreurs...

Dans " Range("A1).Select " > oubli du guillement de fermeture.

Avec : While Not Range("A" & i & "").Value = ""
ou dans tous les autres "Range" du tuto, tu rajoutes inutilement : & ""
En effet, ce dernier ne cause pas de bug, grâce au fait que tu rajoutes... rien, enfin plutôt une chaîne nulle...

Range("A" & i).Value, plus simplement fonctionne parfaitement et est même plus logique. En effet si i=1, alors tout se passe comme si on avait écrit Range("A1").Value

=

Ensuite, quelques remarques sur la méthode.

Dans les codes exemples que tu présentes, il faut faire attention aux références des objets. En effet, utiliser "Cells" est une bonne chose, mais "Cells" tout court, s'applique par défaut à la feuille active. Donc, attention aux catastrophes ! lorsqu'on manipule plusieurs feuilles ou que l'utilisateur peut utiliser plusieurs feuilles.

Pour un tuto (et ses macros), il faut mieux être un peu plus précis, et indiquer l'objet parent.

Par exemple voici une syntaxe plus sur :

Sub test()
Sheets("feuil1").Cells(3, 5).Value = 4
End Sub

permet de mettre la valeur 4 dans la case E3 de la "feuil1". En effet, pour atteindre E3 en partant de A1, il faut descendre 3 lignes, et de 5 colonnes.
Le premier avantage, c'est qu'on ne change pas la sélection courante. Le deuxième avantage, c'est qu'on n'a plus besoin d'utiliser la méthode Select, qui a le gros inconviénient d'être inconfortable pour l'utilisateur puisqu'on change de feuille, de colonne ou autre sous ses yeux (effet de flash), et d'être très longue en temps. En fait, Select ou Selection sont des méthodes ou propriétés, très utilisés par l'enregistreur de macro commande, pour refaire à l'identique les manipulations. Mais il faut une fois, les macro commandes effectuées, les reprendre en supprimant toutes les sélections pour optimiser le code.

Par exemple, pour récuperer une valeur sur une autre feuille (comme tu le proposes) peut se simplifier en rassemblant les objets, avec :

Range("B" & i).Value = Sheets("nb rebut").Range("C" & j).Value

Remarquons que pour arriver à cette ligne de code, on "joue" qu'avec la touche DEL.

Donc, on peut utiliser ce principes  sur presque tous les exemples de code. Par exemple :

Rows("2:3").RowHeight = 25

=

Enfin, pour les bordures, une petite optimisation rapide que je ne détaille pas, consisterait à coder :

For t = 7 To 12
    Range("B3:H" & i).Borders(t).Weight = xlMedium
Next t

parfaitement identique à ce que tu proposes...

Pour essayer ce code, il faut une valeur à "i"... or dans un tuto, c'est moyen...

A mon avis, tu devrais donner une référence précise. Par exemple :

For t = 7 To 12
    Range("B3:H4").Borders(t).Weight = xlMedium
Next t

=

Voilà. Comme tu t'es dis ouvert à la critique, tu as de quoi d'être comblé. Mais je ne doute pas, que tu seras améliorer tout cela... Je te souhait bon courage, et je t'encourage avec un petit 10/10...

Amicalement,
Us.

signaler à un administrateur
Commentaire de thibast le 14/10/2006 09:31:49

Bonjour,

Juste un petit merci pour ce tutoriel.
Mes compétences en VBA excel ce cantone juste à quelques modifications du scripte existant et ce genre de modéle me sera précieux pour enfin démarrer sur ma propre base.
Encore merci, je place cette page dans mes raccourcis.

signaler à un administrateur
Commentaire de ChemicalWoRmS le 05/11/2006 16:04:32

on voit bien que c'est pour les débutants lol :p

signaler à un administrateur
Commentaire de mirmoleboss le 22/11/2006 20:01:46

aaaaahhhh enfin une reponse  a comment ajouter des valeurs apres  la derniere case vide

signaler à un administrateur
Commentaire de bertrand1202 le 12/01/2007 20:20:43

bonjour

j ai cree un classeur avec une feuille facturation avec 10 colonnes , je voudrais recuperer ce tableau sur la seconde feuille appelee clients dus ( on recupere tout dans un premier temps puis ensuite on supprime les ligne solde a zero et sous totaux sur la deuxieme feuille .
j ai essaye avec nb=range ..., ca ne marche pas , merci de votre aide

signaler à un administrateur
Commentaire de bertrand1202 le 12/01/2007 20:20:47

bonjour

j ai cree un classeur avec une feuille facturation avec 10 colonnes , je voudrais recuperer ce tableau sur la seconde feuille appelee clients dus ( on recupere tout dans un premier temps puis ensuite on supprime les ligne solde a zero et sous totaux sur la deuxieme feuille .
j ai essaye avec nb=range ..., ca ne marche pas , merci de votre aide

signaler à un administrateur
Commentaire de bertrand1202 le 12/01/2007 20:20:48

bonjour

j ai cree un classeur avec une feuille facturation avec 10 colonnes , je voudrais recuperer ce tableau sur la seconde feuille appelee clients dus ( on recupere tout dans un premier temps puis ensuite on supprime les ligne solde a zero et sous totaux sur la deuxieme feuille .
j ai essaye avec nb=range ..., ca ne marche pas , merci de votre aide

signaler à un administrateur
Commentaire de bertrand1202 le 12/01/2007 20:20:49

bonjour

j ai cree un classeur avec une feuille facturation avec 10 colonnes , je voudrais recuperer ce tableau sur la seconde feuille appelee clients dus ( on recupere tout dans un premier temps puis ensuite on supprime les ligne solde a zero et sous totaux sur la deuxieme feuille .
j ai essaye avec nb=range ..., ca ne marche pas , merci de votre aide

signaler à un administrateur
Commentaire de lermite222 le 06/04/2007 06:13:36

Bonjour à tous,
Ces quelques parties de code peuvent certainement êtres trés utiles aux débutants, un bon truc quand même pour ajouter des fonctions en VBA. que se soit pour des print, des mises en formes etc.. , faire une macro de l'automatisation que l'ont veux faire
(Outil >> macro >> nouvelle macro , donner un nom >>OK) ensuite effectuer toutes les opérations souhaitées,quand c'est terminé
(outil >> macro >> terminer l'enrégistrement)
Dans la barre d'outil visual basic, cliquer sur le bouton visual basic editor, vous entrez alors dans l'éditeur de VBA, vous pouver retrouver votre macro dans un module et il est alors possible de l'optimiser, de l'indexer et bien plus encore et surtout de connaître la syntaxe exacte.
Voilà.. un petit truc que j'ai employé pendant des années.
Cordialement
lermite222


signaler à un administrateur
Commentaire de tanty le 06/06/2007 01:08:47

bonjour,
je suis très heureuse de tomber sur ce bout de tutoriel qui sera peut être ma source de salut puisque je débute une fois de plus merci.

signaler à un administrateur
Commentaire de Kornebrume le 04/10/2007 10:03:29

Bonjour à tous,

ce tutoriel est parfait mais j'aurai aimé savoir comment changer le format d'un cellule.

Le but : avoir le format d'un numéro de téléphone en 0680..... et non pas en 680....., en gros que le 0 ne se fasse pas virer.

Merci à vous.

Bonne journée, Korne

signaler à un administrateur
Commentaire de us_30 le 04/10/2007 12:53:23

Bonjour,

Tu as plusieurs solutions possibles. La première en utilisant la fonction "FORMAT" de VB tu peux faire un masque avec 10 zéros. Pour exemple :

Sub es()
a = Format("6812121212", String$(10, "0"))
Debug.Print a
End Sub

qui renvoit : 068121212

=

Autre solution, en utilisant le formatage d'Excel, soit :

Sub Macro1()
    Range("A1").Select
    Selection.NumberFormat = "0#"" ""##"" ""##"" ""##"" ""##"
End Sub

Qui renvoit dans la cellule A1 : 06 12 12 12 12 (alors que tu rentres 612121212)
Probablement la meilleur solution, mais il est à noter que si tu fais un tableau pré-établi, tu peux définir ce format directement dans Excel, avec Cellule>format>telepehonique, sans passer par le VBA. C'est de la mise en forme de cellule tout simplement.

Amicalement,
Us.

signaler à un administrateur
Commentaire de Kornebrume le 05/10/2007 16:33:09

OK merci, hier j'ai trouvé çà (VB2005) : xlSheet.Columns("B").NumberFormat = "@"

Cela formate la cellule (dans mon exemple) en format texte.

Quelqu'un aurait une liste des formats avec les paramètres à passer (à l'instar du format texte et de @).

Merci à vous.

Bonne journée et bon week-end :)

Cordialement, Korne

signaler à un administrateur
Commentaire de us_30 le 06/10/2007 11:22:12

Hum... je pense que tu devrais étudier un peu plus ce que l'on écrit. Puis poser ce type de question dans le forum. Car si ma première réponse peut être considérer comme un petit complément à ce tuto, t'expliquer en long et en travers les formatages de cellule finira par polluer ces posts.

Pour information, ce tuto est consacré au VBA. Utiliser VB2005 ou autre est donc un peu à côté. L'utilisation de "xlSheet.", n'est pas un objet de VBA, mais un objet créé dans VB2005 pour faire référence à un objet d'Excel, permettant ainsi de "piloter" Excel à partir de VB2005. Par conséquent, ta ligne est équivalente à : Selection.Columns("B").NumberFormat = "@" en VBA. Utiliser l'enregistreur de MACRO, pour générer ce type de code !

Amicalement,
Us.

signaler à un administrateur
Commentaire de ToNYDEVIL le 30/10/2007 10:50:06

beaucoup de chose utile, pour quelqu'un qui debarque dans le monde du VBA, comme moi ^^
meme si j'y trouve une precieuse aide, il va falloir chercher encore, continuer comme sa

signaler à un administrateur
Commentaire de mimine10 le 06/11/2007 09:33:23

Bonjour,

je ne suis pas experte non plus, mais pour débuter ce tuto est intéressant..
Au passage si quelqu'un sait comment modifier le séparateur d'un fichier excel à son ouverture, ça m'intéresse..
Merci d'avance

signaler à un administrateur
Commentaire de FreddyONE73 le 24/11/2007 14:44:28

Pour ceux qui cherche à se placer sur la dernière ligne ou colonne, j'ai une manière plus efficace et rapide:
Essayer de le faire avec les raccourcis clavier :
Cela consiste à se placer sur la dernière cellule posible de la FEUILLE (ligne 65536 ou colonne IV(256))
La combinaison [Ctrl] + [flêche haut] ou [Ctrl] + [flêche gauche]
permet de se déplacer directement à la prochaine cellule non vide.....
ce qui donne :

Dim LigneLibre As Integer, ColonneLibre As Integer
    Range("A65536").Select
    Selection.End(xlUp).Select
    LigneLibre = Selection.Row + 1
    Range("IV1").Select
    Selection.End(xlToLeft).Select
    ColonneLibre = Selection.Column + 1
    MsgBox "Prochaine ligne : " & LigneLibre & Chr$(13) & "Prochaine colonne : " & ColonneLibre

signaler à un administrateur
Commentaire de mirmoleboss le 24/11/2007 14:48:15

moi comme ca
Public Function DerniereLignePleine(Colonne As Integer) As Long

    DerniereLignePleine = Columns(Colonne).Find("*", Range("A1"), , , xlByRows, xlPrevious).Row

End Function

signaler à un administrateur
Commentaire de FreddyONE73 le 24/11/2007 14:53:48

Ce qui donne en plus propre (comme le suggère us_30) :

Dim LigneLibre As Integer, ColonneLibre As Integer
    LigneLibre = Range("A65536").End(xlUp).Row + 1
    ColonneLibre = Range("IV1").End(xlToLeft).Column + 1
    MsgBox "Prochaine ligne : " & LigneLibre & Chr$(13) & "Prochaine colonne : " & ColonneLibre

notez que la cellule qui était sélectionnée rest la même

signaler à un administrateur
Commentaire de FreddyONE73 le 24/11/2007 14:58:42

Oups, utiliser plutot le type Long pour les lignes :
Dim LigneLibre As Long

Désolé

(il n'y a pas un moyen de modifier nos commentaires ?

signaler à un administrateur
Commentaire de petitmoustique le 02/12/2007 11:28:24

Je te mets 9/10 car ce tuto est bien  mais il peut etre amélioré

signaler à un administrateur
Commentaire de dante20007 le 08/07/2008 10:31:02

bonjour,
comment fait on pour enregistrer avec une macro excel un email en tant que brouillon outlook?

signaler à un administrateur
Commentaire de beuzzz59 le 10/03/2009 10:20:58

Bonjour,
Je suis nouveau dans la programmation VB et j'aimerais selectionné la derniere ligne libre afin d'y coller une ligne existante.

Merci d'avance

signaler à un administrateur
Commentaire de lmaoui le 25/05/2009 17:58:10

j ss besoin de votre aides en vba j'ai une application et j n sé po comment la crée

signaler à un administrateur
Commentaire de MAGICIENMATT le 09/06/2009 08:56:13

Bonjour, j'ai une application ou je suis bloqué, Je doit envoyer dans une cellule de fauille excel une ligne de titre, pour ca c'est ok mais il faut que celle ci je la transforme en liens hypertexte si quelqu'un peut m'aider

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,078 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.