Récupération de données non contigües
Bonjour à tous,
Je suis nouveau sur ce forum, très limité sur excel, c'est la raison pour laquelle je viens vous demander un coup de pouce pour un petit problème qui ne doit pas en être un pour vous :
Je voudrais récupérer des valeurs de la colonne E de la feuille 2 pour les placer dans la colonne B de la feuille 1. Sauf que les valeurs à récupérer ne sont pas contigües mais toutes les 22 lignes. Je vous joins le fichier "exemple" que j'ai rempli manuellement ce qui est fastidieux alors qu'il doit exister une méthode plus simple et surtout rapide.
Je vous remercie d'avance.
Scapin
Salut Scapin,
il manque des infos pour ta demande, du moins si tu veux automatiser à tous les coups.
- comment détermine-t-on la première ligne à copier ?
- où s'arrête-t-on ? Il y a bien plus de lignes que ton tableau n'en compte lui-même!
- y a-t-il d'autres valeurs qui puissent être copiées pour t'aider ?
Avec le code suivant, tu as toutes les valeurs possibles de la colonne 'Feuille2' [E]. Pour l'exemple, elles sont copiées dans la colonne 'Feuille1' [M] avec leur n° de ligne en [N].
'
Dim wks1, wks2 As Worksheet
Set wks1 = Worksheets("Feuille1")
Set wks2 = Worksheets("Feuille2")
'
For x = 20 To wks2.Cells(Rows.Count, 5).End(xlUp).Row Step 22
iLig = iLig + 1
wks1.Cells(iLig, 13) = wks2.Cells(x, 5)
wks1.Cells(iLig, 14) = x
Next
'A+
il manque des infos pour ta demande, du moins si tu veux automatiser à tous les coups.
- comment détermine-t-on la première ligne à copier ?
- où s'arrête-t-on ? Il y a bien plus de lignes que ton tableau n'en compte lui-même!
- y a-t-il d'autres valeurs qui puissent être copiées pour t'aider ?
Avec le code suivant, tu as toutes les valeurs possibles de la colonne 'Feuille2' [E]. Pour l'exemple, elles sont copiées dans la
colonne 'Feuille1' [M] avec leur n° de ligne en [N].
Salut Curulis,
Tout d'abord, merci de t'être occupé de moi si rapidement. Je n'ai pas encore testé ta solution qui me rebute à mettre en pratique. ben
oui, je suis une bille. Et je m'étonne que l'on ne puisse utiliser une formule classique à placer dans la cellule (voir mes essais si
dessous).
Pour la petite histoire et pour une meilleure compréhension de ma requête, le fait est que je suis contrôleur en métrologie dans une
entreprise d'usinage. Dans l'exemple transmis, c'est un relevé d'alésages mesurés à l'aide d'un instrument traditionnel (micromètre)
que je dois comparer avec un relevé fait sur une machine à mesurer tridimensionnelle. Le relevé avec micromètre est sur la feuille1
colonne D et je dois rapporter les valeurs relevées sur 3D en colonne B. Comme tu peux le constater, il y a 38 alésages à relever
répartis sur un diamètre et 38 autres alésages sur un autre diamètre, sur cette référence de pièce. Sur d'autres pièces il y a 70
alésages ce qui est fastidieux à récupérer manuellement d'une autre feuille. D'autant plus, que je dois aussi comparer la position de
chacun.
Ma première idée était d'entrer 2 lignes telles que : =Feuille2!E20 et =Feuille2!E42 et de "tirer" la colonne pour créer une suite
jusqu'à la dernière valeur souhaitée mais cela ne fonctionne pas, l'incrémentation étant 20-42-22-44-24-46... au lieu de 20-42-64-
128...
J'ai donc fait connaissance avec Ecxel-pratique et j'ai eu une lueur d'espoir avec la fonction CELLULE que j'ai tenté d'appliquer par
une formule du type "=Feuille2!E(CELLULE(contenu;K5))" en créant la série nécessaire dans la colonne K. Mais peut-être est-ce un
problème de syntaxe? J'ai pourtant essayé tous les caractères et combinaisons possibles sans succès.
Pour répondre à tes questions :
- comment détermine-t-on la première ligne à copier ?
- où s'arrête-t-on ? Il y a bien plus de lignes que ton tableau n'en compte lui-même!
Je pars de la référence Ø_EXT_HAUT_REF E jusqu'à Ø_EXT_HAUT_38, idem pour la seconde rangée Ø_INT_HAUT_01 jusqu'à Ø_INT_HAUT_38.
Nota, sur le relevé 3D chaque alésage est mesuré sur 2 hauteurs, mais je n'utilise que celle haute.
Je t'ai surligné les 4 premiers diamètres colonne A du fichier "essais.xlsx".
Salut Scapin,
j'avais bien repéré tes valeurs dans ton tableau.
Je veux savoir si la présentation de ce tableau est toujours la même pour :
- pour calculer le nombre de valeurs à copier sur base de la première info '38 SECTIONS DE 2 PTS' .
En effet, tu parles d'un tableau de 70 valeurs (même structure et valeurs à récupérer?) ;
- pouvoir calculer la première valeur sur base du libellé 'Ø EXTERIEUR' ou 'Ø INTERIEUR' ;
- pour caler ma boucle sur 22 avec certitude.
Perso, je ne peux te faire ça qu'en VBA : pas calé en formules!
A+
Salut Scapin,
sur base de ce que je t'ai demandé plus haut, en supposant que j'ai bien senti les choses, voilà une solution VBA qui tient compte :
- de la première info donnant le nombre de valeurs à chercher (ici, 38) ;
- des infos 'Ø EXTERIEUR' et 'Ø INTERIEUR'.
La commande de macro par bouton peut être remplacée par une commande par un clic sur la cellule de ton choix...
Private Sub cmdGO_Click()
'
Dim wks1, wks2 As Worksheet
Set wks1 = Worksheets("Feuille1")
Set wks2 = Worksheets("Feuille2")
'
iRow = wks2.Range("B1").End(xlDown).Row
sFlag = wks2.Cells(iRow, 2)
iRep = CInt(Split(sFlag, " ")(0)) - 1
'
For x = 1 To 2
sFlag = IIf(x = 1, "Ø EXTERIEUR", "Ø INTERIEUR")
iRow = wks2.Range("B:B").Find(sFlag, lookat:=xlWhole).Row + 4
iLig = IIf(x = 1, 4, 6 + iRep)
For y = iRow To iRow + (iRep * 22) Step 22
iLig = iLig + 1
wks1.Cells(iLig, 2) = wks2.Cells(y, 5)
wks1.Cells(iLig, 7) = wks2.Cells(y + 18, 5)
Next
Next
'
End SubA+
Salut Curulis,
Je te remercie de t'être occupé de mon cas. Ta solution fonctionne. Il faut vraiment que je me mette à VBA car c'est encore compliqué pour moi.
Je ne manquerai pas de revenir vers toi si un autre cas me poserait problème.
Merci et @+