Décalage de cellules en fonction d'un évènement
Résolu
winflow
Messages postés
157
Date d'inscription
Statut
Membre
Dernière intervention
-
winflow Messages postés 157 Date d'inscription Statut Membre Dernière intervention -
winflow Messages postés 157 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Décalage de cellules en fonction d'un évènement
- Fonction si et - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Verrouiller cellules excel - Guide
- Faites afficher avec un fond coloré les cellules qui contiennent une valeur comprise entre 250 et 350. quel nombre est dessiné en surbrillance ? ✓ - Forum Excel
- Fusionner deux cellules excel en gardant le contenu - Guide
4 réponses
Bonjour,
Essaye ceci :
Comme tu as plusieurs +, un pour chaque "paragraphe" (1-, 2-, 3 etc...), il sera possible de faire la même chose sur les + des autres paragraphes. Pour l'instant cela fonctionne avec celui du 1- comme souhaité...
Essaye ceci :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Si plus d'une cellule sélectionnée, on quitte la procédure (évite de bugguer)
If Target.Count > 1 Then Exit Sub
'Si le contenu de la cellule sélectionnée n'est pas + alors on quitte la procédure
If Target.Value <> "+" Then Exit Sub
'Si le contenu de la colonne A, même ligne ne commence pas par 1, on quitte
'ceci pour éviter d'insérer n'importe quoi en cas de clic sur un autre +
If Left(Target.Offset(0, -30), 1) <> 1 Then Exit Sub
'si tout est ok, on copie
Range("A2:AF14").Copy
'et on insère
Range("A2").Insert Shift:=xlDown
'"nettoyage" des zones à saisir
Range("G3:O3,G6:O6,W3:AE3,G8:H8,G9:J9,G10:K10,W8:X8,W9:Z9,W10:Z10").Select
Selection.ClearContents
End Sub
Comme tu as plusieurs +, un pour chaque "paragraphe" (1-, 2-, 3 etc...), il sera possible de faire la même chose sur les + des autres paragraphes. Pour l'instant cela fonctionne avec celui du 1- comme souhaité...
winflow
Messages postés
157
Date d'inscription
Statut
Membre
Dernière intervention
22
Alors pourrais tu m'expliquer plus précisément ton code parce que j'ai du mal à suivre par ailleurs cela bloque après avoir cliquer 3 fois sur le +. Autre pb, lorsque je clique sur le premier + rien ne se passe c'est en cliquant sur le deuxième que cela fonctionne qui insère donc le premier formulaire ce qui n'est pas logique. Les if sont-ils imbriqués ? Car il n'ont pas de End If. Pourquoi ne pas rassembler toutes les conditions dans un seul if ?
Tu veux, par exemple pour AE1, lors d'un clic sur le +, les cellules de A2 à AF14 soient "dupliquées".
Pour cela, il faut tout d'abord repérer le clic sur un +, grâce à l'événement Selection_Change()
1- il ne doit pas y avoir plus d'une cellule sélectionnée sinon ça buggue. Donc :
Donc :
Si le caractère de gauche de la cellule située sur la même ligne que celle du + qu'on vient de cliquer est un 1 :
J'ai créé et testé cette macro avec le fichier fourni. Si cela ne fonctionne pas bien c'est que ton fichier est différent......
Pour cela, il faut tout d'abord repérer le clic sur un +, grâce à l'événement Selection_Change()
1- il ne doit pas y avoir plus d'une cellule sélectionnée sinon ça buggue. Donc :
If Target.Count > 1 Then Exit Sub2- Le contenu de la cellule sélectionnée doit être +. Donc :
If Target.Value <> "+" Then Exit Sub3- La copie et l'insertion des cellules A2:AF14 ne doit se faire que pour le 1 - Système de supervision. On se garde de côté la possibilité de faire ça pour les 2 - Interface supervision et 3 - Automate...
Donc :
Si le caractère de gauche de la cellule située sur la même ligne que celle du + qu'on vient de cliquer est un 1 :
If Left(Target.Offset(0, -30), 1) <> 1 Then Exit Sub4- Copie/Insertion => pas de souci???
J'ai créé et testé cette macro avec le fichier fourni. Si cela ne fonctionne pas bien c'est que ton fichier est différent......
Pourquoi les If ne possèdent pas de End If ? Est-il possible de concaténer les If ensemble avec des Or ?
Range("A2").Insert Shift:=xlDownque signifie le
Shift:=xlDown</code> ? Cela fonctionne merci maintenant j'ai du faire une fausse manip'. J'ai la même problématique avec le - seulement il doit rester au minimum un formulaire.
Il y a plusieurs façons d'écrire un test If simple.
Soit en plusieurs lignes :
que signifie le Shift:=xlDown
C'est la destination des cellules devant être remplacées par l'insertion. Lorsque tu insères des cellules sous excel, tu as le choix de placer les cellules à remplacer, au dessous, à gauche, à droite etc...
Là, on les veux en dessous, donc xlDown...
J'ai la même problématique avec le - seulement il doit rester au minimum un formulaire Et là, ça se complique.......
Lorsque tu as 5 (par exemple) formulaires, lequel effacer???
ça semble problématique.
Expose bien ton souhait alors...
Soit en plusieurs lignes :
If Machin = Truc Thenou en une seule ligne :
Bidule = chose
End If
If Machin = Truc Then Bidule = choseCes deux tests sont rigoureusement identiques, c'est juste selon les habitudes du codeur...
que signifie le Shift:=xlDown
C'est la destination des cellules devant être remplacées par l'insertion. Lorsque tu insères des cellules sous excel, tu as le choix de placer les cellules à remplacer, au dessous, à gauche, à droite etc...
Là, on les veux en dessous, donc xlDown...
J'ai la même problématique avec le - seulement il doit rester au minimum un formulaire Et là, ça se complique.......
Lorsque tu as 5 (par exemple) formulaires, lequel effacer???
ça semble problématique.
Expose bien ton souhait alors...
Voici la proposition du jour.
Tu pourras, grâce à ce code supprimer toutes les supervisions, le code en créera une nouvelle le cas échéant....
Tu pourras, grâce à ce code supprimer toutes les supervisions, le code en créera une nouvelle le cas échéant....
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Lig As Integer
If Target.Count > 1 Then Exit Sub
Select Case Target.Value
Case "+"
If Left(Target.Offset(0, -30), 1) <> 1 Then Exit Sub
'On cherche la ligne ou insérer
'Soit la ligne au dessus de : 2- Interface supervision
Lig = Columns(1).Cells.Find("2 - Interface supervision").Row - 1
'S'il n'y a aucune supervision alors Lig = 2
'Si Lig = 2, il faut saisir la supervision au lieu de la copier coller
If Lig = 2 Then
'on insère 13 lignes
Rows("3:15").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'fusionnage des cellules et mise en forme
MiseEnForme Range("G3:L3")
MiseEnForme Range("W3:AE3")
MiseEnForme Range("G6:L6")
MiseEnForme Range("G8:H8")
MiseEnForme Range("W8:X8")
MiseEnForme Range("G9:I9")
MiseEnForme Range("W9:Z9")
MiseEnForme Range("G10:K10")
MiseEnForme Range("W10:Z10")
Grise Range("A12:D12")
Encadre Range("A13:AF14")
SaisieEtiquettes
Range("G3").Select
Else
'sinon, s'il existe déjà au moins une supervision, on la copie
Range("A2:AF14").Copy
'on insère à partir de la ligne trouvée plus haut
Range("A" & Lig).Insert Shift:=xlDown
Application.CutCopyMode = False
Range("G3").Select
End If
Case "-"
If Left(Target.Offset(0, -31), 1) <> 1 Then Exit Sub
'On cherche la ligne ou on a insérer la dernière fois
'Soit la ligne au dessus de : 2- Interface supervision
Lig = Columns(1).Cells.Find("2 - Interface supervision").Row - 1
'petit test pour ne pas tout supprimer
If Lig > 10 Then
'ON SUPPRIME!
Rows(Lig - 12 & ":" & Lig).Delete
End If
Range("A1").Select
Case Else
Exit Sub
End Select
End Sub
Sub MiseEnForme(Rng As Range)
With Rng
.Merge
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Color = -16711681
.TintAndShade = 0
.Weight = xlMedium
End With
With .Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Color = -16711681
.TintAndShade = 0
.Weight = xlMedium
End With
With .Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Color = -16711681
.TintAndShade = 0
.Weight = xlMedium
End With
With .Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Color = -16711681
.TintAndShade = 0
.Weight = xlMedium
End With
With .Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
End With
End Sub
Sub Grise(Rng As Range)
With Rng
.Font.Bold = True
With .Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.249946592608417
.PatternTintAndShade = 0
End With
With .Font
.ColorIndex = 1
.TintAndShade = 0
End With
End With
End Sub
Sub Encadre(Rng As Range)
With Rng
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With
End Sub
Sub SaisieEtiquettes()
Range("A3").Value = "Localisation"
Range("A3").Font.Bold = True
Range("A3").Font.ColorIndex = 1
Range("A6").Value = "Adresse IP"
Range("A6").Font.Bold = True
Range("A6").Font.ColorIndex = 1
Range("A8").Value = "Mémoire physique"
Range("A8").Font.Bold = True
Range("A8").Font.ColorIndex = 1
Range("A9").Value = "Disque dur"
Range("A9").Font.Bold = True
Range("A9").Font.ColorIndex = 1
Range("A10").Value = "Résolution écran"
Range("A10").Font.Bold = False
Range("A10").Font.ColorIndex = 1
Range("A12").Value = "Observations"
Range("A12").Font.Bold = True
Range("A12").Font.ColorIndex = 1
Range("R3").Value = "Type supervision"
Range("R3").Font.Bold = True
Range("R3").Font.ColorIndex = 1
Range("R8").Value = "Date d'aquisition"
Range("R8").Font.Bold = True
Range("R8").Font.ColorIndex = 1
Range("R10").Value = "Imprimante"
Range("R10").Font.Bold = False
Range("R10").Font.ColorIndex = 1
Range("Q9").Value = "Système Exploitation"
Range("Q9").Font.Bold = True
Range("Q9").Font.ColorIndex = 1
End Sub
1- j'ai regardé dans le classeur fourni qu'elles sont les couleurs, les bordures, les couleurs de polices etc...
2- j'ai lancé l'enregistrement d'une macro (onglet développeur - enregistrer une macro)
3- J'ai refait toutes les mises en forme pour que l'enregistreur enregistre le code de chaque manipulation
4- arrêté l'enregistreur
5- j'ai été récupérer le code dans le Module créé par l'enregistreur (dans mon cas Module1)
6- je l'ai un peu épuré et rangé sous forme de Sub...
2- j'ai lancé l'enregistrement d'une macro (onglet développeur - enregistrer une macro)
3- J'ai refait toutes les mises en forme pour que l'enregistreur enregistre le code de chaque manipulation
4- arrêté l'enregistreur
5- j'ai été récupérer le code dans le Module créé par l'enregistreur (dans mon cas Module1)
6- je l'ai un peu épuré et rangé sous forme de Sub...
Voili voilou.
reviens pour ce que tu ne comprends pas, le cas échéant...
J'ai utilisé un Select Case pour différencier le clic sur + du clic sur -...
reviens pour ce que tu ne comprends pas, le cas échéant...
J'ai utilisé un Select Case pour différencier le clic sur + du clic sur -...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Lig As Integer
If Target.Count > 1 Then Exit Sub
Select Case Target.Value
Case "+"
If Left(Target.Offset(0, -30), 1) <> 1 Then Exit Sub
Range("A2:AF14").Copy
'On cherche la ligne ou insérer
'Soit la ligne au dessus de : 2- Interface supervision
Lig = Columns(1).Cells.Find("2 - Interface supervision").Row - 1
'et on insère à partir de cette ligne
Range("A" & Lig).Insert Shift:=xlDown
Application.CutCopyMode = False
Case "-"
If Left(Target.Offset(0, -31), 1) <> 1 Then Exit Sub
'On cherche la ligne ou on a insérer la dernière fois
'Soit la ligne au dessus de : 2- Interface supervision
Lig = Columns(1).Cells.Find("2 - Interface supervision").Row - 1
'petit test pour ne pas supprimer le premier exemplaire
If Lig > 10 Then
'ON SUPPRIME!
Rows(Lig - 12 & ":" & Lig).Delete
End If
Case Else
Exit Sub
End Select
End Sub