Comparaison de 3 cellules avavant copie

Le
Driss HANIB
Bonjour à tous

Connaissant VB6 mais très peu VBA Excel, je me permets de vous solliciter
pour m'aider à faire une tache répétitive.

Soit deux feuilles de données A et B dans deux classeurs différents (mais à
la limite je peux les mettre dasn le même classeur)

Mon problème est que je doit fusionner deux feuilles en une seule de la
façon suivante.

Soit une feuille A qui contient mes données principales et une feuille B qui
contient les données à ajouter.

ma feuille B contient N lignes (env 1500).
je veux parcourir ces lignes et pour chaque ligne je dois prendre le contenu
de 3 cellules situées donc dans trois colonnes différentes que je mets dans
3 variables.
lorsque j'ai ces 3 variables je dois parcourir l'autre feuille (A) pour voir
s' il y a une ligne donc 3 cellules (indice de colonne connu) qui contient
les mêmes valeurs. Si oui alors je reviens dans la feuille d'origine
(feuille B) et je dois copier le contenu de trois autres cellules (colonnes
connues) de cette même ligne dans trois cellules de la feuille A (colonnes
connues).
Il est possible que dans le feuille A il y ait plusieurs lignes qui soient
valables. il faut donc pouvoir parcourir la aussi tout le tableau de A avant
de changer de ligne dans B.

j'aurai voulu donc savoir dans un premier temps comment parcourir un tableau
de la ligne 1 à la ligne N non vide ?
Et ensuite comment récupérer la valeur d'une cellule pour la mettre dans une
variable ?

merci pour vos pistes

Driss
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
fraction
Le #22177431
j'aurai voulu donc savoir dans un premier temps comment parcourir un tabl eau
de la ligne 1 à la ligne N non vide ?



J'ai une solution de bric et de broc, mais les autres contributeurs
ont sûrement mieux :

Dim nbchamps, compteur, compteur2 as Integer, condition, condition2 as
Boolean

nbchamps = ' Là, tu écris le nombre de la plus grande colonne
condition = False
compteur = 0

While not condition = True
compteur = compteur + 1
condition2 = False
For compteur2 = 1 to nbchamps
If Feuil1.Cells(compteur,compteur2) <> "" Then
condition2 = True
Endif
Next compteur2
If condition2 = True Then
'Là, tu écris ta manipulation (compteur est le numéro de la
ligne, et tu dois remplacer Feuil1 par le nom de la feuille à étudier)
Endif
If Feuil1.Cells(compteur,1) = "" And Feuil1.Cells(compteur + 1,
1) = "" Then
condition = True 'Ca c'est la condition de sortie de la boucle,
j'ai considéré que si deux lignes consécutives sont vides dans leur
colonne 1,
alors il faut sortir
Endif
Wend

Et ensuite comment récupérer la valeur d'une cellule pour la mettre d ans une
variable ?



Le tout est de bien déclarer ta variable. Si le contenu de ta cellule
est un texte :

Dim variable As String

variable = Feuil1.Cells(ligne, colonne) ' remplace ligne par le numéro
de la ligne, colonne par le numéro de la colonne, et Feuil1 par le nom
de ta feuille


merci pour vos pistes

Driss
fraction
Le #22177621
PS : le nom de la feuille n'est pas celui de l'onglet. C'est celui qui
s'affiche avant la parenthèse dans la fenêtre "VBA project". Sinon, si
tu veux utiliser le nom de l'onglet, à la place de "Feuil1", il faut
écrire sheets("Répertoire"), si le nom de l'onglet est "Répertoire".
Hervé
Le #22188641
Bonjour Driss,

A adapter et à tester ceci (sur une copie du classeur après avoir mis
les deux feuilles dedans) :

Sub RecupValeurs()

Dim PlageA As Range
Dim PlageB As Range
Dim CelA As Range
Dim CelB As Range
Dim Valeur As Variant
Dim ValeurCherchee As Variant

'les 2 feuilles sont dans le même classeur !
'les feuilles se nomment A et B, à adapté...!

'défini la grandeur de la plage sur la colonne A
'pour les 2 feuilles
With Worksheets("A")
Set PlageA = .Range(.[A1], .[A65536].End(xlUp))
End With

With Worksheets("B")
Set PlageB = .Range(.[A1], .[A65536].End(xlUp))
End With

'parcour la colonne A de la feuille B
For Each CelB In PlageB

'concatène les trois valeurs situées en colonne A, B et C
'de la feuille B pour simplifier la recherche
ValeurCherchee = CelB & CelB.Offset(0, 1) & CelB.Offset(0, 2)

'puisqu'il y a possibilité de plusieurs lignes correspondant
'au critère, il faut mouliner sur la feuille A, le parcourt ligne
'par ligne se fait sur la colonne A
For Each CelA In PlageA

'concatène les trois valeurs situées en colonne D, E et F
'de la feuille A pour comparaison aux colonnes A, B et C de
'la feuille B, à adapté...!
Valeur = CelA.Offset(0, 3) & _
CelA.Offset(0, 4) & _
CelA.Offset(0, 5)

'si la valeur est trouvée
If ValeurCherchee = Valeur Then

With PlageA
'colle le contenu de la cellule D
'de la feuille B dans la colonne G
'de la feuille A, de même pour les autres, à adapté...!
'D dans G
.Offset(0, 6) = Cel.Offset(0, 3)
'E dans H
.Offset(0, 7) = Cel.Offset(0, 4)
'F dans I
.Offset(0, 8) = Cel.Offset(0, 5)
End With

End If

Next CelA

Next Cel

Set CelA = Nothing
Set CelB = Nothing
Set PlageA = Nothing
Set PlageB = Nothing

End Sub


Hervé.




Le 27/05/2010 16:43, Driss HANIB a écrit :
Bonjour à tous

Connaissant VB6 mais très peu VBA Excel, je me permets de vous solliciter
pour m'aider à faire une tache répétitive.

Soit deux feuilles de données A et B dans deux classeurs différents (mais à
la limite je peux les mettre dasn le même classeur)

Mon problème est que je doit fusionner deux feuilles en une seule de la
façon suivante.

Soit une feuille A qui contient mes données principales et une feuille B qui
contient les données à ajouter.

ma feuille B contient N lignes (env 1500).
je veux parcourir ces lignes et pour chaque ligne je dois prendre le contenu
de 3 cellules situées donc dans trois colonnes différentes que je mets dans
3 variables.
lorsque j'ai ces 3 variables je dois parcourir l'autre feuille (A) pour voir
s' il y a une ligne donc 3 cellules (indice de colonne connu) qui contient
les mêmes valeurs. Si oui alors je reviens dans la feuille d'origine
(feuille B) et je dois copier le contenu de trois autres cellules (colonnes
connues) de cette même ligne dans trois cellules de la feuille A (colonnes
connues).
Il est possible que dans le feuille A il y ait plusieurs lignes qui soient
valables. il faut donc pouvoir parcourir la aussi tout le tableau de A avant
de changer de ligne dans B.

j'aurai voulu donc savoir dans un premier temps comment parcourir un tableau
de la ligne 1 à la ligne N non vide ?
Et ensuite comment récupérer la valeur d'une cellule pour la mettre dans une
variable ?

merci pour vos pistes

Driss


Driss HANIB
Le #22193451
merci à Fraction et à Hervé

j'ai pu résoudre mion problème

Driss
"Driss HANIB" efSLUra$
Bonjour à tous

Connaissant VB6 mais très peu VBA Excel, je me permets de vous solliciter
pour m'aider à faire une tache répétitive.

Soit deux feuilles de données A et B dans deux classeurs différents (mais
à la limite je peux les mettre dasn le même classeur)

Mon problème est que je doit fusionner deux feuilles en une seule de la
façon suivante.

Soit une feuille A qui contient mes données principales et une feuille B
qui contient les données à ajouter.

ma feuille B contient N lignes (env 1500).
je veux parcourir ces lignes et pour chaque ligne je dois prendre le
contenu de 3 cellules situées donc dans trois colonnes différentes que je
mets dans 3 variables.
lorsque j'ai ces 3 variables je dois parcourir l'autre feuille (A) pour
voir s' il y a une ligne donc 3 cellules (indice de colonne connu) qui
contient les mêmes valeurs. Si oui alors je reviens dans la feuille
d'origine (feuille B) et je dois copier le contenu de trois autres
cellules (colonnes connues) de cette même ligne dans trois cellules de la
feuille A (colonnes connues).
Il est possible que dans le feuille A il y ait plusieurs lignes qui soient
valables. il faut donc pouvoir parcourir la aussi tout le tableau de A
avant de changer de ligne dans B.

j'aurai voulu donc savoir dans un premier temps comment parcourir un
tableau de la ligne 1 à la ligne N non vide ?
Et ensuite comment récupérer la valeur d'une cellule pour la mettre dans
une variable ?

merci pour vos pistes

Driss

Publicité
Poster une réponse
Anonyme