VBA Boucle copie/Colle [Résolu/Fermé]

Signaler
-
 Kak76 -
Bonjour !

Alors voilà j'ai une question car je galère pas mal! Mon problème est que j'ai 3 Onglets, Sur l'onglet Num°3 je dois vérifier si la valeur en Colonne C à partir de la ligne 3 jusqu'à la ligne 17 possède une valeur supérieur à 0, Si oui copier le texte sur la colonne B de la même ligne et modifier se texte pour le coller dans mon onglet NUM°1.


Exemple : Onglet numéro 3 (le texte Yo ne rentre pas en compte dans ma démarche, il est juste la pour illustrer)
A B C
1 YO Texte 0
2 YO2 Texte2 1
3 YO3 Texte3 8
Onglet Numéro 1
A
Texte2,"","1",""
Texte3,"",8,""

J'ai essayer de le faire avec une boucle sans, de copier même les valeurs avec les 0 mais rien y fait je suis bloqué.

Si une âme charitable passe par ici
Merci d'avance ! ;)

12 réponses

Messages postés
9580
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
28 octobre 2020
1 928
Bonjour

Peux tu mettre un bout de fichier au format excel 2003 sur cjoint.com et joindre le lien obtenu à ton prochain message
N'oublies pas des explications et des exemples de résultat attendu

Cdlmnt
Voici le lien http://www.cjoint.com/data3/3ExtKrR0RrS.htm
En gros j'ai déjà réalisé la partie la plus simple qui consiste uniquement a ouvrir un nouvel onglet "Codes".

Ce que moi je voudrais c'est un exemple pour la partie "gaine" dans l'onglet résultat. Pour l'exemple de la "gaine":

Si le Nombre est supérieur à 0 on récupère le code sur la colonne de Gauche on le copie, et on le modifie en le collant sur l'onglet qui s'ouvrira nommé "codes" de cette façon: CODE,"","NOMBRE",""

en revanche si le nombre est égale à 0 on en tient pas compte et on passe à la suite
Messages postés
9580
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
28 octobre 2020
1 928
Désolé, je ne peux pas lire ton fichier, je t'ai demandé un format excel2003 (fichier/enregistrer sous/Type excel 2003 , .xls)
http://www.cjoint.com/data3/3Exu4nlicaG.htm
Yes sorry, c'est bon là ;)
Messages postés
9580
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
28 octobre 2020
1 928
Le fichier est bon mais, tu n'expliques pas
1. comment tu obtiens les deux valeurs de la colonne M
AIRBPN250J,"","5",""
AIRGSN125300,"",'V,""
2. à partir de quoi
3. que doit on en faire
les deux valeurs sont ajouté directement c'était pour que je me souvienne de l'exemple

Se que je veux c'est :
Sur l'onglet gaine: que tout le tableau soit traité, Que toutes les lignes possédant une valeur supérieur à un soit retenue. Si la valeur dans la colonne "Nombre" est inférieur à 0 on s'en fou, si la valeur est supérieur on copie le code qui est dans la colonne code et on le mes sous le format que tu as put voir dans la colonne M. Tout ça le transféré dans l'onglet "Code" les uns après les autres.

Je sais pas si tu visualises ^^
un exemple :

Onglet "Résultat"

B C
AIRGSN250300 0
AIRGSN315300 8
AIRGSN125300 0
AIRGSN355300 15

On copie uniquement la ligne 2 et 4, et on le colle dans l'onglet "codes" en modifiant le code qui sera sous cette forme : CODE,"","NOMBRE",""

Soit dans l'onglet dans une cellule unique

A
AIRGSN315300,"","8",""
AIRGSN355300,"","15,""
Messages postés
9580
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
28 octobre 2020
1 928
1. Sur l'onglet gaine: que tout le tableau soit traité
Pas d'onglet gaine dans ton fichier veux tu parler du tableau gaine de l'onglet résultat?
2. S'il s'agit de ça, peux tu me donner le résultat attendu pour les trois lignes
1000	AIRGSN1000300	2
900 AIRGSN900300 3
800 AIRGSN800300 0
Messages postés
9580
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
28 octobre 2020
1 928
et
3. Que doit on alors mettre dans la feuille Code (colonne Code, colonne Qte
Oui le tableau excuse moi.
Donc si j'ai se que tu me proposes il faut que dans l'onglet code j'ai :
A
Ligne1
Ligne2 AIRGSN1000300,"","2",""
Ligne3 AIRGSN900300,"","3",""

Dans la ligne 1 de la colonne A j'ai programmé un truc pour qu'il me laisse un petit texte ^^
Messages postés
9580
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
28 octobre 2020
1 928
https://www.cjoint.com/?3Exwv2X3HOB
Lancement par Ctrl+k
Le code est dans Module 1

Bonne nuit
Messages postés
9580
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
28 octobre 2020
1 928
Plus correct, remplaces la procedure OK par celle ci

Public Sub OK()
Dim liFR As Long, lifinFR As Long, TC(), s As String, nbCod As Long, q As Long
With Sheets(FR)
  lifinFR = .Cells(Rows.Count, coCodFR).End(xlUp).Row
  nbCod = 0
  For liFR = lidebFR To lifinFR
    s = .Cells(liFR, coCodFR).Value
    q = .Cells(liFR, coCodFR + 1)
    If q <> 0 Then
    nbCod = nbCod + 1
      ReDim Preserve TC(1 To nbCod)
      s = s & "," & """" & q & """" & "," & """"""
      TC(nbCod) = s
    End If
  Next liFR
End With
Sheets(FC).Cells(lidebFC, coCodFC).Resize(nbCod, 1) = Application.Transpose(TC)
End Sub


Cdlmnt
Je te remercie !

Juste quand je lance il me dit que j'ai une erreur :

Public Sub OK()
Dim liTC As Long, lifinFR As Long, TC(), s As String, nbCod As Long, q As Long
With Sheets(FR)
lifinFR = .Cells(Rows.Count, coCodFR).End(xlUp).Row
nbCod = lifinFR - lidebFR - 1
ReDim TC(1 To nbCod)
For liTC = 1 To nbCod
s = .Cells(liTC + lidebFR - 1, coCodFR).Value
q = .Cells(liTC + lidebFR - 1, coCodFR + 1)
If q <> 0 Then
s = s & "," & """" & q & """" & "," & """"""
TC(liTC) = s
End If
Next liTC
End With
Sheets(FC).Cells(lidebFC, coCodFC).Resize(nbCod, 1) = Application.Transpose(TC)
End Sub

Sur la ligne en Gras ! ^^
Sinon merci beaucoup c'est gentil !
Messages postés
9580
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
28 octobre 2020
1 928
1. Juste quand je lance il me dit que j'ai une erreur :
sur mon fichier (lui chez moi, il fonctionne) ou sur le tien
as tu bien recopié et adapté les valeurs des constantes (nom des feuilles en particulier)
Public Const FR = "Résultat"
Public Const coCodFR = 2
Public Const lidebFR = 3

Public Const FC = "Codes"
Public Const coCodFC = 1
Public Const lidebFC = 2

2. mais prend plutôt le code du message #12 (plus propre)
C'est Bon ça marche !! Merci beaucoup !
Juste si je peux te poser 2 autres questions, parce que j'aimerais me débrouiller pour faire la suite de mon programme, j'aurais donc voulue savoir pour le tableau OBMC comment je peux le programmer pour avoir le même résultat que tu as fais? Car la je peux pas fixer la cellule de départ comme elle est variable en fonction du tableau Gaine dans l'onglet "codes". Vois tu ou je veux en venir ?

Et mon autre question c'est, où as tu appris à programmer ?
Messages postés
9580
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
28 octobre 2020
1 928
1. pour le tableau OBMC comment je peux le programmer pour avoir le même résultat que tu as fais
Tout dépend de ce que tu veux faire.
Il va falloir définir complètement le scénario, c'est à dire comment tu envisages l'utilisation de ton fichier, qu'as tu besoin de faire, comment, etc ...
Par exemple : Mes tableaux vont évoluer et à chaque évolution, je veux transférer à l'aide d'un bouton, les 3 tableaux dans les colonnes A et B la feuille Codes

2. c'est, où as tu appris à programmer ?
pourquoi cette question ?
Euh si je te pose cette question c'est parce que j'aimerais bien apprendre de façon concrète également, si tu as appris sur internet par exemple, je veux bien tes sources ou autres.

Sinon, là tu m'as programmé mon tableau Gaine qui me copie et modifie le texte en le collant dans 'l'onglet "codes" si la valeur du nombre est supérieur à 1, pour mes autres tableaux ( par exemple le tableau "OBMC") je veux faire la même chose que tu as fais pour les gaines mais mettre le résultat à la suite des codes de gaines dans l'onglet "codes". Le format reste le même c'est à dire du type : CODE,"","NOMBRE",""

En gros c'est un logiciel qui m'évite de recopier tous les codes manuellement car c'est assez pénible et répétitif. Quand je vais faire une étude je remplis le tableau "quantitatif" qui me chiffre directement mes tableaux dans l'onglet "Résultat", j'ai crée cette onglet car les codes peuvent changer, puis à partir de là me mettre tous mes outils dont leurs nombre est supérieur à 0 sous le format que tu as programmé. J'espère être assez précis

Mais le truc c'est que le nombre de ligne des codes pour les gaines étant variable je peux pas les fixées comme tu as put le faire pour traiter le tableau des gaines.
Messages postés
9580
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
28 octobre 2020
1 928
Un exemple parmi d'autres ...
https://www.cjoint.com/?3EyrvTNo5AV

RQ. le nombre de ligne des codes pour les gaines étant variable je peux pas les fixées comme tu as put le faire pour traiter le tableau des gaines.
Ce nombre n'est pas fixé dans le programme
lifinFR = .Cells(Rows.Count, co).End(xlUp).Row
renvoie la dernière ligne non vide de la colonne co donc, s'il y a 500 lignes, lifinFR vaudra 500

Cdlmnt
C'est juste PARFAIT ! donc je te remercie c'est vraiment super cool !!! :)
Messages postés
9580
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
28 octobre 2020
1 928
De rien,

Si c'est fini, merci de mettre le sujet à Résolu (en haut à droite de ton premier message)

Bonne fin de journée
Merci toi de même !