Find avec variable, et insertion de ligne

evilson

XLDnaute Nouveau
Bonjour,

Dans un document complexe et confidentiel, je cherche à simplifier la saisie de données quotidienne. Tout allait bien jusqu'à ce que mon document de test fonctionne et que je copie la macro vers l'original, et là, c'est la cata. Je bloque sur des trucs tous bêtes et n'y comprend plus rien. Voici en gros la partie de ma macro qui pose problème :

Je selectionne une valeur dans la feuille "saisie", je la cherche dans la feuille donnée, je descend tout en bas afin de me mettre sur la première case vide que je trouve, et j'insère une ligne.

Ma macro :
Code:
Sub Bouton14_QuandClic()
'
' Bouton14_QuandClic Macro
' Macro enregistrée le 27/06/2011
'
numero = Sheets("Saisie").Cells(5, 2)
Sheets("Données").Select
Columns("C:C").Select
Selection.Find(numero).Select
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Wend
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Insert Shift:=xlDown
'
End Sub[/QUOTE]

le numero est variable, le 5 dans "Cells(5,2) sera remplacé par une variable.
Sauf que si je rentre le numéro correct (exemple : "Robert") dans find : Find("Robert"), je n'ai pas de probleme. Mais si je met juste Find(numero), il me met une erreur, alors que dans mon ancienne macro non. Faut-il que je déclare numéro d'une manière spéciale ?

Ensuite, en executant la macro, j'insère un nombre de ligne correspondant au nombre d'occurance "Robert" trouvées. C'est à dire, au lieu d'insérer une ligne en dessous du dernier "Robert", il m'insère au dessus des "Robert" autant de ligne qu'il a trouvé de "Robert".

En gros le "ActiveCell.Rows("1:1").EntireRow.Select" me selectionne toutes les lignes de mon tableau contenant des "Robert" au lieu de ne selectionner que la ligne actuelle. Le pire, c'est que si j'enlève les deux dernière lignes après le Wend, j'ai bien sélectionner la bonne case ! Il suffirait donc de selectionner la ligne correspondante et d'insérer une ligne, sauf que je n'y arrives pas.

Dire que grâce à la fonction recherche de ce forum j'ai réussi à faire une très belle macro sans demander l'aide de personne mais en utilisant les problèmes d'autres personnes, me voilà bloqué sur un truc tout bête que je n'arrives pas à appeler autrement que "beug".

Merci d'avance de votre aide, rester bloquer sur une bétise comme ça à tendance à m'agacer.

Un grand bravo au forum.

Evilson
 

Pierrot93

XLDnaute Barbatruc
Re : Find avec variable, et insertion de ligne

bonjour,

petite info au passage sur la méthode "find" et le fonctionnement de certains arguments, cf extrait de l'aide vba :
Notes
Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont enregistrés chaque fois que vous utilisez cette méthode. Si vous ne spécifiez aucun paramètre pour ces arguments lors du prochain appel de la méthode, les paramètres enregistrés sont utilisés. Le fait de définir les paramètres de ces arguments modifie les paramètres de la boîte de dialogue Rechercher, ce qui a pour effet de changer les paramètres enregistrés qui sont utilisés lorsque vous ne spécifiez pas les arguments. Pour éviter toute ambiguïté, définissez ces arguments de façon explicite chaque fois que vous utilisez cette méthode.

bon après midi
@+
 

evilson

XLDnaute Nouveau
Re : Find avec variable, et insertion de ligne

Rebonjour,

En modifiant :

Code:
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Insert Shift:=xlDown

Par
Code:
ActiveCell.EntireRow.Insert

Je n'ai plus le problème des multiples ajouts de ligne.

Il ne me reste que le problème de la recherche find avec variable. Vous auriez une idée de la manière dont il faut déclarer la variable ?

Merci d'avance.
 

Pierrot93

XLDnaute Barbatruc
Re : Find avec variable, et insertion de ligne

Re,

as tu vu mon post de 13h04 ? pas sur que ce soit uniquement un problème de variable... sin pour la déclaration :
Code:
Dim numero as String

et regarde ce qu'elle vaut avant que "find" soit exécuté....
 

evilson

XLDnaute Nouveau
Re : Find avec variable, et insertion de ligne

Bonjour,

je n'avais pas vu ton message. Effectivement, celà pourrait me causer des soucis en cas de lancement de diverses macros. Je vais reprendre la version "officielle" plutot que la simplifiée.

Code:
numero = Sheets("Saisie").Cells(5, 2)
Sheets("Données").Select
Columns("C:C").Select
Selection.Find(numero, After:=ActiveCell, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate

Ca a l'air de marcher !

Bon... Vaut mieux être honnête. Ca marchais aussi avec l'ancienne version, sans déclarer numero en string ni rien du tout. Mais le fait que tu m'ais dit de regarder la valeur, m'a permis de me rendre compte que j'avais fait une faute de frappe -_-... Tout ça pour ça...

Bref, merci beaucoup, parce que je buchais pour une bétise !

Bonne après-midi !
 

Discussions similaires