[vba] variable objet....Non définie
Adamaro
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Dans le cadre de mon travail, je dois remplacer, dans une liste excel, une cellule par plusieurs cellules côte à côte.
Par exemple, remplacer toutes les cellules contenant F-035 par deux cellules contant L10 et L15 et toutes les cellules contant F-036 par trois cellules contenant L1, L2 et L8.
Etant débutant en vba, j'ai réussi à glâner quelques informations sur internet qui m'ont permises d'écrire un début de programme (pour un seul type de cellule):
Sub test()
Dim LocF035 As String
Dim Cell As Range
LocF035 = "F-035"
'Selection de la plage de cellules à remplacer
ActiveSheet.UsedRange.Select
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Offset(0, 0).Select
ligne = ActiveCell.Row: colonne = ActiveCell.Column
Range(Cells(2, 4), Cells(ligne, colonne)).Select
'Test de chaque cellules de la sélection
For Each Bloc In Selection
'Recherche du code du local type F-035
Set Cell = Range(Cells(2, 4), Cells(ligne, colonne)).Find(LocF035, lookat:=xlWhole)
Cells(Cell.Row, Cell.Column).Select
Cells(ActiveCell.Row, ActiveCell.Column) = "L10"
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "L15"
Next Bloc
End Sub
Lorsque je l'exécute, il m'indique "Variable objet ou variable de bloc With non définie" à la ligne "Cells(Cell.Row, Cell.Column).Select" malgré que le résultat final est correct (toutes mes cellules contant F-035 sont remplacées).
Le problème est que si je veux ajouter une deuxième recherche de type de cellule (F-036 par exemple), l'erreur ressurgit et les cellules F-036 sont à moitié remplacées.
Sub test()
Dim LocF035 As String
Dim LocF036 As String
Dim Cell As Range
LocF035 = "F-035"
LocF036 = "F-036"
'Selection de la plage de cellules à remplacer
ActiveSheet.UsedRange.Select
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Offset(0, 0).Select
ligne = ActiveCell.Row: colonne = ActiveCell.Column
Range(Cells(2, 4), Cells(ligne, colonne)).Select
'Test de chaque cellules de la sélection
For Each Bloc In Selection
'Recherche du code du local type F-035
Set Cell = Range(Cells(2, 4), Cells(ligne, colonne)).Find(LocF035, lookat:=xlWhole)
Cells(Cell.Row, Cell.Column).Select
Cells(ActiveCell.Row, ActiveCell.Column) = "L10"
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "L15"
'Recherche du code du local type F-036
Set Cell = Range(Cells(2, 4), Cells(ligne, colonne)).Find(LocF036, lookat:=xlWhole)
Cells(Cell.Row, Cell.Column).Select
Cells(ActiveCell.Row, ActiveCell.Column) = "L1"
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "L2"
Cells(ActiveCell.Row, ActiveCell.Column + 2) = "L8"
Next Bloc
End Sub
J'ai tenté de stocker la position des cellules à remplacer dans deux variables de type Integer mais le problème persiste.
Mon but étant à la fin de pouvoir remplacer d'un coup tous les types de cellules de ma feuille (plus d'une vingtaine).
Si quelqu'un à une solution ou une autre méthode à me proposer ce serait fort sympathique.
Merci d'avance
Dans le cadre de mon travail, je dois remplacer, dans une liste excel, une cellule par plusieurs cellules côte à côte.
Par exemple, remplacer toutes les cellules contenant F-035 par deux cellules contant L10 et L15 et toutes les cellules contant F-036 par trois cellules contenant L1, L2 et L8.
Etant débutant en vba, j'ai réussi à glâner quelques informations sur internet qui m'ont permises d'écrire un début de programme (pour un seul type de cellule):
Sub test()
Dim LocF035 As String
Dim Cell As Range
LocF035 = "F-035"
'Selection de la plage de cellules à remplacer
ActiveSheet.UsedRange.Select
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Offset(0, 0).Select
ligne = ActiveCell.Row: colonne = ActiveCell.Column
Range(Cells(2, 4), Cells(ligne, colonne)).Select
'Test de chaque cellules de la sélection
For Each Bloc In Selection
'Recherche du code du local type F-035
Set Cell = Range(Cells(2, 4), Cells(ligne, colonne)).Find(LocF035, lookat:=xlWhole)
Cells(Cell.Row, Cell.Column).Select
Cells(ActiveCell.Row, ActiveCell.Column) = "L10"
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "L15"
Next Bloc
End Sub
Lorsque je l'exécute, il m'indique "Variable objet ou variable de bloc With non définie" à la ligne "Cells(Cell.Row, Cell.Column).Select" malgré que le résultat final est correct (toutes mes cellules contant F-035 sont remplacées).
Le problème est que si je veux ajouter une deuxième recherche de type de cellule (F-036 par exemple), l'erreur ressurgit et les cellules F-036 sont à moitié remplacées.
Sub test()
Dim LocF035 As String
Dim LocF036 As String
Dim Cell As Range
LocF035 = "F-035"
LocF036 = "F-036"
'Selection de la plage de cellules à remplacer
ActiveSheet.UsedRange.Select
ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Offset(0, 0).Select
ligne = ActiveCell.Row: colonne = ActiveCell.Column
Range(Cells(2, 4), Cells(ligne, colonne)).Select
'Test de chaque cellules de la sélection
For Each Bloc In Selection
'Recherche du code du local type F-035
Set Cell = Range(Cells(2, 4), Cells(ligne, colonne)).Find(LocF035, lookat:=xlWhole)
Cells(Cell.Row, Cell.Column).Select
Cells(ActiveCell.Row, ActiveCell.Column) = "L10"
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "L15"
'Recherche du code du local type F-036
Set Cell = Range(Cells(2, 4), Cells(ligne, colonne)).Find(LocF036, lookat:=xlWhole)
Cells(Cell.Row, Cell.Column).Select
Cells(ActiveCell.Row, ActiveCell.Column) = "L1"
Cells(ActiveCell.Row, ActiveCell.Column + 1) = "L2"
Cells(ActiveCell.Row, ActiveCell.Column + 2) = "L8"
Next Bloc
End Sub
J'ai tenté de stocker la position des cellules à remplacer dans deux variables de type Integer mais le problème persiste.
Mon but étant à la fin de pouvoir remplacer d'un coup tous les types de cellules de ma feuille (plus d'une vingtaine).
Si quelqu'un à une solution ou une autre méthode à me proposer ce serait fort sympathique.
Merci d'avance
A voir également:
- [vba] variable objet....Non définie
- Vente objet occasion entre particulier - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Erreur signet non défini ✓ - Forum Word
- Variable objet ou variable de bloc with non définie ✓ - Forum VB / VBA
- L'indice n'appartient pas à la sélection vba - Forum VB / VBA
5 réponses
Bonjour,
Je pense que ça ira mieux avec...
A+
Je pense que ça ira mieux avec...
Sub TestB() Dim Cel As Range For Each Cel In ActiveSheet.UsedRange If Cel.Value = "F-035" Then Cel = "L10": Cel.Offset(0, 1) = "L15" ElseIf Cel.Value = "F-036" Then Cel = "L1": Cel.Offset(0, 1) = "L2": Cel.Offset(0, 2) = "L8" End If Next Cel End Sub
A+
Merci à toi!
Mais maintenant, on me demande de les présenter en ligne (et non plus en colonne). Le hic c'est que je ne dois pas ecraser les informations qui se trouvent dessous. Enfin en gros faut que je les insère.
Si quelqu'un à un tuyau à me donner je suis preneur.
Merci d'avance.
Mais maintenant, on me demande de les présenter en ligne (et non plus en colonne). Le hic c'est que je ne dois pas ecraser les informations qui se trouvent dessous. Enfin en gros faut que je les insère.
Si quelqu'un à un tuyau à me donner je suis preneur.
Merci d'avance.
Beh ont a tout les tuyaux que tu veux, encore faudrait-il préciser le diamètre :DD,
les présenter en ligne (et non plus en colonne). ?? la macro les met en ligne !
ne dois pas ecraser les informations qui se trouvent dessous ??
Un exemple de ton classeur façiliterait la compréhension.
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
les présenter en ligne (et non plus en colonne). ?? la macro les met en ligne !
ne dois pas ecraser les informations qui se trouvent dessous ??
Un exemple de ton classeur façiliterait la compréhension.
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
XD
En effet, un petit exemple s'impose^^
Voila un petit extrait de mon classeur:
Les codes à remplacer se trouvent dans la colonne D.
Actuellement, la macro remplace ces codes en ajoutant des valeurs dans les cellules D, E, F etc..
Or maintenant, je dois les présenter en ligne.
Par exemple, lorsque la macro rencontrera "F-035" en D1, il remplacera la cellule D1 par "L10" puis la cellule D2 par "L15" tout en décalant les données se trouvant en dessous.
Comme je sais que je suis pas du tout doué en explication, voici un exemple du résultat final souhaité:
J'espère avoir été plus ou moins^^
Merci d'avance
En effet, un petit exemple s'impose^^
Voila un petit extrait de mon classeur:
A B C D E F 1 bureau chef service RH Z4 04 F-035 2 bureau secrétariat RH Z4 03 F-036 3 bureau double RH Z4 06 F-035
Les codes à remplacer se trouvent dans la colonne D.
Actuellement, la macro remplace ces codes en ajoutant des valeurs dans les cellules D, E, F etc..
Or maintenant, je dois les présenter en ligne.
Par exemple, lorsque la macro rencontrera "F-035" en D1, il remplacera la cellule D1 par "L10" puis la cellule D2 par "L15" tout en décalant les données se trouvant en dessous.
Comme je sais que je suis pas du tout doué en explication, voici un exemple du résultat final souhaité:
A B C D E F 1 bureau chef service RH Z4 04 L10 2 bureau chef service RH Z4 04 L15 3 bureau secrétariat RH Z4 03 F-036 4 bureau double RH Z4 06 L10 5 bureau double RH Z4 06 L15
J'espère avoir été plus ou moins^^
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Comme ça alors ?
A+
Sub TestC() Dim DerLig As Long, Lig As Long, LigDeb As Integer DerLig = ActiveSheet.Range("D65535").End(xlUp).Row LigDeb = 1 'Première ligne où commence les données. For Lig = DerLig To LigDeb Step -1 Select Case Cells(Lig, 4) Case "F-035" 'remplacer la valeur de la cellule Cells(Lig, 4) = "L10": Rows(Lig + 1).Insert xlUp Rows(Lig).Copy Rows(Lig + 1): Cells(Lig + 1, 4) = "L15" Case "F-036" Cells(Lig, 4) = "L1": Rows(Lig + 1 & ":" & Lig + 2).Insert xlUp Rows(Lig).Copy Rows(Lig + 1 & ":" & Lig + 2): Cells(Lig + 1, 4) = "L2":: Cells(Lig + 2, 4) = "L8" End Select Next Lig End Sub
A+