Voir aussi
Adresse de la première cellule d'une plage
Comment récupérer l'adresse de la cellule située en haut à gauche d'une plage ?
Par formule :
=CELLULE("adresse";plage)

avec VBA :

With Range("Uneplage")
MsgBox Cells(.Row, .Column).Address
End With

ou encore
Range("maplage").cells(1).address
Michel Samoey, GeeDee, Lsteph,
Ajouté ou modifié le 05/04/2008 (N°1995)
La ligne est-elle vide ?
Comment savoir si une ligne est vide (avec et sans VBA)
En VBA :
MsgBox Application.WorksheetFunction.CountA(Rows(ActiveCell.Row)) = 0

Avec une formule :
=NBVAL(1:1)=0
=COUNTA(1:1)=0

Les deux te renvoient Vrai ou Faux
FdeCourt,
Ajouté ou modifié le 05/04/2008 (N°1992)
Empecher la suppression d'une ligne
Peut-on sans macro empêcher qu'un utilisateur supprime une ligne ?
Sur la ligne à protéger, sélectionne deux cellules ou plus, tape
="" et valide par ctrl+Maj+enter

si tu veux voir que cette ligne est protégée, saisis ="*" pour voir les cellules à effacer (toutezs d'une coup) pour faire sauter la protection.
Flo Cabon,
Ajouté ou modifié le 01/12/2007 (N°1940)
Empecher la suppression d'une ligne
Peut-on sans macro empêcher qu'un utilisateur supprime une ligne ?
Sur la ligne à protéger, sélectionne deux cellules ou plus, tape
="" et valide par ctrl+Maj+enter

si tu veux voir que cette ligne est protégée, saisis ="*" pour voir les cellules à effacer (toutezs d'une coup) pour faire sauter la protection.
Flo Cabon,
Ajouté ou modifié le 01/12/2007 (N°1940)
Des lignes vides pas vides
J'utilise une macro pour supprimer des lignes dont la cellule en colonne A est vide mais certaines ne s'effacent pas.
Excel a la facheuse habitude de garder des traces de précédentes valeurs qui ont été effacées !
D'où le danger, maintes fois signalé ici, de l'utilisation des "UsedRange" et autres "SpecialCell (xlCellTypeLastCell)"


Pour ton cas, cette petite ligne
[A:A] = [A:A].Value
placée dans ta macro devant celle-ci
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
rétablira la situation. Si ce n'est pas le cas c'est que tes lignes vides ne le sont pas et contiennent par exemple des retour chariot invisibles.
Alain Vallon,
Ajouté ou modifié le 12/07/2007 (N°1862)
A1 ou L1C1 ?
Comment fait-on pour personnaliser le style de référence à l’ouverture d’un fichier ?
Voici une macro pour forcer Excel à reconnaître un usager et ouvrir ce classeur selon le style de référence L1C1 et non en A1.

S’assurer que au préalable de bien identifier l’UserName via Outils/Options/onglet Général : nom d’utilisateur « mettre le nom de l’usager ».

Vous devez mettre cette macro dans le module "ThisWorkbook" de votre classeur :

Option Explicit

Private Sub Workbook_Open()
With Application
If .UserName <> "Jocelyn Vaillancourt" Then
.ReferenceStyle = xlA1
Else
.ReferenceStyle = xlR1C1
End If
On Error GoTo Sortie
Exit Sub
Sortie:
End Sub

Si vous voulez qu’a l’ouverture Excel soient en style de référence L1C1, mettre cette macro dans VBAProject (Perso.xls) / Microsoft Excel Objets / ThisWorkbook.
Jocelyn Vaillancourt,
Ajouté ou modifié le 02/12/2006 (N°1780)
Ajuster la hauteur des lignes
Comment ajuster précisemment la hauteur des lignes de ma feuille autrement qu'en tatonnant pour obtenir une hauteur de 3cmpar exemple ?
Tu peux utiliser la propriété Height de l'objet Range en VBA pour déterminer la hauteur
d'une ligne particulière. Cette propriété est en lecture seule elle est de type variant.
Elle renvoie une hauteur en points.

Mais comme les choses avec excel ne sont jamais si simple... (des maudits informaticiens à
l'esprit tordu ;-)) ).
L'affichage à l'écran des dimensions tient compte des pixels en ce sens que la plus petite
majoration en plus ou en
moins de la hauteur affichée à l'écran correspond à 1 pixel. En conséquence, bien que l'on
puisse demander diverses hauteurs de lignes en point, l'affichage elle, se fera à l'unité
la plus proche(arrondi) de l'unité en pixel
correspondante. (des demis pixels ça n'existe pas ! )
un pixel = 0.75 points

72 points = 1 pouce
1 Pouce = 2.54 Centimètre

Tu peux utiliser ceci en VBA pour déterminer la hauter d'une ligne particulière

Sub HauteurUneLigne()

Dim LaLigne As Long
LaLigne = 5 ' unité de mesure le point

With Worksheets("Feuil1") ' Nom feuille à déterminer
.Rows(LaLigne & ":" & LaLigne).RowHeight = 25
End With

End Sub

Si tu vas vérifier après coup dans la feuille, il se peut qu'il y ait une toute légère
différence entre la mesure observée et celle de ta procédure car la plus petite majoration
que la hauteur peut accepter est de 1 pixcel soit 0.75 points. Dans ce cas, l'affichage se
fait au plus près de la valeur désirée en tenant compte de ce qui précède.
Denis Michon,
Ajouté ou modifié le 05/03/2005 (N°1589)
Ne copier que les lignes visibles
Après avoir appliqué un fitre ou même manuellement, j'ai des lignes masquées. Comment ne copier QUE les lignes visibles sur une autre feuille ?
Sélection plage > Edition > artteindre > Cellules > cocher cellules visibles
seulement > copier > coller ailleurs
Alain vallon,
Ajouté ou modifié le 05/11/2004 (N°1520)
Ajout automatique d'une nouvelle ligne vierge
Soit une liste avec une ligne de totalisation en perpétuelle évolution. Je souhaiterais qu'une nouvelle ligne vierge s'affiche dès que je saisis une donnée sur la dernière ligne de la liste. Mon tableau présente ainsi toujours une ligne vierge.
Voila une des rares améliorations de excel 2003, tu peux définir une "liste" et ajouter
une ligne de calcul.
Quand tu veux ajouter un ligne, Excel l'insère automatiquement avant la ligne de total,
comme dans une base de données par exemple.

Si tu n'as pas cette version utilise cette macro qui fait ce que tu souhaites dès
l'instant où tu te positionnes dans l'une quelconque des cellules de la ligne dans
laquelle tu viens de saisir...

Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
ActiveCell.Range("A2").EntireRow.insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select
End Sub
Jacky,
Ajouté ou modifié le 20/05/2004 (N°1426)
Premieres et dernières lignes et colonnes d'un range
Je récupère dans une macro un range. Disons A2:D20 comment récupérer : preml= N° de la première ligne (2) dernl= n° de la dernière ligne(20) premc= N° de la première colonne (1) ou mieux, directement sa lettre, A dernc= N° de la dernière colonne (4 ou D)
Parmi la foultitude de soluces :
Sub zoziau()
Set plg = [A2:D20]
preml = plg(1).Row '1° ligne de la plage
dernl = plg.Rows.Count +preml- 1 'der ligne

premc = Split(plg(1).Address, "$")(1) '1° colonne de la plage
dernc = Split(Cells(1, plg.Columns.Count + plg(1).Column - 1).Address, "$")(1)
'der colonne

MsgBox preml: MsgBox dernl: MsgBox premc: MsgBox dernc
End Sub

il y a aussi la méthode item

Set plg = Range("A2:D20")
preml = plg.Item(1).Row
dernl = plg.Item(plg.Count).Row
premc = plg.Item(1).Column
dernc = plg.Item(plg.Count).Column
MsgBox Range(Cells(preml, premc), Cells(dernl, dernc)).Address


ou bien,

Sub Macro1()
Set plg = Range("A2:D20")
preml = plg.Item(1).Row
dernl = plg.Item(plg.Count).Row
premc = LettreColonne(plg.Item(1).Column)
dernc = LettreColonne(plg.Item(plg.Count).Column)
End Sub

Function LettreColonne(c As Integer)
LettreColonne = Left(Cells(1, c).Address(0, 0), IIf(c < 27, 1, 2))
End Function
Alain vallon, Isabelle, Michel Gaboly,
Ajouté ou modifié le 20/05/2004 (N°1422)
Intercepter en VBA l'événement insertion de ligne
Comment déclencher une macro à chaque insertion de ligne ?
Cet événement n'est pas répertorié. Alors, une solution tordue :
sélectionne la ligne 1000 et nomme la "fin" (insertion / nom..)
insère un nouvel onglet dans le classeur dans lequel tu inscris n'importe où
=ligne(fin)
masque cet onglet
dans la page de code associée avec cet onglet, recopie :
Private Sub Worksheet_Calculate()
MsgBox "aïe"
Sub

à chaque insertion (ou suppression) d'une ligne au dessus de la ligne "fin",
la macro est lancée
Jacques Chaussard,
Ajouté ou modifié le 16/05/2004 (N°1397)
Lignes vides pas vides
J'importe des données depuis un fichier texte. Certaines lignes restent vides mais je ne peux pas les supprimer avec une procédure supprimelignevides car apparemment il y a quelque chose (invisible) dedans. Comment accéder à ces caractères ?
Tu pourrais t'inspirer de cette macro. Tu as besoin de deux colonnes vides pour l'utiliser. Tu
devras adapter pour le nom de fichier. Cela fonctionne cellule par cellule.

Sub listecaracterescellule()
'mettre le curseur en haut à gauche de la zone où l'on
'veut avoir les résultats.
'Il faut deux colonnes de libres
Dim i As Integer
Open "c:\mes documents\coucou.txt" For Input As 1
i = 1
Do While Not EOF(1)
Line Input #1, donnee
Cells(i, 1).Value = donnee
i = i + 1
Loop
Close
celluleatester = InputBox("Indiquez l'adresse de la cellule à vérifier")
LaCellule = celluleatester
Set celluleatester = Range(celluleatester)
ActiveCell.Value = "Liste des caractères"
ActiveCell.Offset(1, 0).Value = "de la cellule " & LaCellule
ActiveCell.Offset(0, 1).Value = "Code de caractère"
For i = 1 To Len(celluleatester)
caractere = Mid(celluleatester, i, 1)
ActiveCell.Offset(i + 2, 0).Value = caractere
ActiveCell.Offset(i + 2, 1).Value = Asc(caractere)
Next
enbas = ActiveCell.Offset(i + 2, 1).Address
plage = ActiveCell.Address & ":" & enbas
Range(plage).Select
Selection.Columns.AutoFit
End Sub
Clément Marcotte, (N°1038)
Faire une opération sur une ligne sur trois...
Quelle formule dois-je mettre dans la cellule A1 de la feuille "Feuil2" pour obtenir en la "tirant" vers le bas le contenu des cellules de la "Feuil1" 1 ligne sur 3...
"=DECALER(Feuil1!A$1;LIGNE()*3-3;)

Et si maintenant sur la feuil2 je ne
fais pas partir ma formule de A1 mais de C4 ?

=DECALER(Feuil1!A$1;(LIGNE()-LIGNE(C$4))*3;)
Laurent Longre, (N°1037)
Trier par couleur de ligne
J'ai des lignes de différentes couleurs - Comment regrouper les lignes ayant la même couleur ?
Sub TriParCouleurs()
'trie une plage de données soit sur la couleur d'une de ses cellules
'soit en regroupant ses lignes par couleurs
Dim cell As Range, Col1%, derCol%, Li1&, derLi&, couleur&, Msg$, choix%
Dim plage As Range

Msg = "Pour trier sur une couleur, cliquez sur ""Oui""" & vbLf
Msg = Msg & "Pour trier sur toutes les couleurs, cliquez sur
""Non""" & vbLf
Msg = Msg & "Pour abandonner, cliquez sur ""Annuler"""

choix = MsgBox(Msg, vbYesNoCancel)
Select Case choix
Case 2: Exit Sub
Case 6: GoSub SelectCell: GoSub SelectPlage
Case 7: GoSub SelectPlage
End Select

Li1 = plage.Range("A1").Row
Col1 = plage.Range("A1").Column
derLi = Li1 + plage.Rows.Count - 1
derCol = Col1 + plage.Columns.Count

Application.ScreenUpdating = False
Columns(derCol).Insert Shift:=xlToRight
Select Case choix
Case 6
couleur = cell.Interior.ColorIndex
For i = Li1 To derLi
If Cells(i, Col1).Interior.ColorIndex = couleur Then
Cells(i, derCol).Value = couleur
If Application.CountA(Cells(i, Col1), Cells(i, derCol - 1)) = 0 Then
Cells(i, derCol).Value = couleur + 1
End If
End If
Next
Case 7
For i = Li1 To derLi
couleur = Cells(i, Col1).Interior.ColorIndex
If couleur < 0 Then couleur = couleur * -1
Cells(i, derCol).Value = couleur
If Application.CountA(Cells(i, Col1), Cells(i, derCol - 1)) = 0 Then
Cells(i, derCol).Value = couleur + 1
End If
Next
End Select

Range(Cells(Li1, Col1), Cells(derLi, derCol)).Sort _
Cells(Li1, derCol), xlAscending
Columns(derCol).Delete Shift:=xlToLeft
Exit Sub

SelectCell:

Msg = vbLf & "Sélectionner une cellule de la couleur à trier :"
On Error Resume Next
Application.DisplayAlerts = False
Set cell = Application.InputBox(Msg, , , , , , , 8)
Application.DisplayAlerts = True
If Err <> 0 Then
Err.Clear: Exit Sub
End If

If cell.Count > 1 Then
MsgBox "Sélectionnez une seule cellule, SVP"
TriParCouleurs
End If
Return

SelectPlage:

Msg = "Sélectionnez la plage des données à trier"
On Error Resume Next
Application.DisplayAlerts = False
Set plage = Application.InputBox(Msg, , , , , , , 8)
Application.DisplayAlerts = True
If Err <> 0 Then
Err.Clear: Exit Sub
End If

If plage.Rows.Count = 1 Then
MsgBox "La plage à trier doit comporter au moins 2 lignes..."
TriParCouleurs
End If
Return

End Sub
Frédéric Sigonneau, (N°1036)
Supprimer les lignes vides
Comment supprimer toutes les lignes vides ?
Sub SuppLigneVides()
With ActiveSheet.UsedRange
derLi = .Row + .Rows.Count - 1
End With
Application.ScreenUpdating = False
For r = derLi To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
End Sub

Attention, il est important de toujours commencer par le bas et de remonter !
Frédéric Sigonneau, (N°1035)
Suppression lignes avec des nombres
Je voudrais dans la plage (a1:a100 supprimer les lignes dont la cellule comprend un nombre et laisser les lignes dont la cellule comprend du texte.
[A1:A100].SpecialCells(xlCellTypeConstants, xlNumbers).EntireRow.Delete
Laurent Longre, (N°1034)
Suppression de ligne conditionnelle
Je souhaiterais supprimer la ligne complète si au début de cette ligne, dans la colonne A, il y a le mot "toto".
Sub suppr_ligne_de_toto()
For lin = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row To 1
Step -1
If Cells(lin, 1) = "toto" Then Rows(lin).Delete Shift:=xlUp
Next lin
End Sub

je m'explique
ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row c'est le n° de
la dernière ligne utilisée dans la feuille
je balaie les lignes en partant de la dernière et en remontant (step -1)
pourquoi ? parce que si je descends, quand j'ôte une ligne, je me retrouve
décalé d'un cran et ça me fatique de remonter pour ne pas rater un toto.
cells(lin,1) est la première cellule de la ligne n° lin
Jacques Chaussard, (N°1033)
Selection conditionnelle de lignes multiples
Je voudrais sélectionner des lignes répondant à un critère donné pour les copier en bloc sur une autre feuille...
En partant du principe que tout ça se passe dans la Feuille
"Feuil1", que le nombre de lignes à examiner soit 20 et que le
critère soit "MonCritère" à vérifier dans la cellule "A" de
chaque ligne (à remplacer par tes valeurs donc) :

Sub JeSelectionne()
i = 1
NombreLignes = 20
While i < NombreLignes + 1
If Cells(i, 1) = MonCritere Then
MesLignes = MesLignes & i & ":" & i & ","
End If
i = i + 1
Wend

MesLignes = Left(MesLignes, Len(MesLignes) - 1)

Sheets("Feuil1").Range(MesLignes).Select

End Sub

Attention tout de même aux limites du nombre de lignes
distinctes admises dans la sélection multiple (255 ?)
Bernard Rey, (N°1032)
Recopie conditionnelle de valeurs dans une autre colonne sans doublon
J'ai une colonne de valeurs. Je contrôle le contenu de chaque cellule, et selon certains critères, je copie le contenu de la cellule dans une colonne X. Comment faire pour : 1- vérifier que cette valeur n'existe pas déjà dans cette colonne X 2 - si elle n'existe pas, trouver la 1ère cellule vide, pour y copier cette valeur.
Sub Ajout_dans_colonne()
Val_Ch = "zaza"
' recherche l'existence de Val_Ch dans la colonne C
n = EQUIVAL(Val_Ch, [C:C], 0)
' NOTA : on peut aussi écrire n = EQUIVAL(Val_Ch, Columns(3), 0)
If n = 0 Then
' valeur non trouvée ==> ajouter à la fin
Range("C:C").End(xlDown)(2) = Val_Ch
End If
End Sub

Function EQUIVAL(Val_Ch As Variant, Tableau As Range, Mode_Rech As Integer)As Variant
' fonctionnement identique à la fonction EQUIV de feuille de calcul
EQUIVAL = 0
On Error Resume Next
EQUIVAL = Application.WorksheetFunction.Match(Val_Ch, Tableau, Mode_Rech)
On Error GoTo 0
End Function
Robert Dezan, (N°1031)
Insérer une colonne au clavier
Est il possible d'insérer une colonne à l'aide d'un raccourci clavier ?
CTRL+"+" (le + du pavé numérique)
Ctrl + "-" tu supprimes la ligne ou la colonne.
si tu sélectionnes la ligne ou la colonne en entier tu évites la boîte de
dialogue.
Michel Bedain, Bruno bdf, (N°1030)
Ligne active en jaune
Je travaille sur des fichiers Excel de type ''base de données''avec beaucoup de colonnes. Avec un doigt je vérifie les données se trouvant sur une feuille papier et avec l'autre main je descends de ligne sur le PC avec le bouton ''flèche vers le bas'' pour atteindre les lignes de données à vérifier. Quelqu'un peut-il me donner un truc simple qui me permette de repérer facilement où se trouve la ligne où se trouve le curseur?
Essaye cette procédure à recopier dans le module de la feuille qui t'intéresse
(clic droit sur son onglet puis 'Visualiser le code'). Elle surligne en jaune la
ligne de la cellule active lorsqu'on la déplace avec les flèches haut et bas :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target(0).EntireRow.Interior.ColorIndex = xlNone
Target.EntireRow.Interior.ColorIndex = 6
Target(2).EntireRow.Interior.ColorIndex = xlNone
End Sub

Dans la feuille de code de l'onglet où tu désires cette proc.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
Cells.Interior.ColorIndex = xlNone
With ActiveCell
.EntireRow.Interior.ColorIndex = 36
' et si tu veux ajouter la sélection de la colonne
' .EntireColumn.Interior.ColorIndex = 36
End With
End Sub
ChrisV, (N°1029)
Lignes et colonnes en cm
Comment dimensionner les lignes et les colonnes en cm ?
La largeur des colonnes dans excel est définie dans une unité qui n'en n'est pas une :
elle dépend de la police par défaut... Du coup c'est pas si facile de dimensionner les Colonnes
en cm...
Pour imprimer, vous aurez peut-être un décalage. Ce décalage dépend de l'imprimante
choisie. Pas d'autre solution que de tatonner si vous avez besoin de quelque chose d'assez
précis.

1) pour les colonnes

Sub colonnesEnCentimetres()
Dim cm As Integer, points As Integer, savewidth As Integer
Dim count As Integer
Application.ScreenUpdating = False
cm = Application.InputBox("entrer la largeur de la colonne en cms",
"Largeur de la colonne souhaitée", Type:=1)
If cm = False Then Exit Sub
points = Application.CentimetersToPoints(cm)
savewidth = ActiveCell.ColumnWidth
ActiveCell.ColumnWidth = 255
If points > ActiveCell.Width Then
MsgBox "la largeur de" & cm & "est trop large" & Chr(10) &
_
"la valeur maxi est de " & _
Format(ActiveCell.Width / 28.3464566929134, _
"0.00"), vbOKOnly + vbExclamation, "largeur non valable"
ActiveCell.ColumnWidth = savewidth
Exit Sub
End If
lowerwidth = 0
upwidth = 255
ActiveCell.ColumnWidth = 127.5
curwidth = ActiveCell.ColumnWidth
count = 0
While (ActiveCell.Width <> points) And (count < 20)
If ActiveCell.Width < points Then
lowerwidth = curwidth
Selection.ColumnWidth = (curwidth + upwidth) / 2
Else
upwidth = curwidth
Selection.ColumnWidth = (curwidth + lowerwidth) / 2
End If
curwidth = ActiveCell.ColumnWidth
count = count + 1
Wend
End Sub

2) pour les lignes (nettement plus court car lignes et colonnes n'ont
pas, au départ, les mêmes unités de mesure

Sub lignesEnCentimetres()
Dim cm As Integer
cm = Application.InputBox("entrer la hauteur de la ligne en
centimetres", "Hauteur de la ligne souhaitée", Type:=1)
If cm Then
Selection.RowHeight = Application.CentimetersToPoints(cm)
End If
End Sub
signé : le grand du gouleyant beaujolais en personne:
Jean-Paul Sabatier, (N°1028)
Sélection conditionnelle de lignes discontinues
Je voudrais par macro sélectionner toutes les lignes répondant à un critère donné. Ces lignes sont discontinues.
En partant du principe que tout ça se passe dans la Feuille
"Feuil1", que le nombre de lignes à examiner soit 20 et que le
critère soit "MonCritère" à vérifier dans la cellule "A" de
chaque ligne (à remplacer par tes valeurs donc) :

Sub JeSelectionne()
i = 1
NombreLignes = 20
While i < NombreLignes + 1
If Cells(i, 1) = MonCritere Then
MesLignes = MesLignes & i & ":" & i & ","
End If
i = i + 1
Wend
MesLignes = Left(MesLignes, Len(MesLignes) - 1)
Sheets("Feuil1").Range(MesLignes).Select
End Sub

Attention tout de même aux limites du nombre de lignes
distinctes admises dans la sélection multiple (255 ?)
Bernard Rey, (N°1027)
Inverser l'ordre des données dans une colonne
Comment faire pour inverser de haut en bas l'ordre des données dans une colonne ?
Le plus simple est de rajouter une série de 1 à n dans une colonne voisine
et de trier sur cette clé de tri par ordre décroissant.
Eric Mermin, (N°1026)
Répartir des données sur plusieurs colonnes
J'ai une colonne qui contient des données du genre bonjour.merci.aurevoir. Je voudrais récupérer chaque mot dans une colonne.
Méthode à la main :
tu sélectionnes ta colonne, menu Données - Convertir -

étape 1 type délimité.
étape 2 : séparateur autre . (le point).
Attention à l'étape3 sur la zone de destination (risque d'écrasement des colonnes voisines)

Par macro :
Sub InverConcatener()
Selection.TextToColumns
Destination:=[B1], DataType:=xlDelimited, _
Other:=True, OtherChar:="."

End Sub
ChrisV, (N°1025)
Numérotation de lignes : pb d'effacement
Quand je numérote mes lignes, en cas d'effacement de la ligne, j'aimerais que la ligne qui la remplace porte le numéro que j'ai effacé.ex: si j'efface la ligne 5 la ligne 6 doit devenir 5 et la 7 devient 6 et ainsi de suite.
La solution que j'utilise est la suivante :
Dns la cellule A2 =NBVAL($1:A1)+1
puis recopie la formule dans toutes les lignes en dessous.

Seule ombre au tableau.
Si tu copies par exemple la ligne 8 et tu fais ensuite 'Insérer les cellules
copiées' tu auras la ligne 9 en double
'=ligne()' ou '=ligne()+n, te donneras toujours le bon numéro de ligne.

Quand j'insère une ligne je copie la formule dans les cases vides et la première qui est pleine pour éviter le problème que tu soulèves. L'utilisation de la fonction ligne() ne marche que si tu n'as pas de ligne vide au dessus. Il y a aussi un problème si tu insères des lignes vides que tu ne veux pas compter! (par exemple des lignes pour un titre).

Une solution à ce problème est d'utiliser la formule suivante pour la deuxième ligne et les suivantes (par copier/coller):
=NBVAL($1:DECALER(A2;-1;0))+1
Si la première cellule de la colonne doit être utilisée, il suffit de la mettre à 1.
Philippe Tulliez, Xavier Rouchon, Romain Vercoutère, (N°1024)
Colonne A toujours visible
Je cherche à rendre la colonne A d'une feuille de calcul toujours visible (A l'affichage)
pour afficher en permanence la colonne A :
sélectionnes la colonne B et fait Fenêtre / Figer les volets
Marco, (N°1023)
Colorier une ligne sur deux
Colorier une ligne sur deux même lorsqu'un filtre est affiché ou que des lignes sont masquées.
Sub CouleurLignes()
Dim Ind As Boolean, Ligne As Range
Cells.Interior.ColorIndex = xlNone
For Each Ligne In
ActiveWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Rows
If Ind = True Then
Ligne.Interior.ColorIndex = 6
End If
Ind = Not Ind
Next Ligne
End Sub

Pour changer de couleur, utilisez le classeur : les roues chromatiques
de Geedee
ou celui de Jacques
Thiernesse
.

Cette astuce est illustrée dans ces classeurs exemples :
gd-xlcolors (téléchargé 10866 fois)
jt-colors (téléchargé 12330 fois)
Jacques Chaussard, (N°1022)
Ajout/recopie de lignes
Je voudrais ajouter une ligne en recopiant les formules contenues dans la ligne du dessus mais pas les valeurs
Sub NouvelleLigneEnDessous()

Dim ZtNumLig As Integer
Dim ZtDerCol As Integer

ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select
End Sub
Jacky, (N°1021)
Additionner une cellule sur deux
Je voudrais dans une colonne faire la somme d'une cellule sur deux.
Pour additionner les lignes de la plage A1:A5 dont le numéro de ligne est pair :
=SOMMEPROD((MOD(LIGNE(A1:A5);2)=0)*(A1:A5))

explications :
La fonction Ligne() : renvoie le numéro de la ligne

La fonction =Mod(ligne();2) :
Lorsque le résultat de cette fonction est égal à 1, le numéro de la ligne est impair, si le
résultat est égal à 0, le numéro de la ligne est pair.

Une autre façon d'écrire cette section de la formule : =MOD(LIGNE(A1:A5);2)=0
Sélectionne les cellules B1:B5 dans la cellule active b1 , écris la formule
suivante : =MOD(LIGNE(A1:A5);2)=0

Valide la saisie de la formule en B1
par ctrl+ Maj + Enter, la formule est transformée en formule matricielle.
Le résultat affiché en cellules B1:B5 est : Faux,Vrai,Faux,Vrai,Faux
Dans une feuille de calcul excel, la valeur d'une cellule affichant
"Vrai" = 1 , "Faux" = 0

L'autre façon d'écrire cette formule est : =MOD(LIGNE(A1:A5);2)=0
Ecris cette formule dans une cellule
Sélectionne dans la barre des formules le texte
LIGNE(A1:A5) de la formule, Appuies sur la touche F9, tu obtiens ce résultat:

LIGNE(A1:A5) est remplacé par une matrice des numéros de lignes de la plage de cellules.
{1;2;3;4;5}
La nouvelle formule est : =MOD({1;2;3;4;5};2)=0
Chaque élément de la matrice est testé par la fonction Mod()
Tu peux inscrire chacune de ces formules dans une cellule pour tester chaque élément de la
matrice par la fonction mod() et la valeur logique Faux ou Vrai s'affichera dans la cellule

Formule V.Logique V.Numérique
=Mod(1;2)=0 = Faux ou 0
=Mod(2;2)=0 = Vrai ou 1
=Mod(3;2)=0 = Faux ou 0
=Mod(4;2)=0 = Vrai ou 1
=Mod(5;2)=0 = Faux ou 0

La dernière section de la formule : (A1:A5)
Saisis ceci dans une formule =A1:A5
Sélectionne le texte A1:A5 et appuies sur F9
tu obtiens la matrice suivante : ={2;4;6;8;10}
Chaque élément de cette matrice représente la valeur
contenue dans chacune des cellules de la matrice.

La formule du début :
=SOMMEPROD((MOD(LIGNE(A1:A5);2)=0)*(A1:A5))

devient par simple substitution :
=SOMMEPROD(({0;1;0;1;0})*{2;4;6;8;10})

En multipliant chaque élément de la première matrice par
la valeur correspondante dans l'autre matrice on obtient:

Le produit des 2 matrices
= 0 * 2 = 0
= 1 * 4 = 4
= 0 * 6 = 0
= 1 * 8 = 8
= 0 * 10 = 0

La somme des produits :
=0 + 4 + 0 + 8 + 0 = 12

Résultat obtenu : 12

La définition de la fonction Sommeprod()
selon l'aide d'excel:
"Multiplie les valeurs correspondantes des matrices
spécifiées et calcule la somme de ces produits"

La fonction sommeprod() peut regrouper jusqu'à 30 arguments.
On pourrait remplacer le symbole * par le point virgule
comme séparateur d'arguments et on aurait ceci :

=SOMMEPROD(({0;1;0;1;0});{2;4;6;8;10})

Dernier élément : chacune des matrices doit avoir la même dimension.
Denis Michon, (N°1020)