cs_encgt
Messages postés26Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention19 avril 2007
-
11 avril 2007 à 22:16
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 2011
-
12 avril 2007 à 11:17
Bonjour,
je veux ajouter des colonnes à un fichier excel via une recherchevenvba,
mais je me suis heurtée à une petite difficulté: la valeur recherchée
dans ma recherchev ne saute pas de ligne!!!!! comment je peut écrire la
valeur recherché???
voici le code et merci pour votre aide
Sub ajoutcolonnes()
For i = Range("k65536").End(xlUp).Row To 2 Step -1
cs_encgt
Messages postés26Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention19 avril 2007 12 avril 2007 à 00:07
Merci pour ta réponse
en fait je veut ajouter 3 colonnes et ce via la recherchev qui va chercher les données dans un tableau dans une autre feuille
je veut k les colonnes ajoutés correspondent chacune à un numero que je l´ai déja dans mon tableau , c´est pouquoi j utilise la recherchev mais en procédant de la sorte j ´ai tjrs le valeur recherché =á une celleule figé elle ne varie pas avec les lignes
le probleme c´est que je sais pas si c´est toujours j´airais 5700 lignes dans mon fichier , c´est vrmt variable , c´est pourquoi j´ai pensé à un compeur mais le prblm c´est que la valeur recherché dans le code (voir ds autre msg haut) est figée c´est toujours k2 alors qu´elle doit être k3, k4,k256..... en fonction de la ligne
Un grd merci par avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_lermite222
Messages postés492Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 2 juillet 20124 12 avril 2007 à 03:56
Bonsoir,
1°) dans Excel ont n'ajoute pas de colonne, ce n'est pas comme dans un grid de VB
ont écrit dessus point.
2°) Se serrait aimable d'écrire en clair (je ne comprend pas bien le language SMS)
3°) tu garde la variable i pour la lecture ou l'écriture, mais vu que tu fait une sélection, l'écriture se ferra sur la même ligne que la lecture
dim i as integer, Dest as int
Worksheets("Sheet2").Activate 'rem le nom de la feuille où tu doit copier
Dest=1
'rem :avec rows.count tu va jusqu'au bout des données mais pas plus loin
for i=1 to Worksheets("Sheet1").rows.count 'rem sheet1=nom feuille des données
if Worksheets("Sheet1").cells(i,11)="le tri que tu compare" then
activesheet.cells(Dest,24).value=Worksheets("Sheet1").cells(i,11).value
Dest=Dest+1
end if
next i
essaie avec ca
NB: la fonction Formulalocal ne sert que si tu compte exporter ta source en Angleterre ou au EU et que tu emploie la fonction Range("A1") au lieu de Cells sinon...ca sert à rien, à moins que je me trompe.
cs_lermite222
Messages postés492Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 2 juillet 20124 12 avril 2007 à 04:06
Ajout..
Le code que je t'ai communiquer ne fonctionnerra que pour une seule colonne,
y a t'il 3 colonne sur chaque feuille? si oui il faut indexer également 11 et 24 à mettre dans des variables et repasser le code 3 fois.
Sinon explique mieux ce que tu veux faire exactement.
A++
cs_encgt
Messages postés26Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention19 avril 2007 12 avril 2007 à 09:58
Bonjour
Merci pour ton aide
je me réexplique: j'ai deux fichiers excel :
le premier : contient 4 colonnes : numero de projet , nom projet, nom client,type de projet
le deuxième: j'ai plusieurs colonnes dont le numero de projet , je cherche alors à ajouter dans ce fichier le nom de projet , nom du client et type de projet en fonction du numero de projet c'est pourquoi je met la recherhev , il ne s'agit pas alos d'un copiage c'est bien une recherche de données ...
j'ai réussi à écrire un code le voilà
Range("x1").FormulaLocal = "type"
Range("x2").FormulaLocal = "=RECHERCHEV(k2;type_app_aff!tableaffairetype;2;faux)"
Range("x2").AutoFill Range("x2:x5700")
le problème de ce code c'est que je doit à chaque utilisation de la macro rentrer manuellment dans visual basic editor le nombre de ligne (5700 varie), c'est pourquoi j'ai pensé à un compteur ...
voilà , j'éspère que c'est plus clairr mnt
Merci pour votre aide
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 12 avril 2007 à 10:54
Salut,
Le code que je t'ai donné fonctionne. S'il y a quelque chose qui ne fonctionne pas, c'est la formule, je pense. Il doit y avoir des signes de $ en trop ou mal placés dans ta plage qui sert à la recherche.
Comme tu sembles avoir donner des noms à tes plages, il faudrait voir quel est la valeur de ces noms...
Essaie sans utiliser de noms de plage.
Place-toi en X2 et écris une formule de RechercheV manuellement et copie-la sur plusieurs lignes. Est-ce que la formule semble correcte sur toutes ces lignes ? Si oui, inscris celle qui est en X2 (telle quelle) dans le code que je t'ai fourni.
Si tu veux que ce programme puisse être utilisé sur des PC avec configuration anglaise ou autre, tu devras changer FormulaLocal par Formula et utiliser les termes et séparateurs anglais.
exemple en français: Sub AjoutColonnes()
Dim nbLignes as long
nbLignes = Range("K65536").End(xlUp).Row
Range("X2:X" & nbLignes). FormulaLocal = "= RechercheV(A2; C:E; 3; FAUX)"
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 12 avril 2007 à 11:17
Reprenons simplement; voici personnellement comment je fais :
Ton nb de lignes égal à 5700, c'est en fait le nombre de numéro de projet de ta 4ème colonne je suppose (vu que c'est la seule qui n'est pas concernée par la copie des lignes, et vu ton code, je déduis que c'est la colonne K).
La première chose à faire comme te l'a dit MPi, c'est de récupérer le nb de lignes que tu as automatiquement, soit en partant de ta première ligne et en descendant vers le bas si tu n'as aucune ligne vide dans ta colonne, soit en partant du bas (ligne 65536) et en remontant.
Vers le bas :
Dim NumLigne as Integer
NumLigne = Right(Worksheets("Feuille1").Range("K1").End(xlDown).Address, (Len(Worksheets("Feuille1").Range("K1").End(xlDown).Address) - InStrRev(Worksheets("Feuille1").Range("K1").End(xlDown).Address, "$", , vbTextCompare)))
Vers le haut :
Dim NumLigne as Integer
NumLigne = Right(Worksheets("Feuille1").Range("K1").End(xlUp).Address, (Len(Worksheets("Feuille1").Range("K1").End(xlUp).Address) - InStrRev(Worksheets("Feuille1").Range("K1").End(xlUp).Address, "$", , vbTextCompare)))
Ensuite, tu n'as plus qu'à recopier les formules que tu as écrites dans les cellules X2, Y2 et Z2 (en une seule opération, tant qu'à faire, les colonnes sont voisines) :
Worksheets("Feuille1").Range("x1").FormulaLocal = "type"
Worksheets("Feuille1").Range("x2").FormulaLocal = "=RECHERCHEV(k2;type_app_aff!tableaffairetype;2;faux)"
Worksheets("Feuille1").Range("y1").FormulaLocal = "nom client"
Worksheets("Feuille1").Range("y2").FormulaLocal = "=RECHERCHEV(k2;type_app_aff!ffairetype;3;faux)"
Worksheets("Feuille1").Range("z1").FormulaLocal = "nom projet"
Worksheets("Feuille1").Range("z2").FormulaLocal = "=RECHERCHEV(k2;type_app_aff!tableaffairetype;4;faux)"
'Copie des formules
Worksheets("Feuille1").Range("X2:Z" & NumLigne).FillDown
Normalement, ça doit suffire. Les noms de plage ne doivent poser aucun problème, mais quand tu utilises des objets Range, si ton bouton est attaché à une autre feuille du classeur Excel, pense à définir l'objet Range en fonction de l'objet Worksheets (nom de la feuille).
Autre chose, personnellement, j'ai une version française d'EXCEL, et j'utilise plutôt le Range. FormulaR1C1 ... Et bien, je suis obligé d'utiliser l'écriture internationale avec VLOOKUP.