Actions Sur Cellules, Lignes, Commentaires - Free
Maybe your like
Avant cela, je vous donne pêle-mêle des pistes pour des problèmes qui reviennent souvent !
'Connaître la valeur d'une cellule : msgbox range("A1").text ou msgbox range("A1").value ou encore msgbox [A1], qui est un raccourci syntaxique 'Adresse d'une cellule : msgbox range("A1").address ou msgbox range("A1").address(0,0) 'Sélectionner la dernière cellule : ici 'Savoir si elle contient une formule : existence.htm 'En savoir plus sur la définition de nom : xl_nom.htm 'Faire clignoter une cellule : xl_format.htm 'En savoir plus sur les liaisons : xl_liaison.htm
'Valeur d'une cellule dans un fichier fermé :
news , astuce issue de cette page : web, ou encore MsgBox ExecuteExcel4Macro("'[NomduClasseur.xls]nomdelafeuille'!R1C5") (référence relative R1=ligne1, C5=colonne 5)
d'autres méthodes et des solutions plus abouties là le site de Fréd un classeur exemple d'une autre méthode ici : http://disciplus.simplex.free.fr
'Afficher les formules : Ctrl 3 ou Menu Outils>Options>Onglet Général> Case à cocher Formules 'Afficher une formule : mettre un apostrophe devant le signe =, ou encore utiliser une fonction personnalisée
Function FORMUL(cel As Range) FORMUL = cel.FormulaLocal End Function Et dans la feuille de calcul : ==FORMUL(A1)
'Appliquer une opération (multiplication, division, etc) à toute une plage de cellule : edition.html
'Fusionner deux cellules :
dans la cellule A3, inscrivez la formule suivante =A2 & " " &A3 (un espace sépare les deux valeurs) exemple par VBA en agissant sur la cellule active et sa voisine Sub MergeCells() Dim myStr As String myStr = activecell.Value & " " & activecell.offset(0, 1).Value activecell.Value = myStr activecell.offset(0, 1).ClearContents End Sub
Méthodes de sélection classiques
Vous débutez sur Excel ? Il existe un ou deux sites montrant à l'aide d'images animées comment se servir des menus et de la souris pour effectuer certaines opérations de copie, sélection et suppression, par exemple le site www.polykromy.com. Ces opérations sont possibles à travers les menus d'Excel. Chaque menu d'Excel a une page sur mon site, vous retrouverez donc ces commandes notamment dans les pages suivantes : edition.html et insertion.html ou encore xl_format.htm. Bien évidemment, ces opérations sont possibles par le biais du langage VBA, et vous trouverez comment ci-dessous.
Si vous cherchez comment vous référrer à une cellule au sein d'une formule, voyez la page xl_fonction.htm où figure quelques explications sur DECALER, INDIRECT, ADRESSE, INDEX, EQUIV.
Méthodes de sélection VBA simplesf
Sélectionner une cellule de la feuille activeSélectionner une plage de cellulesapplication.goto reference:=range("D5") range("D5").select cells(5,"D").select cells(5,5).select
Sélectionner une plage de cellules nomméeapplication.goto reference:=range("A1:A5") range("A1:A5").select range(cells(1,2),cells(5,3)).select
Sélectionner une plage de cellules d'une feuille donnéeapplication.goto reference:=range("maplage") range("nomplage").select
Sélectionner une plage avec ligne variablesheets("Feuil2").range("B4:D10").select 'on se réferre à la feuille par le nom que son onglet feuil2.range("B4:D10").select 'appel 'on se réferre à la feuille par le nom de son objet dans le projet Visual Basic.
Sélectionner une plage de cellules variablesrange("B" & x & ":AZ" & x).select 'sélectionne les cellules Bx:AZx
Sélectionner la 34 ième cellule d'une plage'on utilise des variables pour stocker la ligne et la colonne des cellules de départ et d'arrivée 'ainsi voilà ce qu'il faut écrire pour sélectionner la plage A1:E5 à l'aide de variables iStartRow=1 : iStartCol=1 iendRow=5 : iendCol=5 range(cells(iStartRow, iStartCol),cells(iendRow, iendCol)).select
Sélectionner la 3 ième cellule d'une plagerange("A1:A76").Item(34).select ou range("A1:A76")(34).select range("A1:A76")(34).select est un raccourci syntaxique de la procédure Item, qui est l'accesseur par défaut de l'objet range. Item n'est pas vraiment équivalent dans son fonctionnement à la méthode offset (regarder la page d'aide dédiée à cette propriété). En général, il vaut mieux utiliser Item plutôt qu'offset, car l'emploi de cette propriété donne lieu à un code beaucoup plus rapide à l'exécution.
Sélectionner la dernière cellule d'une colonne'comparez le résultat de ces deux instructions : range("B7:B15")(3).Select 'puis, range("B7:C15")(3).Select
Sélectionner une ligneLastRow = range("A65536").end(xlUp).Row 'voir aussi sélections spéciales
Sélectionner plusieurs lignesrows(6).select application.goto feuil1.rows(6)
Sélectionner une plage de cellules d'une autre feuillerows("1:50").select
sheets("feuil2").activate : range("feuil2!a1").Select 'la feuille doit être d'abord activée/sélectionnée
Sélectionner la première cellule de la première ligne non masquée qui suit la ligne de la cellule active Range(activecell.offset(1,0),activecell.End(xlDown)).SpecialCells(xlCellTypeVisible).Item(1).Select
Sélectionner la première cellule de la première colonne non masquée qui suit la colonne de la cellule active Range(activecell.offset(0, 1),activecell.End(xlToRight)).SpecialCells(xlCellTypeVisible).Item(1).Select
=> par extension, en utilisant entirerow et entirecolumn (après Item(1)), vous pouvez sélectionner la ligne entière.Le bloc d'instructions qui suit montre comment se positionner sur la première cellule visible
do while activecell.offset(1, 0).entirerow.hidden = true activecell.offset(1, 0).select loop activecell.offset(1, 0).select
Autre exemple de sélection
Sub ZAZAfaitcompliquéaulieudefairesimple() set LeftCell = Cells(activecell.Row, 1) set RightCell = Cells(activecell.Row, 256) If IsEmpty(LeftCell) Then set LeftCell = LeftCell.End(xlToRight) If IsEmpty(RightCell) Then set RightCell = RightCell.End(xlToLeft) If LeftCell.Column = 256 And RightCell.Column = 1 Then activecell.Select Else Range(LeftCell, RightCell).Select End Sub
Méthode OFFSET & VBA range("A1").select : activecell.offset(ligne, colonne).select activecell.offset( 3, 4).select activecell.offset(-2,-1).select selection.offset(0,1).select range("A1").offset(0,1).select => myVal = range("A1").offset(0,1).value
Information complémentaire sur Méthode Select
elle permet de faire une sélection multiple des objets graphiques (dessins, boutons de la barre de formulaire) grâce à l'argument replace. Exemple avec deux zones de texte : activesheet.shapes("Zone de Texte 1").select:activesheet.shapes("Zone de Texte 2").select replace:=false
Différence entre select & activate : news
Explication sur les manipulations de plage de cellules et l'objet ITEM : news
Méthodes de sélection spéciale
Les plages "systèmes"
la Zone UsedRange
c'est une des zones de cellules qu'Excel manipule. Elle couvre la plage de cellules d'une feuille qui englobe la dernière cellule la plus lointaine jamais modifiée sur cette feuille dans la session ouverte d'Excel (avant sauvegarde d'un fichier).
d'après cette définition, vous avez dû réaliser qu'Excel ne vous retourne pas la dernière cellule pleine, lorsque vous lui demandez par exemple de sélectionner la dernière cellule via la commande Atteindre du menu Edition (puis bouton "Cellules"). vous trouverez ci-après quelques autres informations sur cette zone et des informations sur comment la réinitialiser et déterminer la zone allant jusqu'à la dernière cellule pleine.
Afficher l'adresse de la zone UsedRange
msgbox worksheets("feuil2").usedrange.address msgbox activesheet.usedrange.address
Sélectionner la zone UsedRange
Activesheet.usedrange.select
Article sur UsedRange : web
Réinitialiser la zone UsedRange
Normalement, elle se réinitialise à chaque sauvegarde Pour la réinitialiser sans sauvegarde, l'instruction suivante doit suffire : activesheet.usedrange Si ce n'est pas le cas, utiliser le code fourni ci-contre : news
Sélection de la dernière cellule
'la première macro ci-dessous permet de sélectionner la véritable dernière cellule de la feuille Sub Last_of_Cells() Dim rg_plage As Range LastL = Cells.Find("*", [A1], , , , xlPrevious).Row LastC = Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column Cells(LastL, LastC).Select End Sub
'cette seconde applique le même principe à une plage donnée Sub Last_of_Range() Dim rg_plage As Range set rg_plage = Range("A15:B40") With rg_plage 'ou encore : with Range("A15:B40") LastL = .Find("*", .Item(1), , , xlByRows, xlPrevious).Row LastC = .Find("*", .Item(1), , , xlByColumns, xlPrevious).Column End With Cells(LastL, LastC).Select End Sub ci-contre deux messages issus de la même conversation, la gestion de cette problématique dans le second message est très intéressante : news, news
La zone adjacente ou région courante
Son nom d'objet VBA est CurrentRegion, c'est un objet plage de cellules.
Manuellement, vous pouvez sélectionner la région adjacente à une cellule active ou à une plage de cellules sélectionnée à l'aide du raccourci Ctrl * ou bien à l'aide de la commande Atteindre du menu Edition
Sélection en VBA
activecell.currentregion.select selection.currentregion.select
Les sélections de cellules particulières ou spéciales
Informations générales ci-contre, page du menu Edition
Sélection de cellules contenant des formules : activesheet.usedrange.specialcells(xlcelltypeformulas).select Sélection de cellules contenant des formules : activesheet.cells.specialcells(xlcelltypeformulas).select Sélection de cellules contenant des constantes : activesheet.cells.specialcells(xlcelltypeconstants, 23).select Sélection de cellules contenant des commentaires : activesheet.cells.specialcells(xlcelltypeComments).select Sélection de cellules contenants des annotations : activesheet.cells.specialcells(xlcelltypeNotes).select Sélection de cellules vides : activesheet.cells.specialcells(xlcelltypeBlanks).select Sélection de la dernière cellule : activesheet.cells.specialcells(xlcelltypeLastcell).select Sélection des cellules visibles : activesheet.cells.specialcells(xlcelltypeVisible).select Sélection des cellules conditionnellement formatées : activesheet.cells.specialcells(xlcelltypeAllformatconditions).select Sélection de cellules au contenu non vide : union(selection.SpecialCells(xlCellTypeFormulas), selection.SpecialCells(xlCellTypeConstants, 23)).Select Les types xlcelltypeconstants et xlcelltypeformulas peuvent avoir un argument value permettant de déterminer les types de cellules à inclure dans le résultat. L'argument value peut être l'une des constantes Xlspecialcellsvalues suivantes : xlErrors, xlLogical, xlNumbers, xlTextvalues, xlAllformatconditions ou xlSameformatconditions.
Sélectionner les précédents directs d'une sélection : selection.directprecedents.select Sélectionner les précédents : selection.precedents.select Sélectionner les dépendents : selection.dependents.select Sélectionner les valeurs différentes : selection.columndifferences(activecell).select
La procédure suivante boucle sur les constantes de la colonne 3 et colorie les cellules paires
Sub Boldcells() set rng = Columns(3).Specialcells(xlConstants): i = 1 for each cell In rng if i Mod 2 = 0 then cell.Font.Bold = true 'contrôle de la parité & coloration de la cellule i = i + 1 next end sub
Union & Intersection de plages
L'union de plage est possible manuellement, il suffit de cliquer sur les plages de cellules désirées tout en maintenant la touche CTRL enfoncée. L'intersection n'est pas possible manuellement à ma connaissance (à moins qu'il y ait une solution à l'aide de formules & de définitions de plages nommées).
Sélectionner les cellules à l'intersection de deux plagesSélectionner les cellules à l'intersection de deux valeursun exemple : dim myrange As range : set myrange = intersect(range("B1:C30"), rows(11)) : myrange.select un autre : intersect([F:F,H:H], range("H6", [F6].End(xldown).EntireRow)).Select
Sélection multiple de cellules, ou autrement dit union de plusieurs plagesmsgbox Intersect(Rows("1:1").Find(What:="week 3").EntireColumn, Columns("A:A").Find(What:="27").EntireRow).Address 'par Eric J. (salut Eric !) le 25/11/1999 à 21h13 sur le groupe de discussion microsoft.public.excel.programming 'cette instruction cherche la chaîne "week 3" dans la ligne 1 de la feuille courante et le nombre 27 dans la colonne A, puis retourne l'adresse de la cellule à l'intersection de ces lignes et colonnes. 'penser à la gestion d'erreur au cas où la recherche n'aboutie pas
Exemple 1 With activecell Union(.Cells, .Item(1, 6), .Item(1, 8), .Item(1, 10)).Select End With Exemple 2 : sélection de cellules d'une couleur donnée dim rCell as range, rSelect as range :set rSelect=nothing for each rCell in activesheet.usedrange if rCell.font.bold=true or rCell.interior.color=rgb(255,0,0) then set rSelect=application.union(rSelect,rCell) next rCellExemple combinant Union & Intersect
Sub TryItNow() Dim b, d, myCell As Range set d = Union(Range("A1:B20"), Range("D1:D20")) ':d.select set myCell = Range(Range("C1").Value) set b = Intersect(myCell, d) If Not (b Is Nothing) Then MsgBox "In Union Range" Else: MsgBox "Not in Union Range" End If End Sub
Recherche de valeurs & sélections de plages
Sélection avec la méthode FINDSélectionner la première cellule de la colonne B contenant le mot "Zaza"Dim FoundCell As Range set FoundCell = Range("A1:A10").Find(what:="XXX") If Not FoundCell Is Nothing Then FoundCell.Select End If
Sélectionner la dernière cellule de la colonne B contenant le mot "Zaza"[B:B].Find("Zaza", Range("B1")([B:B].Count), xlValues, xlWhole, , xlNext, False).Select
Sélectionner une plage de cellule contenant une valeur particulière dans la colonne B Exemple : ne sélectionner que la plage contenant 2000 dans B:B si la colonne est triée (le 18/05/2000 par L.L sélection conditionnelle de plage)[B:B].Find("Zaza", [B1], xlValues, xlWhole, , xlPrevious, False).Select 'à combiner par exemple avec on error resume next, pour éviter qu'une erreur surgisse 'd'autres exemples d'emploi de la méthode FIND dans cette page et la page xl_aide.htm
Exemple 1with range(IIf([B1] = 2000, [B1], [B:B].find(2000, [B1])), "B65536") range(.Item(1), .ColumnDifferences(.Item(1))(0)).Select end with
Exemple 2
application.screenupdating = false with range("B1", range("B:B").find("*", [B1], , xlPrevious)) .autofilter 1, 2000 Intersect(.cells, .offset(1)).Specialcells(xlCellTypeVisible).Select .autofilter end with
Exemple 3
function Zone(Plage As range, Critère) As range On Error Resume Next with Plage.find("*", Plage(1), , , , xlPrevious) If Plage(1) = Critère Then set Zone = range(Plage(1), .cells) Else _ set Zone = range(Plage.find(Critère, Plage(1), , xlWhole), .cells) If .cells <> Critère Then set Zone = range(Zone.Item(1), _ Zone.ColumnDifferences(Zone.Item(1))(0)) end with end function 'msgbox Zone([A:A],2000).address:Zone([A:A],2000).Select 'retourne un objet plage/range qui correspond à la plage étendue contenant le critère
L'exemple ci-dessous boucle sur la plage sélectionnée, et regarde dans la formule s'il y a une string "vlook" (recherche)
Par C DeLand, sujet : Re: shade cells with specific formula, le vendredi 5 novembre 1999 20:14
Mettre en gras les cellules pairs de la colonne 3Option Compare Text Option Explicit Sub colorchange1()
dim s As String dim cell As range application.screenupdating = false with selection for each cell In selection s = cell.formula 'an external link if s Like "*vlook*" then cell.Interior.ColorIndex = 36 'formats interior as yellow color end if next cell end with application.screenupdating = true end Sub
Sub Boldcells() set rng = Columns(3).Specialcells(xlConstants): i = 1 for each cell In rng if i Mod 2 = 0 then cell.Font.Bold = true i = i + 1 next end sub
Autres problématiques de sélection de cellules
Rédéfinition ou redimensionnement d'une plage de cellules Méthode Resize pour redimensionner une zone
'exemple pour sélectionner zone adjacente à A1 sans la ligne de titre set Tableau = Range("A1").CurrentRegion Tableau(2, 1).Resize(Tableau.Rows.Count - 1, Tableau.Columns.Count).Select 'ou Range("A2", Range("A2").End(xlDown).End(xlToRight)).Select 'ou Intersect(Range("A1").CurrentRegion, Range("A1").CurrentRegion.Offset(1)).Select
Garder en mémoire la sélection actuelle pour y revenir plus tard, par Chip Pearson : limites.html#22
Désélection zones non adjacentes/ Deselecting cells in discontiguous range : news
Objet Range & Variable Range
Exemple de Laurent L., Objet: Re: Optimiser le passage des valeurs d'un tableau dans une plage Date : samedi 5 août 2000 03:42Connaître l'adresse d'une cellule contenue dans une variable rangeDim Tableau(1 To 50, 1 To 1) As Integer, I As Integer For I = 1 To 50: Tableau(I, 1) = I: Next I Range("A1:A50") = Tableau
Les tableaux affectés à des plages doivent suivre certaines règles :
- Ils doivent toujours comporter deux dimensions, à moins qu'ils soient destinés à remplir des plages d'une seule ligne de hauteur (par exemple, s'il s'agit de remplir la plage A1:J1, le tableau doit être déclaré par (1 To 10), sans deuxième dimension). - Ils doivent toujours être basés sur 1.
Connaître les valeurs d'une plage de cellule contenu dans une variableSub test 1 dim Array1 as Object dim Adr22 as String set Array1 = Range("A1:C4") Adr22 = Array1(2,2).Address end sub
Connaître les valeurs d'une plage à plusieurs colonnesSub test2() Dim rArray As Variant rArray = ActiveSheet.Range("A1:G1").Value For i = 1 To UBound(rArray, 2) MsgBox rArray(1, i) Next i End Sub
Sub tester1() Dim StationIDs As Variant StationIDs = Worksheets("feuil1").Range("A2:B10").Value For i = LBound(StationIDs, 1) To UBound(StationIDs, 1) For j = LBound(StationIDs, 2) To UBound(StationIDs, 2) MsgBox "StationIDs(" & i & ", " & j & ")= " & StationIDs(i, j) Next j Next i End Sub
Méthodes de copie & de collage La méthode VBA Copy s'applique à de nombreux éléments d'excel : ses feuilles, ses cellules, ses graphiques, ses boutons .... Excel vous offre :
les moyens de sélectionner rapidement les éléments que vous voulez copier. Voir : la partie Atteindre de la page edition.html ma page sur les raccourcis la partie sur les méthodes de sélection de cette page pour les syntaxes VBA différentes méthodes de copie copier en tant qu'image une plage de cellules : sélectionner la plage, et appuyez sur Shift en même temps que vous affichez le menu Edition, vous avez alors la possibilité de "copier une image" copie d'une sélection multiple différentes méthodes de collage coller en tant qu'image coller que le format, que le contenu, que la formule ... [commande collage spécial] coller avec liaison
Ci-dessous, vous trouverez des syntaxes VBA pour copier des feuilles et des cellules.
Copies classiques
Copier le contenu d'une plage dans la cellule active : range("B5:C6").Copy activecell Spécifier la plage de destination d'une copie : range("A1:A100").EntireRow.Copy destination:=ladresseouvousvoulez Copier une plage sur une autre : worksheets("Feuil2").rows("3:3") = worksheets("Feuil1").rows("1:1").value Autre exemple :* worksheets("Feuil2").range(C3").value = worksheets("Feuil1").range("A1").value * Range("A1:B1") = [{"Objet","Macro"}]
Copier le contenu de cellules d'un classeur à l'autre workbooks("otherbook.xls").worksheets("Sheet1").range("B6:C31").copy destination:=workbooks("targetbook.xls").worksheets("Sheet6").range("R34") Copier plusieurs feuilles : worksheets(array("Sheet1","Sheet2")).copy
Copier le contenu d'une feuille et coller avec liaison : news
Copier une plage d'une feuille au bas de la plage d'une autre : news
Recopier une cellule ou des lignes dans plusieurs feuilles en même temps 1. sheets.fillacrosssheets worksheets("Feuil1").rows("1:20") 2. worksheets.fillAcrosssheets range("B1"), xlfillwithcontents
Copies particulières
Copier les formules uniquement : news1, news2
Copier en gardant le format des colonnes : news
Copier le contenu d'une cellule à chaque ouverture du classeur (jeudi 30 mars 2000 05:56) Dans le module de thisworkbook... Private Sub Workbook_Open() sheets("Feuil2").[A65536].end(xlUp).offset(1, 0) = sheets("Feuil1").[A1] sheets("Feuil2").[B65536].end(xlUp).offset(1, 0) = Date end Sub
Programmer une copie à intervalle régulier : news
Copier et transposer par valeurs : voici une macro complémentaire XLA à recopier dans le dossier Macrolib (XL97) ou addIns (XL2000) et à installer ensuite par le menu Outils -> Macros complémentaires. Elle ajoute une commande "Collage transposé par valeur" au menu contextuel des cellules, juste en-dessous de "Coller". Si aucune plage n'est en cours de copie, cette commande est désactivée. Copier une plage et la sauvegarder en tant qu'image Cet exemple créée un nouveau classeur pour y coller la plage du classeur actif qu'il a copiée en tant qu'image, puis coller celle-ci dans un graphique et l'exporter au format image.
Copier les cellules non vides Cet exemple copier les cellules non vides de la plage I1:J2000 sur la feuille 2Dim Plage As Range set Plage = ActiveSheet.Range("A1:I25") ' Exportation en .gif de la plage A1:I25 (feuille active) Application.ScreenUpdating = False Workbooks.Add Plage.CopyPicture ActiveSheet.Paste With ActiveSheet.ChartObjects.Add(0, 0, selection.Width, selection.Height).Chart .Paste .Export "C:\Temp\Test.gif", "GIF" End With
Copie de cellules filtréesset feuil_src = Worksheets("feuil1") set feuil_dest= Worksheets("feuil2") With feuil_src.Range("I1:J2000") .AutoFilter Field:=1,Criteria1:="<>" .AutoFilter Field:=2, Criteria1:="<>" .SpecialCells(xlVisible).Copy feuil_dest.[A1] .AutoFilter End With
Autoriser la copie d'une cellule uniquement vers une autre par Harald S.Sub NonVides() Application.ScreenUpdating = False With Range("A1", Cells(Range("A1")([A:A].Count).End(xlUp).Row, [A1].End(xlToRight).Column)) set toto = Worksheets.Add .AutoFilter 1, "E": .Copy toto.[A1] .AutoFilter 1, "B": .Offset(1, 0).Copy toto.Columns(1).Cells(xlCellTypeLastCell).Offset(1, 0) End With End Sub
Copier la première page d'une feuille sur un autre classeur, suite à une discussion sur un forum allemand le 20.09.99, pour XL5 , XL7, XL8. Question originale : Wie kann ich exakt die erste Druckseite des aktiven Blattes in ' eine neue Arbeitsmappe kopieren ?Sub CopyFromJ() Dim Copyrange As Range, Pasterange As Range On Error Resume Next set Pasterange = Cells(11, 4) 'la cellule cible set Copyrange = Application.InputBox _ (Prompt:="Pick a Fund in Column J", _ Title:="Copy Subaccount to D11", _ Default:="J" & activecell.Row, _ Type:=8) If Copyrange Is Nothing Then Exit Sub 'no need to select, just copy a value like this: Pasterange.Value = Cells(Copyrange(1).Row, 10).Value End Sub
Sub ErsteSeiteKopieren() Dim rngCopy As Range Dim intRow As Integer, intCol As Integer, intCounter As Integer Application.ScreenUpdating = False intRow = ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64),1)") - 1 intCol = ExecuteExcel4Macro("INDEX(GET.DOCUMENT(65),1)") - 1 set rngCopy = Range(Cells(1, 1), Cells(intRow, intCol)) Workbooks.Add rngCopy.Copy Range("A1") For intCounter = 1 To rngCopy.Columns.Count Columns(intCounter).ColumnWidth = rngCopy.Columns.ColumnWidth Next intCounter For intCounter = 1 To rngCopy.Rows.Count Rows(intCounter).RowHeight = rngCopy.Rows.RowHeight Next intCounter ActiveSheet.Buttons(1).Delete End Sub
Copie automatique et incrémentée
Deux méthodes, AUTOFILL & FILLDOWN
recopier jusqu'à la hauteur de la cellule à gauche Range([C1], Range("C1")(1, 0).End(xlDown)(1, 2)).FillDown, ou Range([C1], Range("C1")(1, 0).End(xlDown)(1, 2)).FormulaLocal =[C1].FormulaLocal autre exemple de recopie : Range("G2:G" & [F2].End(xlDown).Row).FillDown voir là : http://members.aol.com/dmcritchie/excel/fillempt.htm exemple de recopie incrémentée avec des dates : newsDe façon plus générale : quand une copie par la poignée incrémente par défaut (les dates par exemple), le fait de maintenir Ctrl enfoncée en même temps empêche l'incrémentation. Et quand une copie par la poignée n'incrémente pas par défaut(1 par exemple), maintenir Ctrl enfoncée en même temps provoque l'incrémentation (1 2 3 Soleil).
Désactivation de la possibilité de copier
Désactiver le copier coller : news1, Désactiver le couper coller, mais pas le copier coller : news Désactivation du mode copie (stoppe le mode clignotant & enlève l'objet copié du presse-papier) : application.cutcopymode = false Remplacer les fonctions Copier & Coller par les votres : newsMéthodes de collage & de déplacement
L'instruction VBA pour le collage est Paste ou PasteSpecial pour un collage spécial ; l'instruction VBA pour couper est Cut. L'enregistreur de macros & l'aide renseigne bien c'est pourquoi je serais très bref, et puis j'ai dû donner des bouts de code par ailleurs. Pour couper une cellule et la coller à une autre "adresse", procéder comme suit :
voir la partie Collage avec liaison de la page xl_liaison.htm voir la partie Collage de la page Edition pour des explications généralesselection.Cut destination:=selection.offset(2,0).address ' l'exemple ci-dessus coupe la sélection et la déplace deux lignes en-dessous (dans la même colonne)
Méthodes de suppression & d'effacement
Méthodes d'effacement
Effacer tout : selection.clear Effacer le format : selection.clearformats Effacer le contenu : selection.clearcontents 'il en manque mais l'enregistreur de macros vous les fournira.
Méthodes de suppression
Supprimer la sélection & décaler les cellules vers la gauche : selection.delete shift:=xltoLeft Supprimer la sélection & décaler les cellules vers le haut : selection.delete shift:=xlUp
Supprimer les lignes entières : selection.EntireRow.delete Supprimer les colonnes entières : selection.Entirecolumn.delete
ou encore : range("A5").entirerow.delete
Supprimer lignes paires de la signe 2 à 500 '(à tester), par L.L. Sub SuppLignpaires dim R As range, L As Integer set R = rows(2) for L = 4 to 500 Step 2 set R = Union(R, rows(L)) next L R.delete end sub 'retrouver le message ci-contre : news
Supprimer une ligne sur deux manuellement Insérer une nouvelle colonne A. La remplir avec la formule =si(MOD(LIGNE();2) =0;Vrai;1)et l'incrémenter avec un drag & drop jusqu'à la dernière ligne Puis, Edition/Atteindre/Cellule/formules : valeur logique Et, Edition/Supprimer [raccourci : ctrl "-" ] /Ligne entière Supprimer la col A. Attention les deux méthodes ci-dessous détermine si une ligne est vide juste en se basant sur le contenu de la première cellule. Suppression des lignes vides (avec boucle while) : newsSuppression de lignes pour lesquelles la valeur dans la colonne A est 0 (avec méthode filtre) : news
Suppression des colonnes vides : news
Effacer cellules contenant un mot
dim Cellule As range, Dep As String set Cellule = cells.find("Zaza", lookat:=xlWhole, MatchCase:=true) if Cellule Is Nothing then Exit Sub Dep = Cellule.address On Error Resume next do Cellule(1, -1).Clearcontents set Cellule = cells.findnext(Cellule) loop Until Cellule.address = Dep
'retrouver le message ci-contre : news
Quelques exemples d'insertion
Insérer une ligne avant la ligne i où i=4 : rows(4).insert Insérer deux lignes avant la ligne i où i=4 :rows("4:5").insert Insérer une ligne toutes les deux lignes : news Insérer en gardant les formules : news
Copier / Dupliquer avec insertion de lignes
Sub DuplicateRows() Dim lRow As Long Dim lLastRow As Long lLastRow = ActiveSheet.UsedRange.Rows.Count For lRow = lLastRow To 1 Step -1 With ActiveSheet .Cells(lRow, 1).EntireRow.Copy .Range(.Cells(lRow, 1), .Cells(lRow + 1, 1)).Insert End With Next lRow Application.CutCopyMode = False End Sub
Insertion & copie d'une plage de cellules
'l'insertion se fait par rapport à la plage A1:B10, cette sélection ne correspond pas à une sélection de lignes entières.
Dim FromRange As Range set FromRange = Range("A1:B10") With FromRange activecell.Resize(.Rows.Count, .Columns.Count).Insert shift:=xlDown .Copy activecell End With
Cet exemple là insère une ligne entière grâce la propriété "entirerow"
Dim FromRange As Range set FromRange = Range("A1:B10") With FromRange activecell.Resize(.Rows.Count, .Columns.Count).EntireRow.Insert shift:=xlDown .Copy activecell End With
Infos diverses sur les cellules
La plage de cellule est-elle vide : news, (par extension toutes les cellules) ? => emploi d'une fonction Le type d'une cellule : news
Fusionner deux cellules
Déclencher une macro si A1 est sélectionnée et SUPERIEURE à 0Sub Mergecells() dim myStr As String myStr = activecell.value & " " & activecell.offset(0, 1).value activecell.value = myStr activecell.offset(0, 1).Clearcontents end Sub
Private Sub Worksheet_Change(ByVal Target As Excel.range) if Not Intersect(Target, range("$a$1")) Is Nothing And Target.value > 0 then msgbox ("bonjour") end Sub
Egaliser deux cellules
Private Sub Worksheet_Change(ByVal Target As Excel.range) if Target.address = "$A$1" then range("B1") = range("A1") end if if Target.address = "$B$1" then range("A1") = range("B1") end if end Sub
Nombre de modifications apportées à une cellule (emploi d'une procédure évènementielle)
Private Sub Worksheet_Change(ByVal Target As Excel.Range) If IsError([nb_modif]) Then ActiveWorkbook.Names.Add Name:="nb_modif",RefersToR1C1:=0 If Not Intersect(Target, Range("c3:c33")) Is Nothing Then ActiveWorkbook.Names.Add Name:="nb_modif", RefersToR1C1:=[nb_modif] + 1 End If End Sub
Est-ce que la sélection est entière (sélection soit d'une colonne ou ligne entière, soit de seulement quelques cellules) Fonction à utiliser dans VBA
Function FullRowOrColumn() As Boolean If TypeOf Selection Is Excel.Range Then FullRowOrColumn = (selection.Rows.Count = Rows.Count) Or (selection.Columns.Count = Columns.Count) Else FullRowOrColumn = False End If End Function
Retourner l'adresse de la cellule appelante d'une fonction function TEST() As String TEST = application.caller.address end function ' essayez aussi avec les paramètres suivants : Application.Caller.Address(0, 0, , 1) 'Address(External:=True) Application.Caller.Address(0, 0, , 0)
Doublons
Infos par Chip Pearson (page Duplicate And Unique Items In Lists)
indiquer les doublons par formatage conditionnel : =si(nb.si(A5:A10; A5)>1;vrai;faux) inscrire le mot duplicat à côté d'un duplicat : =si(nb.si(A5:A10;A5)>1;"Duplicate";"") afficher les valeurs uniques d'une colonne, en incrémentant la cellule suivante dans une colonne adjacente : =si(nb.si($A$1:A1;A1)=1;A1;"") extraire les valeurs communes à deux listes : =si(nb.si($A$1:$A$10;B1)>0;B1;"") extraire les valeurs qui sont dans une liste mais pas dans l'autre :=si(nb.si($A$1:$A$10;B1)=0;B1;"") Repérer les lignes identiques dans la plage A2:D15 : après sélection de la plage, créer un formatage conditionnel en utilisant : "la formule est" =EXACT($A2:$D2;$A1:$D1) (astuce par B. Mazas) Une valeur X est-elle en double dans une plage y = Application.WorksheetFunction.CountIf(Range("A:A"), x): If y >= 2 Then MsgBox ("On retrouve le chiffre " & x & "plus d'une fois !") Par Robert D., en assumant que tes données à vérifier sont dans les colonnes A et B. Dans la colonne C (ou toute autre colonne que A ou B), entrer :La formule matricielle ci-dessous affiche si oui ou non il y a des doublons: =IF(counta(range1)<>SUM(IF(FREQUENCY(IF(LEN(range1)>0,MATCH(range1,range1, 0),""),IF(LEN(range1)>0,MATCH(range1,range1,0),""))>0,1)), "You Have Duplicates","No Duplicates") Remplacer les doublons (sauf la première occurence) : exemple par Chip Pearson Masquer les doublons : news Suppression de doublons, voici les trois messages d'une conversation récente :1, 2, 3 Insérer valeurs uniques dans listbox ou combobox : news=SI(ESTERREUR(EQUIV(A1;$B$1:$B$5;0));"";A1) pour trouver les doublons ENTRE les colonnes A et B =SI(NB.SI($B$1:$B$5;B3)>1;"*";"") pour trouver les doublons DANS la colonnes B
'Voir aussi sur site de Laurent Longre : le site
' Liste des données existantes dans la colonne A mais pas dans la B, le résultat s'inscrit en colonne C 'De: Eric R., objet: "Re: l'UNION fait la force ?", date : dimanche 9 juillet 2000 09:43
Sub CompareTwoColonnes() Dim Cell As range, Plage As range, I As long set Plage = range("B1", [B1].End(xldown)) Application.screenupdating = False For Each Cell In range("A1", [A1].End(xldown)) If Plage.find(Cell, Plage(1), xlValues, xlWhole) Is Nothing Then I = I + 1 Cells(I, 3) = Cell End If Next Cell End Sub
Empêcher la saisie de deux nombres identiques dans une colonne par validation de données
De: ChrisV, objet: "Re: données uniques par validation de données", date : samedi 22 juillet 2000 23:39 Par ex. dans la colonne A (après l'avoir sélectionnée): =NON(NB.SI(A:A;A1)>1)
Empêcher les doublons dans la plage A1:A20, en affichant l'adresse des valeurs déjà saisies
Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim Cell As Range, Plage As Range set Plage = Intersect(Target, Range("A1:A20")) If Plage Is Nothing Or IsEmpty(Target(1)) Then Exit Sub set Cell = Range("A1:A20").Find(Target(1), Target(1)) If Cell.Address <> Target(1).Address Then MsgBox "Cette valeur a déjà été saisie dans la cellule " _ & Cell.Address, vbCritical Application.EnableEvents = False Plage.ClearContents Application.EnableEvents = True SendKeys "{F2}+{HOME}" End If End Sub
Contrôler si une valeur a déjà été saisie dans le classeur : news
Les commentaires
Voir aussi insertion.html. Un commentaire est un objet au même titre que les graphiques ou les objets dessinés avec la barre d'outils Dessins. Avec VBA, il est possible de manipuler les commentaires de plusieurs manières notamment à travers la collection d'objets (Shapes) ou la collection de commentaires (Comments).
Lorsque les commentaires sont crées, leur nom est définit sur le modèle suivant "Commentaire 1", "Commentaire 2", "Commentaire 3".
Il n'est pas nécessaire de sélectionner un commentaire afin de le manipuler, toutefois cela peut rendre plus simple la manipulation. Pour cela, il vous faut au préalable rendre visible le commentaire comme vous le montre les instructions ci-dessous.
activesheet.shapes("Commentaire 1").visible=true activesheet.shapes("Commentaire 1").select 'ensuite, vous pouvez directement faire : selection.font.size = 8
Une autre manière de procéder est de boucler sur les commentaires, la manière d'accéder à ses propriétés est moins directe.
'Police des commentairesdim cmt as comment for each cmt in activesheet.comments with cmt.shape.textframe.characters.font .size = 9 end with next
Si vous êtes curieux de savoir comment changer la police d'un ou de tous les commentaires, les codes ci-dessus et le suivant devraient vous aider. Si vous cherchez à changer la couleur ou la police par défaut des commentaires, vous verrez que cela est possible, mais je ne vous le recommande pas.
'Changement de la police des commentaires
'voir l'article de microsoft suivant : http://support.microsoft.com/support/kb/articles/q173/7/98.asp 'ou utiliser la macro suivante pour changer la police des commentaires d'une feuille
Sub changeCommentFont() for each cmt In activesheet.Comments with cmt.Shape.TextFrame.Characters.Font .name = "Arial" .Italic = true .Size = 9 end with next end Sub il est possible de formater différemment différentes portions de texte, c'est plus compliqué, un enregistrement de macros, l'aide VBA et la page xl_format.htm pourront vous apporter des compléments d'information.
'Changement de la police par défaut des commentaires
ou encore : accéder aux propriétés du bureau (clic droit sur l'écran), aller sur l'onglet apparence, et choisissez Info-Bulle dans la liste déroulante "Element", vous pouvez alors modifier la couleur, la police des commentaires.
'Taille d'un commentaire
Elle peut être automatiquement déterminé par Excel. Pour cela, il faut que la propriété AutoSize du commentaire soit activée. Manuellement, il faut cocher la case "Taille automatique" dans l'onglet "Alignement" de la boîte de dialogue "Format de commentaire". Voilà ci-dessous un exemple d'instruction VBA permettant d'activer cette adaptation automatique de la taille :
activecell.comment.shape.textframe.autosize = true
Cependant, cette adaptation automatique ne donne pas un bel effet visuel, vous trouverez alors ci-après un message qui vous donnera une autre solution pour intervenir sur cette taille : news. La solution proposée change la taille des commentaires pour laquelle l'option "Taille automatique" est activée.
'Positionnement d'un commentaire, de la cellule qui l'héberge & texte du commentaire
La macro ci-dessous est à exécuter sur une feuille contenant quelques commentaires
Sub demo() set cmt = Worksheets("Feuil1").Comments For Each c In cmt MsgBox "La cellule hébergeant ce commentaire est la suivante : " & c.Parent.Address MsgBox "L'angle supérieur gauche de la boîte de commentaire est situé dans cette cellule " & c.Shape.TopLeftCell.Row MsgBox "Le texte du commentaire est le suivant" & vbcrlf & c.Text Cells(c.Parent.Row, c.Parent.Column + 1).Value = c.Text' inscrire le commentaire d'une cellule dans la cellule d'à côté 'c.Shape.topLeftCell.value = c.Text 'inscrire inscrire le commentaire d'une cellule dans la cellule de son coin gauche c.Shape.Placement = xlFreeFloating ' l'objet ne sera pas affecté par tout changement de la taille des cellules c.Shape.TextFrame.AutoSize = True 'la taille s'ajuste automatiquement 'c.Shape.OLEFormat.Object.AutoSize = True 'autre manière de l'écrire Next c
End Sub
'Création d'un commentaire
sub creation_commentaire_simple activecell.addcomment activecell.comment.visible = False activecell.comment.text text:="Votre nom :" & vbcr & "1° ligne" & vbcr & "2° ligne" end sub
Création d'un commentaire sans le nom de l'utilisateur
sub creation_commentaire_sans_nom_user nomuser = application.username 'stockage du nom de l'utilisateur range("B2").select application.username = "" 'effacement du nom pour pas qu'il n'apparaisse dans le commentaire range("B2").addcomment range("B2").comment.visible = false range("B2").comment.text text:="1° ligne" & Chr(10) & "2° ligne" & Chr(10) & "3° ligne" & Chr(10) & "" application.username = nomuser end Sub
Création d'un commentaire avec la date et l'heure, par Jacky sur microsoft.public.fr.excel, sujet: "Re: ajout date et heure dans commentaire", le mercredi 9 août 2000 10:41
Sub AjoutCommentaire() Dim ZtToto As String ZtToto = activecell.AddressLocal With activecell.addcomment.shape.OLEFormat.object .Text = Format(Now(), "dd/mm/yy hh:mm:ss") .Font.Name = "Times New Roman" .Font.Size = 14 End With Range(ZtToto).Select 'SendKeys "%IM" end sub
Création de triangles indicateurs personnalisés : news
Le code proposé dans ce message a été écrit par Stratos. Vous pouvez insérer dans les cellules de petits objets triangulaires à la couleur de votre choix, qui masqueront le triangle rouge d'Excel. L'action est effectuée dès lors où le commentaire contient votre nom d'utilisateur (retrouvez-le dans la boîte de dialogue Options du menu Outils).
Afficher le commentaire associé à une cellule à l'aide d'une formule
Function Commentaire(Plage As Range) As String Application.Volatile On Error GoTo zut Commentaire = Plage.Comment.Text Exit Function zut: Commentaire = "" End Function
'Suppression de commentaires
Sub SupprimeCommentaires() For i = ActiveSheet.Comments.Count To 1 Step -1 : ActiveSheet.Comments(i).Delete Next i End Sub
'Contrôle de la présence d'un commentaire
'Exemple basé sur procédure évènementielle selectionchange d'une feuille de calcul
Private Sub Worksheet_selectionChange(ByVal Target As Excel.range) dim HasComment As Boolean HasComment = Len(Target.NoteText) if HasComment = true then msgbox ("voici le commentaire" & Chr(13) & Target.NoteText) Else msgbox ("pas de commentaires") end if end Sub
'Exemple en contrôlant s'il existe un objet comment dans une celllule 'proposé le samedi 2 octobre 1999 11:07, dans vb.vba)
dim cmtComment As Comment 'as excel.comment set cmtComment = xl.range("D10").Comment if Not cmtComment Is Nothing then strComment = cmtComment.Text end if
'Exemple où l'absence de commentaires est révélée par une erreur 'la macro ci-dessous boucle sur les cellules A1 à A3 pour afficher leur contenu, s'il n'y a pas de commentaires, l'erreur généré a pour index 91 et la macro vous indique l'adresse de la cellule concernée.
Sub lireCommentaire() For Each c In ActiveSheet.Range("A1:A3") On Error Resume Next MsgBox c.Address & " = " & c.Comment.Text bug = Err.Number If Err.Number = 91 Then MsgBox "Pas de commentaire en " & c.Address Next c End Sub
'Autres méthodes là : existence.htm#exis_commentaire
Liste des commentaires d'une feuille
voir sur le site de Frédéric S. le fichier appelé : "RecupererCommentaires"
Afficher un commentaire : activesheet.shapes("Commentaire 1").visible=true
Afficher / Masquer tous les commentaires
Sub Commentshow() set cmt = worksheets("Feuil1").Comments if commentcache = true then for each c In cmt c.Visible = true next commentcache = false Else for each c In cmt c.Visible = false next commentcache = true end if end Sub
'Basculer entre affichage et masquage de tous les commentaires
Sub ToggleCommentDisplay() With Application If .DisplayCommentIndicator = 1 Then .DisplayCommentIndicator = -1 Else .DisplayCommentIndicator = 1 End If End With End Sub
'Afficher / Masquer les indicateurs de commentaires
Application.DisplayCommentIndicator = Not Application.DisplayCommentIndicator
'Autres sujets relatifs aux commentaires
'Déclencher une action à la création d'un commentaire : news 'Transférer la formule dans un commentaire et vice-versa : voir sur le site de Frédéric S. le fichier appelé "FormulesDansCommentaires"
Associer un commentaire à une cellule lorsque elle est modifiée et égale à une certaine valeur
***Avec une procédure événementielle, par ex à la saisie dans la plage A1:A10
Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Not Intersect(Target, Range("A1:A10")) Is Nothing Then If Target = 10 Then With Range(Target.Address) .AddComment .Comment.Text Text:="La valeur de la cellule est égale à 10" End With Else: Range(Target.Address).ClearComments End If End If End Sub
Voir limites.html#20 pour imprimer le contenu des commentaires dans un fichier texte Voir Affichage.html#Commentaires pour plus d'infos & d'astuces
Presse-Papiers
Vide ou Plein
Exemple 1
Sub CheckClipboard() dim MyString as String set MyData = New DataObject MyData.GetFromClipboard MyString = MyData.gettext if MyString = "" then msgbox ("Clipboard is empty.") Else msgbox MyString end if end Sub
Exemple 2
declare function countClipboardformats Lib "User32" () As long Sub Test() if countClipboardformats = 0 then msgbox "Presse-papiers vide" end Sub
Effacer le presse-papiers
Exemple 1
Public declare function CloseClipboard Lib "user32" () As long Public declare function EmptyClipboard Lib "user32" () As long Public declare function OpenClipboard Lib "user32" (ByVal hwnd As long) As long
Sub ClipboardClear() dim rtn As long rtn = OpenClipboard(0&) rtn = EmptyClipboard rtn = CloseClipboard end Sub
Exemple 2
Sub ClearCB() set Dummy = New DataObject Dummy.setText "" Dummy.PutInClipboard end Sub
Afficher la barre d'outils Presse-Papiers
Sub showClipboardAtBottom2() with CommandBars("Clipboard") .Visible = true .Position = msoBarFloating .Left = 200 .top = 500 end with end Sub
Renommer une feuille avec le contenu du presse-papier
dim DObj As New DataObject DObj.GetFromClipboard activesheet.name = DObj.gettext(1)
Connaître chaque ligne du texte contenue dans le presse-papier ( de Laurent L., sujet : "Re: VBA, manipulation du pressepapier", le samedi 18 septembre 1999 14:39)
Sub clipboard_rows() dim Texte As String, Ligne As String dim I As Integer, J As Integer dim DObj As New DataObject DObj.GetFromClipboard Texte = DObj.gettext(1) do I = J + 1 J = InStr(I, Texte, vbCr) Ligne = Mid$(Texte, I, Iif(J, J - I, Len(Texte) - I + 1)) msgbox Ligne loop While J end sub
Récupérer le contenu du clipboard (lorsqu'il contient une image et non du texte) pour l'insérer dans un controle RichTextBox.
Clipboard.setData form1.Picture1.Image ' Capture l'image ' dans Picture1 et la colle dans le presse papier
SendMessage form1.RichTextBox1.hWnd, WM_PASTE, 0, 0 ' Colle l'image du presse papier dans le RichTextBox1
Dans un module: declare function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As long, ByVal wMsg As long, ByVal wParam As long, lParam As Any) As long
Public Const WM_PASTE = &H302
Autres informations
Voir aussi sur le site de Chip Pearson : le site
Sélection d'objets
Sélectionner un objet : activesheet.shapes("nomobjet").select Atteindre un objet et non pas le sélectionner (Laurent L.) : activesheet.shapes("Zone de texte 1").topleftcell.select Sélectionner tous les objets : activesheet.shapes.selectall ou activesheet.drawingobjects.select
Sélectionner plusieurs objets
activesheet.shapes.range(array("objet1", "Objet2")).select autre exemple par L.L. : Dim Arr(), Sh As Shape, I As Integer, Nom As String ReDim Arr(0 To ActiveSheet.Shapes.Count - 2) For Each Sh In ActiveSheet.Shapes Nom = Sh.Name If Nom <> "Zaza" Then Arr(I) = Nom: I = I + 1 Next Sh ActiveSheet.Shapes.Range(Arr).Select autre exemple par L.L Dim Sh As Shape Dim Prem As Boolean Prem = True On Error Resume Next For Each Sh In ActiveSheet.Shapes If IsError(Application.Match(Sh.Name, _ [{"Zozo","Zaza","Zuzu"}], 0)) Then Sh.Select Prem If Prem Then Prem = False End If Next Sh On Error Goto 0
Sélection de tous les objets d'une zone (séléction conditionnelle), par moi-même le 07/09 sur microsoft.public.fr.excel, objet : "Re: sélection d'images par macro"
'La macro boucle sur chaque objet de la feuille et contrôle si la cellule "BottomRightCell", cellule qui accueille le coin droit de ton objet, est à l'intersection de la zone prédéfinie Sub SelectionObjets() For Each sh In ActiveSheet.Shapes: If Not Intersect([A1:G120],sh.BottomRightCell) Is Nothing Then sh.Select Replace:=False Next sh End Sub
Boucler sur des boutons ou tout autre objet dessiné avec la barre d'outils Contrôles ou Commandes
Dim Obj As Object For Each Obj In ActiveSheet.OLEObjects If TypeOf Obj.Object Is MSForms.CommandButton Then Obj.Height = 20 Next Obj
Lister les objets et macros associées !!! : news (ne listent pas les sous-objets d'un groupe)
Retourner le nom de l'objet sélectionné (qui appelle la macro)
Sub ShapeAction() msgbox application.Caller & " " & _ activesheet.Shapes(application.Caller).ZOrderPosition end Sub
Type de l'objet sélectionné
If TypeName(Selection) = "range" Then MsgBox "Type = " & TypeName(Selection) & "Name = " & selection.Address Else MsgBox "Type = " & TypeName(Selection) & "Name = " & selection.Name End If
Tag » Activecell Sélectionner Plusieurs Cellules
-
Etendre ActiveCell à Une Sélection Multiple
-
How To Select Cells Or Ranges By Using Visual Basic Procedures In ...
-
Sélection Et Activation De Cellules | Microsoft Docs
-
Selection De Plusieurs Cellules - Forum Excel-Pratique
-
Selection De Plusieurs Cellules De L'activeCell.row
-
VBA : Sélectionner Une Plage De Cellules - Comment Ça Marche
-
Sélectionner Plusieurs Cellules - Microsoft 365 - Excel-Downloads
-
VBA Sélectionner Des Plages / Cellules - Automate Excel
-
Gestion Des Cellules - Formation Excel VBA JB
-
Astuces Microsoft Excel - Conseil Création
-
Comment Sélectionner Des Lignes Et Des Colonnes Entières Dans ...
-
Excel - VBA Simple De Sélection: La Sélection De 5 Cellules à Droite ...
-
VBA Excel - Travailler Avec Des Sélections - Médiaforma - Mediaforma
-
Comment Mettre En évidence Une Cellule Ou Une Sélection Active ...