Copie de cellules en fonction de plusieurs conditions

Bonjour,

Je cherche à copier des cellules en fonction de conditions.

En fait, en "français", c'est :

Lorsque la tension du câble est de 200kV (information présente dans la table "Données d'entrée Cables") alors on a un cable conducteur et donc je dois remplir la colonne Canton_COND de ma table "PORTEE".

Cette colonne correspond au premier et dernier pylône du canton. Cette information est présente dans la table "Données d'entrée Cables".

Je veux donc arriver à remplir la colonne Canton_COND de la table PORTEE à partir des informations que j'ai dans la table "Données d'entrée Cables".

Voici un exemple :

Table "Données d'entrée Cables"

From Str. To Str. Voltage

1 3 200

1 3 200

1 3 0

3 10 0

3 21 200

Table "PORTEE"

Num_support_debfin Canton_COND

1-2 1_3

2-3 1_3

3-4 3-21

J'ai tenté un code mais ça ne donne pas ce qu'il faut.

i = 6

j = 2

While wscopie.Cells(i, 1) <> ""

If wscopie1.Cells(i, 5) = 200 Then

canton_deb = wscopie1.Cells(i, 3)

canton_fin = wscopie1.Cells(i, 4)

Else

rien = "rien pour le moment"

End If

wsnew.Activate

Cells(j, 3) = canton_deb & "_" & canton_fin

i = i+1

j = j+1

Je vous joins mon fichier avec les macros. C'est donc l'onglet "Données d'entrée Cables" où sont les informations d'entrée et l'onglet "LA" c'est ce que je cherche à obtenir via une macro qui s'applique en appuyant sur le bouton PORTEE dans l'onglet "General".

J'espère que j'ai été claire et que quelqu'un aura une solution à m'apporter,

Merci beaucoup,

Eva

Bonjour,

expliques en te servant des "a..Z" et "1..1000" ,

pour ce que j'ai compris

tu cherches : "200" kV (ou plus ?)

dans l'onglet : "Données d'entrée Cables"

on cherche la fin de la colonne E (Voltage kV)

LigneFin = Sheets("Données d'entrée Cables").Range("e6").End(xldown).Row

on regarde toute la colonne en faisant une boucle

For n = 6 to LigneFin

'dans cette boucle on cherche 200

If Sheets("Données d'entrée Cables").Range("e" & n).value = 200 Then

'quand on trouve on copie dans l'onglet "PORTEE"

Sheets("PORTEE").Range("c" & LigneFinDePORTEE).value = _

Sheets("Données d'entrée Cables").Range("c" & n).value & "_" & _

Sheets("Données d'entrée Cables").Range("d" & n).value

End If

Next n

voila le principal...

@+JP

Bonjour,

Tout d'abord, merci pour votre aide.

Donc le code que vous m'avez mis ne "répond" pas totalement à mon problème, il m'aide pour la tension par contre

En fait, c'est de ma faute, je n'ai pas bien expliqué le problème.

J'ai fait un fichier Excel à part afin que se soit plus clair.

Donc dans la feuil2, les colonnes A, B et C, seront des données présentes dans la feuille générée par ma macro.

J'essaye de générer la colonne G ("Canton_COND").

Donc pour cela, la première chose que j'ai détecté c'est que si c'est un câble conducteur alors la tension est de 200kv, avec cette condition, je suis arrivée à générer la colonne E ("Détection des portées conductrices"), j'ai mis NULL quand la condition n'est pas vérifiée. Mais cette colonne me pose problème car elle n'est pas en adéquation avec la colonne A. Par exemple, la cellule (E,15) et (E,16) sont en face de la cellule (A,15) et (A,16) ce qui ne va pas car 21_23 n'est pas dans 14_15.

Mon idée c'est peut-être :

1- Générer la liste des portées conductrices comme en colonne F, c'est a dire supprimer tous les doublons et les NULL.

2- A partir de cette colonne F, générer la colonne G en respectant l'ordre des pylônes (si on va du pylône 3 au 4 dans la colonne A alors dans la colonne G, je ne peux mettre que la portée 3_21)

Savez-vous donc comment je pourrais arriver à réaliser les points 1 et 2 ?

J'espère que cette fois-ci, j'ai été plus claire dans mes explications,

Je vous joins aussi mon fichier Excel avec les colonnes.

Merci par avance pour votre aide et pour ce super forum,

Eva

Bonjour,

J'essaye de générer la colonne G ("Canton_COND").

cette colonne existe dans "PORTEE" , c'est la colonne "C" ??

tu veux changer ces chiffres ?

la cellule (E,15) et (E,16) sont en face de la cellule (A,15) et (A,16) ce qui ne va pas car 21_23 n'est pas dans 14_15.

tu veux que E15 soit en E22 ?..ce qui correspond à ta colonne "G" ?

comment tu relies tes colonnes a,b,c avec e,f,g ?

@+JP

Bonjour,

Encore merci pour votre aide,

1- colonne ("Canton_COND")

" cette colonne existe dans "PORTEE" , c'est la colonne "C" ??

Cette colonne existera car dans ma macro je la crée. Par contre, je n'arrive pas à la remplir correctement.

"tu veux changer ces chiffres ?

Je veux le canton conducteur pour chaque portée de câble.

2 - tu veux que E15 soit en E22 ?..ce qui correspond à ta colonne "G" ?

Oui je cherche à obtenir la colonne "G" donc oui tout à fait E15 soit en E22 et ect.

J'arrive à générer la colonne E mais mon "cerveau" ne sait faire que ça, il est incapable pour le moment de générer la colonne "G".

J'espère que c'est plus claire,

Merci beaucoup de bien vouloir m'aider car je désespérè un peu,

Eva

Bonjour,

voila ton dernier post

capture2

voila ton premier post

capture1

et le code

Sub Onglet_PORTEE()

'Definition des variables
Dim CodeLIT, Support, Support2, canton_deb, canton_fin, rien As String
Dim i, j As Integer
Dim wsgeneral, wsnew, wscopie, wscopie1, wscopie2 As Worksheet

'Verification que la feuille n'existe pas et si c'est la cas création de la feuille
If FeuilleExiste(ThisWorkbook, "PORTEE_BIS") Then
    MsgBox "la feuille existe déjà !"
    Exit Sub
Else
    'Creation d'une nouvelle feuille
    Sheets.Add.Move After:=Sheets(Sheets.Count) 'Place la nouvelle feuille à la suite des feuilles déjà existante
    ActiveSheet.Name = "PORTEE_BIS" 'Donne un nom à la feuille
End If

' Affectation des de chaque feuille utilisée dans le programme à sa variable
Set wsgeneral = Worksheets("GENERAL")
Set wscopie = Worksheets("Données d'entrée Support")
Set wscopie1 = Worksheets("Données d'entrée Cables")
Set wscopie2 = Worksheets("Données d'entrée Canton")
Set wsnew = Worksheets("PORTEE_BIS")

'Ecriture des noms des colonnes
wsnew.Cells(1, 1).Value = "Num_support_debfin_Code_LIT"
wsnew.Cells(1, 2).Value = "Longueur_canton_COND"
wsnew.Cells(1, 3).Value = "Canton_COND"
wsnew.Cells(1, 4).Value = "Nature_COND"
wsnew.Cells(1, 5).Value = "Nombre_COND"
wsnew.Cells(1, 6).Value = "Temperature_reglage_COND"
wsnew.Cells(1, 7).Value = "Parametre_reglage_COND"
wsnew.Cells(1, 8).Value = "Temperature_repartition_COND"
wsnew.Cells(1, 9).Value = "Parametre_repartition_COND"
wsnew.Cells(1, 10).Value = "Balise_COND"
wsnew.Cells(1, 11).Value = "Fibre_Optique_COND"
wsnew.Cells(1, 12).Value = "Longueur_canton_CDG"
wsnew.Cells(1, 13).Value = "Canton_CDG"
wsnew.Cells(1, 14).Value = "Nature_CDG"
wsnew.Cells(1, 15).Value = "Nombre_CDG"
wsnew.Cells(1, 16).Value = "Temperature_reglage_CDG"
wsnew.Cells(1, 17).Value = "Parametre_reglage_CDG"
wsnew.Cells(1, 18).Value = "Balise_CDG"
wsnew.Cells(1, 19).Value = "Fibre_Optique_CDG"
wsnew.Cells(1, 20).Value = "Commentaire"

'Remplissage de la feuille à partir de la feuille Données d'entrée Support

wscopie.Activate 'Activation de la feuille Données d'entrée Support
i = 6 'Index pour parcourir la colonne A de la feuille Données d'entrée Support
j = 2 'Index pour parcourir la colonne A de la feuille SUPPORT_BIS

'Boucle qui remplie tant que la colonne A de la feuille Données d'entrée Support n'est pas vide
While wscopie.Cells(i, 1) <> ""
'Recupération de la données à copier
CodeLIT = wsgeneral.Cells(5, 6).Value
Support = Cells(i, 1)
Support2 = Cells(i + 1, 1)

If wscopie1.Cells(i, 5) = 200 Then
    canton_deb = wscopie1.Cells(i, 3)
    canton_fin = wscopie1.Cells(i, 4)
Else
    rien = "rien pour le moment"
End If

wsnew.Activate ' Activation de la feuille SUPPORT_BIS pour venir copier des données dedans
'Affectation des valeurs à la nouvelle feuille
Cells(j, 1) = Support & "-" & Support2 & " " & CodeLIT
Cells(j, 3) = canton_deb & "_" & canton_fin

i = i + 1
j = j + 1
wscopie.Activate 'Reactivation de la feuille de copie des données
Wend

wsnew.Range("A1:T1").Columns.AutoFit
wsnew.Activate 'Reactivation de la feuille de copie des données
wsnew.Tab.ColorIndex = 6 'Coloration de la nouvelle feuille en jaune

MsgBox "Onglet généré !...", vbOKOnly + vbInformation, "Confirmation" 'Fenêtre qui s'ouvre dans le classeur concerné avec un bouton Confirmation

End Sub

dans ce code ,

le code qui prend que les 200

If wscopie1.Cells(i, 5) = 200 Then
    canton_deb = wscopie1.Cells(i, 3)
    canton_fin = wscopie1.Cells(i, 4)
Else
    rien = "rien pour le moment"
End If

et le code qui écrit

wsnew.Activate ' Activation de la feuille SUPPORT_BIS pour venir copier des données dedans
'Affectation des valeurs à la nouvelle feuille
Cells(j, 1) = Support & "-" & Support2 & " " & CodeLIT
Cells(j, 3) = canton_deb & "_" & canton_fin

????

si tu veux écrire en "g"

Cells(j, 7) = canton_deb & "_" & canton_fin

à part çà je n'arrive pas à te comprendre ... désolé

@+JP

Bonjour,

Merci beaucoup, mais j'ai finalement réussi à mes fins avec des boucles un peu dans tous les sens !!

J'ai un autre problème complétement différents, donc je ne sais pas si je dois ouvrir un autre sujet ou le mettre dans le même ?

Donc je vais ouvrir un autre sujet et je m'excuse par avance si ce n'était pas la marche à suivre,

Merci à toi car avec tes questions ça ma permis de mieux cerner mon problème !

Eva

Rechercher des sujets similaires à "copie fonction conditions"