un compteur en B5 Sub Compteur1() For cpt = 1 To 200 Range("B5
Transcription
un compteur en B5 Sub Compteur1() For cpt = 1 To 200 Range("B5
un compteur en B5 Sub Compteur1() For cpt = 1 To 200 Range("B5").Formula = cpt Next End Sub Ajouter une valeur Ajouter 20 aux valeurs de la colonne D dans la colonne H pour les 40 premières cellules Sub AjoutVAl() Dim MaValeur, nbcell For nbcell = 1 To 40 Range("D" & nbcell).Select MaValeur = ActiveCell.Value Range("H" & nbcell).Select ActiveCell.Value = MaValeur + 20 Next End Sub Incrémente un compteur Sub Total() For i = 2 To 10 Step 2 Next i MsgBox "Le total est de " & i End Sub Compte les valeurs identiques Sub ValeursIdentiques() cpt = 0 Set plageCherche = Application.InputBox( Prompt:="Sélectionner la plage de recherche", Type:=8) ValCherchée = Application.InputBox( Prompt:="Quelle valeur cherchez-vous?", Type:=1) For Each Item In plageCherche If Item.Value = ValCherchée Then cpt = cpt + 1 Next Item MsgBox "Il y a " & CStr(cpt) & " valeurs identiques" End Sub Compte le nombre de cellules vides de la sélection. Sub CountCellvide() numBlanks = 0 For Each c In Selection If c.Value = "" Then numBlanks = numBlanks + 1 End If Next c MsgBox "Il y a " & numBlanks & " cellules vides dans cette plage." End Sub Boucle pour parcourir une plage de cellules 'Utilise une boucle For Each...Next pour parcourir toutes les cellules d'une plage. 'Arrondi à zéro tout nombre dont la valeur absolue est inférieure à 0,05. Sub Zero() For Each Cellule In Range("A1:B10") If Abs(Cellule.Value) < 0.05 Then Cellule.Value = 0 End If Next End Sub Affecte une largeur de 15 points à une colonne sur deux de la sélection sur la Feuil1. Sub LargeurColonne() For Each col In Selection.Columns If col.Column Mod 2 = 0 Then col.ColumnWidth = 15 End If Next col End Sub Et pour une ligne (Toutes les 6 lignes): Sub Ligne() Range("D1:D20").Select 'Exemple de sélection possible For Each col In Selection.Rows If col.Row Mod 6 = 0 Then col.RowHeight = 5 End If Next col End Sub Cherche une valeur non numérique Sub Test() 'Dès qu'une valeur non numérique est trouvée, 'un message s'affiche et sort de la boucle. For Each Cellule In Range("A1:B5") If IsNumeric(Cellule.Value) = False Then MsgBox "La plage contient une valeur non numérique." Exit For End If Next End Sub Modifie la valeur des cellules d'une plage nommée "MaPlage" Sub Modifie() Dim MaCellule As Object For Each MaCellule In Range("MaPlage") If MaCellule > 50 Then MaCellule.Value = 1000 End If Next MaCellule End Sub Déplace la cellule active d'une ligne vers le bas et deux colonnes vers la droite Sub DéplaceCellActive() Dim LigVar, ColVar LigVar = 1 ColVar = 2 Selection.Offset(LigVar, ColVar).Select End Sub Sélectionne la cellule F1 et "scroll" l'écran Sub SelectCell() Application.GoTo Reference:=ActiveSheet.Range("F1"), Scroll:=True End Sub Ajuste la colonne Sub ajuste_colonne() Selection.Columns.AutoFit End Sub Redéfini la sélection à partir d'une plage nommée MySelect Sub Redefini_Selection() Range("MySelect").Resize(rowsize:=1, columnsize:=5).Select End Sub Sélectionne toute la ligne à partir d'une plage nommée MySelect Sub SelectionLigne() Range("MySelect").EntireRow.Select End Sub Sélectionne la zone courante et 1 colonne de plus - 2 méthodes Sub SelectionZone_1ere() With Range("A1").CurrentRegion Union(.Cells, .Offset(0, 1)).Select End With End Sub Sub SelectionZone_2eme() With Range("A1").CurrentRegion .Resize(, .Columns.Count + 1).Select End With End Sub Supprime les lignes vides d'un tableau Sub DétruireLigne() derniereLigne = ActiveSheet.UsedRange.Rows.Count Application.ScreenUpdating = False For r = derniereLigne To 1 Step -1 If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete Next r End Sub Supprime les lignes vides d'un tableau si la colonne C est vide Sub DétruireLignesiC() derniereLigne = ActiveSheet.UsedRange.Rows.Count Application.ScreenUpdating = False For r = derniereLigne To 1 Step -1 If IsEmpty(Range("C" & r)) Then Rows(r).Delete Next r End Sub Sub DeletesiCvide2() 'plus rapide With Range("C1", Range("A65000").End(xlUp)). _ SpecialCells(xlCellTypeBlanks).EntireRow. Delete End With End Sub Efface la ligne de la cellule active de valeur 0 d'une plage de cellule Sub EffaceLigneVide() Range("D2").Select 'Sélection de la cellule de départ avec décalage sur les lignes(Offset(1,0)) Do Until ActiveCell = "" If ActiveCell = 0 Then Selection.EntireRow.Clear End If ActiveCell.Offset(1,0).Range("A1").Select Loop Range("A1").Select End Sub Recherche une valeur, sélectionne la ligne de la valeur trouvée et supprime cette ligne avec message de confirmation Sub SupLigValeur() Dim Var Dim NumLg On Error Resume Next Var = InputBox(Prompt:="Taper la valeur recherchée. ") Cells.Find(What:=(Var), After:=ActiveCell,LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder _ :=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate With Application.ActiveCell NumLg = .Row End With ActiveCell.EntireRow.Select Style = vbYesNo + vbDefaultButton1 Msg = "Suppression de la ligne N°: " & NumLg Title = "Attention suppression de la ligne." Réponse = MsgBox(Msg, Style, Title) If Réponse = vbYes Then Selection.Delete Shift:=xlUp Else Exit Sub End If End Sub Recherche un mot, sélectionne la ligne de la valeur trouvée et supprime cette ligne avec message de confirmation Sub RechercheMot() Dim Var As String On Error Resume Next Var = InputBox("Mot à rechercher ?", , "zzzz") 'pour ne rien supprimer en cas d' ECHAP ou D'ANNULER If Var = "" Then Exit Sub Set MotTrouvé = Cells.Find(What:=Var) If Not MotTrouvé Is Nothing Then MotTrouvé.Select 'confirmation de suppression Style = vbYesNo + vbDefaultButton1 Msg = "Suppression de la ligne" Title = "Attention suppression de la ligne." Réponse = MsgBox(Msg, Style, Title) If Réponse = vbYes Then ActiveCell.EntireRow.Select Selection.Delete Shift:=xlUp End If Else MsgBox "Rien trouvé" Exit Sub End If [A1].Select End Sub Teste si les cellules de la plage sont vides ou non vides et entre la formule indiquée dans la première cellule vide testée. Sub Parcourir() Range("A1:A20").Activate En_Colonne = ActiveCell.Column En_Ligne = ActiveCell.Row + 1 While Not IsEmpty(ActiveCell.Value) Cells(En_Ligne, En_Colonne).Activate En_Ligne = En_Ligne + 1 Wend With ActiveCell ActiveCell.FormulaR1C1 = "Premiere cellule vide" Range("A11").Select End With End Sub Compare les valeurs de 2 plages de cellules(Votant et Resultat) Sub TestRésultat() Dim CellPtr Dim X Dim Z Worksheets("Résultats").Select Set X = Range("Votant") Set Z = Range("Résultat") Z.Select Selection.Interior.ColorIndex = xlNone For CellPtr = 1 To X.Count If X(CellPtr) = Z(CellPtr) Then Z(CellPtr).Select With Selection.Interior .ColorIndex = 15 .Pattern = xlSolid End With End If Next CellPtr Z.Select If Selection.Interior.ColorIndex = 15 Then MsgBox Prompt:="La plage Votant et la plage Résultat sont identiques. Il n'y a pas d'erreur." Range("A1").Select Else Msg = " Vous devez corriger l'erreur ! " Style = vbCritical Title = " <<< Erreur trouvée >>>" Réponse = MsgBox(Msg, Style, Title, Help, Context) If Réponse = vbYes Then Z.Select End If End If End Sub Colore en gris toutes les cellules dont les valeurs sont <30 de la plage E2:E65 Sub StockInf50() For Each Cell In Range("E2:E65") If Cell.Value < 30 Then Cell.Select With Selection.Interior .ColorIndex = 15 .Pattern = xlSolid End With End If Next End Sub Mets en majuscule la première lettre de la phrase de la sélection Sub 1ereLettremajuscule() phrase = Selection.Value phrase = UCase(Left(phrase, 1)) + Right(phrase, Len(phrase) - 1) Selection.Value = phrase End Sub Mets en majuscule toute la phrase de la sélection Sub MinusculeMajuscule() Dim MotsCellule As String MotsCellule = Selection.Value MotsCellule = UCase(MotsCellule) Selection.Value = MotsCellule End Sub Mets en minuscule toute la phrase de la sélection Sub MajusculeMinuscule() Selection = Evaluate("transpose(lower(transpose(" & Selection.Address & ")))") End Sub Fait la somme des chiffres écrits en rouge de la sélection Sub sommeCouleurRougeText() Dim Cellule As Range Dim total As Variant For Each Cellule In Selection If Cellule.Font.ColorIndex = 1 Then '3 rouge et 1 pour le noir If Cellule.Interior.ColorIndex = 3 Then (pour la couleur de fond) If IsNumeric(Cellule) Then total = total + Cellule.Value End If Next MsgBox total Range("G12") = total End Sub Compte le nombre de cellules colorées en rouge de la sélection Sub NombredeCellRouge() Dim Cellule As Range Dim total As Variant For Each Cellule In Selection If Cellule.Interior.ColorIndex = 3 Then 'rouge total = total + Cellule.Count End If Next MsgBox "Il y a " & total & " Cellules rouges" Range("A1") = total End Sub Personnalise les couleurs de la sélection suivant les valeurs RGB Sub CouleurRGB() Range("a1").Interior.Color = RGB(0, 0, 0) Range("a2").Interior.Color = RGB(255, 0, 0) End Sub Cherche si la sélection contient une formule Sub ChercheFormule() 'Dès qu'une formule est trouvée, 'un message s'affiche et sort de la boucle. For Each Cellule In Range("A1:B5") If Left(Cellule.Formula, 1) = "=" Then MsgBox "La plage contient une formule." Exit For End If Next End Sub Trie les lignes et supprime les doublons. Sub tridoublon() Worksheets("Feuil1").Range("A1").Sort _ key1:=Worksheets("Feuil1").Range("A2"), _ Order1:=xlAscending, Header:=xlGuess Set MaCell = Worksheets("Feuil1").Range("A1") Do While Not IsEmpty(MaCell) Set MaCellSuite = MaCell.Offset(1, 0) If MaCellSuite.Value = MaCell.Value Then MaCell.EntireRow.Delete End If Set MaCell = MaCellSuite Loop End Sub Ecrit les jours de la semaine (Sélectionner une cellule) Sub JourSemaine() Dim semaine(1 To 7) As String semaine(1) = "Lundi" semaine(2) = "Mardi" semaine(3) = "Mercredi" semaine(4) = "Jeudi" semaine(5) = "Vendredi" semaine(6) = "Samedi" semaine(7) = "Dimanche" For i = 1 To 7 Selection.Offset(i - 1, 0).Formula = semaine(i) Next i End Sub Crée un tableau Année Trimestre (Sélectionner une cellule) Sub TableauAnTrimestre() For An = 1 To 5 Cells(1, An + 1).Value = 2000 + An Next An For Trimestre = 1 To 4 Cells(Trimestre + 1, 1).Value = "Trim" & Trimestre Next Trimestre End Sub Ajoute la chaîne de caractères "Terminé" à la fin du texte de la cellule Sub InserTermineDansCellule() Cells(1, 1).Select With Selection .Characters(.Characters.Count + 1).Insert (" terminé") End With End Sub Associe 2 plages en un seul objet avec la méthode UNION Sub UniondePlage() Dim plg1, plg2, ToutePlage As Range Set plg1 = Sheets("Feuil1").Range("A1:A10") Set plg2 = Sheets("Feuil1").Range("B10:B20") Set ToutePlage = Union(plg1, plg2) ToutePlage.Interior.ColorIndex = 5 End Sub Rempli l'union de deux plages avec la valeur 100 Sub RempliUnion() Worksheets("Feuil1").Activate Set MaPlage = Application.Union(Range("A1:D10"), Range("F1:H12")) MaPlage.Value = 100 End Sub Sélectionne la cellule A154 de la Feuil1 et "Scroll" l'écran Sub AllerA() Application.Goto Reference:=Worksheets("Feuil1").Range(" A154"), Scroll:=True End Sub Donne le numéro de ligne de la valeur cherchée Sub NumeroDeLigne() NumeroLigne = Cells.Find("100").Row MsgBox NumeroLigne End Sub Donne le nombre de lignes de la sélection Sub NombreDeLigne() With Selection MsgBox Selection.Rows.Count End With End Sub Cette macro affiche la formule écrite en A1 en A2 Il faut savoir que: Pour afficher une formule il faut entrer un espace ou une apostrophe (') devant la formule. Cette macro affiche la formule A1 en A2 Sub AfficheFormule() Range("A1").Select Selection.Copy Range("A2").Select Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:= False, Transpose:=False Application.SendKeys "{f2}" For I = 1 To 10 Application.SendKeys "{gauche}" Next I Application.SendKeys "{droite}" 'inscrit un espace devant la formuleApplication.SendKeys "{BS}" Application.SendKeys "{ENTREE}" End Sub Affiche et sélectionne la référence d'une sélection Sub BoiteSelectionZone() Dim Var As Object On Error Resume Next Set Var = Application.InputBox(Prompt:="Sélectionn er votre zone: (Ex. A1:B10) ", _ Title:="Sélection de zone ", Default:="$A$1", Type:=8) On Error GoTo 0 If Not (TypeName(Var) = "Rien") Then MsgBox Var.Address Var.Select End If Set Var = Nothing End Sub Donne le numéro de ligne aussi que la lettre de la colonne de la cellule active Sub ColLigne() Colonne = Left$(ActiveCell.Address(0, 0), (ActiveCell.Column < 27) + 2) Ligne = ActiveCell.Row MsgBox Colonne & Ligne MsgBox Colonne MsgBox Ligne End Sub Formate la plage A1:A10 avec une procédure événementielle. (1 er - 2, 3, 4 etc...ème ) Mode d'emploi: Dans l'éditeur VB double-cliquez sur la feuille désirée et coller tout le code suivant dans la partie droite. Modifiez la plage si besoin ici ---Intersect(Target, Range("A1:A10"))---A chaque modification des cellules de la plage (A1:A10) le format est mis automatiquement. Private Sub Worksheet_Change(ByVal Target As Range) Dim Plage As Range Set Plage = Intersect(Target, Range("A1:A10")) If Plage Is Nothing Then Exit Sub For Each cellule In Plage If cellule.Value = 1 Then cellule.NumberFormat = "General"" er""" Else: cellule.NumberFormat = "General"" ème""" End If Next End Sub D'autres procédures événementielles. Pour la feuil1 Private Sub Worksheet_Activate() MsgBox "La Feuil1 est activée" End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox "DoubleClick effectué" End Sub Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) MsgBox "Click droit effectué" End Sub Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "La valeur a changée" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox "La sélection a changé" End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox "DoubleClick interdit!" Cancel = True End Sub Cherche un mot. Sub SearchText() Dim SearchString, SearchChar, MyPos SearchChar = "salut" For Each cell In Range("A1:A11") SearchString = cell.Text MyPos = InStr(SearchString, SearchChar) If MyPos > 0 Then MsgBox ("Mot trouvé") MsgBox "Mot trouvé à cette adresse: " & cell.Address cell(1, 2).Value = "(salut) est sur cette ligne" End If Next End Sub Comment récupérer la valeur d'une cellule, y faire une opération et renvoyer le résultat dans une autre ? Sub RecupValeur() Dim Val1 'Dim Resultat As Integer (pour un résultat en entier) Val1 = Sheets("Feuil1").[a1].Value Resultat = Val1 * 10 Sheets("Feuil1").[a2].Value = (Resultat) MsgBox "Opération effectuée." & Chr(13) & Chr(13) _ & "Résultat :" & CStr(Resultat) End Sub Comment récupérer les valeurs d'une plage, y faire une opération et renvoyer le résultat dans une autre ? Copie la plage A1:A15, ajoute 1 et colle dans la plage C1:C15 Sub CopiUnePlagedeValeur() Dim MaValeur, compteur For compteur = 1 To 15 Range("A" & compteur).Select MaValeur = ActiveCell.Value Range("C" & compteur).Select ActiveCell.Value = MaValeur + 1 Next End Sub Comment exécuter une macro si une cellule de la colonne A est sélectionnée? Sub test_A() Colonne = Left$(ActiveCell.Address(0, 0), (ActiveCell.Column < 27) + 2) If Colonne = "A" Then MsgBox "Je lance la macro ici" Else MsgBox Colonne End If End Sub Comment faire la somme des valeurs positives d'une plage contenant des valeurs négatives? Somme des valeurs positives. 'avec somme.si: '=SOMME.SI(A1:A10;">0") 'Avec une fonction matricielle: (CTRL MAJ ENTREE) '{=SOMME(A1:A10*(A1:A10>0))} Sub SommePositive() For Each Cell In Range("A1:A10") If Cell.Value > 0 Then total = total + Cell End If Next MsgBox "Total des valeurs positives " & total Range("A11") = total End Sub Somme des valeurs négatives. 'avec somme.si: '=SOMME.SI(A1:A10;"<0") 'Avec une fonction matricielle: (CTRL MAJ ENTREE) ' {=SOMME(A1:A10*(A1:A10<0))} Sub SommeNégative() For Each Cell In Range("A1:A10") If Cell.Value < 0 Then total = total + Cell End If Next MsgBox "Total des valeurs négatives " & total Range("A11") = total End Sub Comment envoyer la valeur de la cellule A1 dans un fichier texte ? Sub a1txt() Var = [A1] FichierTXT = "C:\ajeter\aentxt.txt" 'à modifier If Len(Dir(FichierTXT)) > 1 Then Kill FichierTXT Open FichierTXT For Output As 1 Print #1, Var Close End Sub Comment appliquer un pourcentage aux valeurs d'une plage? Sub pourcentage() Dim mycell, myvaleur, pourcent pourcent = InputBox("Quel pourcentage appliquer?") If IsNumeric(pourcent) Then For Each mycell In Application.Selection.Cells myvaleur = mycell.Value If IsNumeric(myvaleur) Then 'teste si la cellule n'est pas vide ou contient une formule If Not (IsEmpty(myvaleur) Or mycell.HasFormula) Then mycell.Value = myvaleur * (pourcent / 100 + 1) End If End If Next mycell End If End Sub Comment rendre impossible le défilement en dehors d'une zone définie ? Sub Nodefil() Feuil1.ScrollArea = "B4:H23" End Sub Sub Okdefil() ' pour libérer le défilement Feuil1.ScrollArea = "" End Sub Compte les cellules vides d'une sélection Sub CompteLesVides() Vide = 0 For Each Cellule In Selection.Cells If IsEmpty(Cellule) Then Vide = Vide + 1 Next MsgBox "Il y a " & Vide & " cellules vides dans la sélection" End Sub Et comment compter les non vides ? Il suffit d’ajouter l’opérateur Not de négation devant IsEmpty. Sub CompteLesNonVides() NonVide = 0 For Each Cellule In Selection.Cells If Not IsEmpty(Cellule) Then NonVide = NonVide + 1 Next MsgBox "Il y a " & NonVide & " cellules non vides dans la sélection" End Sub Comment convertir du texte en chiffre? Sub TexteEnChiffre() Dim maZone As Range Set maZone = Range("A1:" & Range("A100").End(xlUp).Address) 'Définit plage maZone.Select Dim unecellule As Object For Each unecellule In Selection valeur = ActiveCell.Value If valeur = "" Then 'Saute cellules vides GoTo suite End If valnum = CDbl(valeur) 'convertit texte en chiffre unecellule.Value = valnum suite: ActiveCell.Offset(1, 0).Select Next End Sub Nomme la feuille active avec la valeur de la plage A2 Sub NomOnglet() Dim Name As String Name = Range("A2") Application.ScreenUpdating = False ActiveSheet.Name = (Name) End Sub Pour toutes les feuilles For i = 1 To Sheets.Count With Sheets(i) .Select .Name = [A2] End With Next i Associoation d’un code VB à une Macro EXCEL Crée un nouveau classeur Et tape ces données Installe la barre d'Outils "Visual Basic" Click droit sur les barres d'outils et coche Visual Basic Clique sur le bouton avec un point: "Enregistrer une macro" La boîte de dialogue "Enregistrer une macro" s'affiche. Tu peux donner un nom plus explicite à ta macro, Y affecter une touche de raccourci, Enregistrer la macro dans un nouveau classeur etc... Et donner une description à ta macro! Clique sur OK ATTENTION !!! L'enregistrement de la macro commence! Tout ce que sera fait maintenant sera enregistré ! Sélectionne les données du petit tableau ici: Les cellules A1 à C3 Ensuite: Insertion et Graphique Crée ton graphique et arrête l'enregistrement en appuyant sur le bouton avec un carré Le graphique est fait et la macro aussi !!! Clique sur le bouton : "Visual Basic Editor" Et tu peux visualiser ta macro. Comment créer un bouton, comment renommer la macro? Comment créer un bouton? Click droit sur les barres d'outils et tout en bas clique sur "Personnaliser..." Dans l'onglet "Commande" sélectionne "Formulaires" dans la liste déroulante "Catégories" Puis dans la liste "Commandes" clique sur "Bouton" et place le sur une barre d'outils. (en restant appuyer sur le bouton de la souris) Referme la boîte de dialogue Maintenant clique sur ce bouton, une petite croix apparait: direction la feuille de calcul et trace ton bouton de commande Sélectionne Macro1 (C'est le nom par défaut de la macro précédement créée) et OK La macro est alors affectée au bouton Un simple clique sur ce bouton et le graphique sera automatiquement créé. Un clique droit sur le bouton et tu peux ainsi modifier son texte, sa police etc... Comment renommer un module et une macro? Clique sur le bouton : "Visual Basic Editor" Pour renommer un module Dans l'Editeur VB, fenêtre "Projet-VBA Project" clique sur le "+" (de VBAProject(Classeur1) devant Modules et clique sur Module1 Ensuite Fenêtre "Propriétés-Module1" Onglet "Alphabétique" il est inscrit: (Name)Module1 Efface Module1 et tape le nom désiré. Pour renommer la macro Efface simplement l'ancien nom (ex:Sub macro1() compris entre SUB et les parenthèses () et retape un nom plus "parlant" N'oubliez pas de réaffecter la macro avec son nouveau nom au bouton !